| /* Copyright 1992-2021 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| /* Simple little program that just generates a core dump from inside some |
| nested function calls. Keep this as self contained as possible, I.E. |
| use no environment resources other than possibly abort(). */ |
| |
| #ifndef __STDC__ |
| #define const /**/ |
| #endif |
| |
| #ifndef HAVE_ABORT |
| #define HAVE_ABORT 1 |
| #endif |
| |
| #if HAVE_ABORT |
| #include <stdlib.h> |
| #define ABORT abort() |
| #else |
| #define ABORT {char *invalid = 0; *invalid = 0xFF;} |
| #endif |
| |
| #ifdef USE_RLIMIT |
| # include <sys/resource.h> |
| # ifndef RLIM_INFINITY |
| # define RLIM_INFINITY -1 |
| # endif |
| #endif /* USE_RLIMIT */ |
| |
| /* Don't make these automatic vars or we will have to walk back up the |
| stack to access them. */ |
| |
| char *buf1; |
| char *buf2; |
| |
| int coremaker_data = 1; /* In Data section */ |
| int coremaker_bss; /* In BSS section */ |
| |
| const int coremaker_ro = 201; /* In Read-Only Data section */ |
| |
| void |
| func2 (int x) |
| { |
| int coremaker_local[5]; |
| int i; |
| static int y; |
| |
| #ifdef USE_RLIMIT |
| { |
| struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY }; |
| |
| setrlimit (RLIMIT_CORE, &rlim); |
| } |
| #endif |
| |
| /* Make sure that coremaker_local doesn't get optimized away. */ |
| for (i = 0; i < 5; i++) |
| coremaker_local[i] = i; |
| coremaker_bss = 0; |
| for (i = 0; i < 5; i++) |
| coremaker_bss += coremaker_local[i]; |
| coremaker_data = coremaker_ro + 1; |
| y = 10 * x; |
| ABORT; |
| } |
| |
| void |
| func1 (int x) |
| { |
| func2 (x * 2); |
| } |
| |
| int main () |
| { |
| func1 (10); |
| return 0; |
| } |