| /* This test used to cause an assertion in the address space manager */ |
| |
| __attribute__((noinline)) |
| static void inner(void) |
| { |
| /* Set other registers to apriori known values. */ |
| __asm__ __volatile__( |
| "movl $0x101, %%eax\n" |
| "movl $0x102, %%ebx\n" |
| "movl $0x103, %%ecx\n" |
| "movl $0x104, %%edx\n" |
| "movl $0x105, %%esi\n" |
| "movl $0x106, %%edi\n" |
| // not %ebp as mdb is then not able to reconstruct stack trace |
| "movl $0x108, %%esp\n" |
| "movl $0x1234, (%%eax)\n" // should cause SEGV here |
| "ud2" // should never get here |
| : // no output registers |
| : // no input registers |
| : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "%esp"); |
| } |
| |
| __attribute__((noinline)) |
| static void outer(void) |
| { |
| inner(); |
| } |
| |
| int main(int argc, const char *argv[]) |
| { |
| outer(); |
| return 0; |
| } |