17d4a28b986eaf98814c530a2074e117145b14d1fflorian/* This test used to cause an assertion in the address space manager */
27d4a28b986eaf98814c530a2074e117145b14d1fflorian
37d4a28b986eaf98814c530a2074e117145b14d1fflorian__attribute__((noinline))
47d4a28b986eaf98814c530a2074e117145b14d1fflorianstatic void inner(void)
57d4a28b986eaf98814c530a2074e117145b14d1fflorian{
67d4a28b986eaf98814c530a2074e117145b14d1fflorian   /* Set other registers to apriori known values. */
77d4a28b986eaf98814c530a2074e117145b14d1fflorian   __asm__ __volatile__(
87d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x101, %%eax\n"
97d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x102, %%ebx\n"
107d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x103, %%ecx\n"
117d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x104, %%edx\n"
127d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x105, %%esi\n"
137d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x106, %%edi\n"
147d4a28b986eaf98814c530a2074e117145b14d1fflorian      // not %ebp as mdb is then not able to reconstruct stack trace
157d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x108, %%esp\n"
167d4a28b986eaf98814c530a2074e117145b14d1fflorian      "movl $0x1234, (%%eax)\n"  // should cause SEGV here
177d4a28b986eaf98814c530a2074e117145b14d1fflorian      "ud2"                      // should never get here
187d4a28b986eaf98814c530a2074e117145b14d1fflorian      : // no output registers
197d4a28b986eaf98814c530a2074e117145b14d1fflorian      : // no input registers
207d4a28b986eaf98814c530a2074e117145b14d1fflorian      : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "%esp");
217d4a28b986eaf98814c530a2074e117145b14d1fflorian}
227d4a28b986eaf98814c530a2074e117145b14d1fflorian
237d4a28b986eaf98814c530a2074e117145b14d1fflorian__attribute__((noinline))
247d4a28b986eaf98814c530a2074e117145b14d1fflorianstatic void outer(void)
257d4a28b986eaf98814c530a2074e117145b14d1fflorian{
267d4a28b986eaf98814c530a2074e117145b14d1fflorian   inner();
277d4a28b986eaf98814c530a2074e117145b14d1fflorian}
287d4a28b986eaf98814c530a2074e117145b14d1fflorian
297d4a28b986eaf98814c530a2074e117145b14d1fflorianint main(int argc, const char *argv[])
307d4a28b986eaf98814c530a2074e117145b14d1fflorian{
317d4a28b986eaf98814c530a2074e117145b14d1fflorian   outer();
327d4a28b986eaf98814c530a2074e117145b14d1fflorian   return 0;
337d4a28b986eaf98814c530a2074e117145b14d1fflorian}
34