Commit | Line | Data |
---|---|---|
c2d11a7d JM |
1 | /* Simple little program that just generates a core dump from inside some |
2 | nested function calls. Keep this as self contained as possible, I.E. | |
3 | use no environment resources other than possibly abort(). */ | |
4 | ||
5 | #ifndef __STDC__ | |
6 | #define const /**/ | |
7 | #endif | |
8 | ||
9 | #ifndef HAVE_ABORT | |
10 | #define HAVE_ABORT 1 | |
11 | #endif | |
12 | ||
13 | #if HAVE_ABORT | |
14 | #define ABORT abort() | |
15 | #else | |
16 | #define ABORT {char *invalid = 0; *invalid = 0xFF;} | |
17 | #endif | |
18 | ||
19 | /* Don't make these automatic vars or we will have to walk back up the | |
20 | stack to access them. */ | |
21 | ||
22 | char *buf1; | |
23 | char *buf2; | |
24 | ||
25 | int coremaker_data = 1; /* In Data section */ | |
26 | int coremaker_bss; /* In BSS section */ | |
27 | ||
28 | const int coremaker_ro = 201; /* In Read-Only Data section */ | |
29 | ||
30 | void | |
31 | func2 (int x) | |
32 | { | |
33 | int coremaker_local[5]; | |
34 | int i; | |
35 | static int y; | |
36 | ||
37 | /* Make sure that coremaker_local doesn't get optimized away. */ | |
38 | for (i = 0; i < 5; i++) | |
39 | coremaker_local[i] = i; | |
40 | coremaker_bss = 0; | |
41 | for (i = 0; i < 5; i++) | |
42 | coremaker_bss += coremaker_local[i]; | |
43 | coremaker_data = coremaker_ro + 1; | |
44 | y = 10 * x; | |
45 | ABORT; | |
46 | } | |
47 | ||
48 | void | |
49 | func1 (int x) | |
50 | { | |
51 | func2 (x * 2); | |
52 | } | |
53 | ||
54 | int main () | |
55 | { | |
56 | func1 (10); | |
57 | return 0; | |
58 | } |