From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19563 invoked by alias); 28 Jun 2006 23:57:41 -0000 Received: (qmail 19548 invoked by uid 48); 28 Jun 2006 23:57:35 -0000 Date: Thu, 29 Jun 2006 00:01:00 -0000 Subject: [Bug c/28197] New: longjmp and alloca cause bus error X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "akr at m17n dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2006-06/txt/msg02472.txt.bz2 List-Id: I got a bus error by following program which use longjmp and __builtin_alloca with -O0. % cat z.c #include jmp_buf env; void f(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { longjmp(env, 1); } int main() { if (setjmp(env) == 0) { void *p = __builtin_alloca(4); f(1,2,3,4,5,6,7,8); } return 0; } % ~/src/gcc/bin/gcc -E z.c > z.i % cat z.i # 1 "z.c" # 1 "" # 1 "" # 1 "z.c" # 1 "/usr/include/setjmp.h" 1 3 4 # 26 "/usr/include/setjmp.h" 3 4 # 1 "/usr/include/machine/setjmp.h" 1 3 4 # 29 "/usr/include/machine/setjmp.h" 3 4 # 1 "/usr/include/ppc/setjmp.h" 1 3 4 # 31 "/usr/include/ppc/setjmp.h" 3 4 # 1 "/usr/include/sys/cdefs.h" 1 3 4 # 32 "/usr/include/ppc/setjmp.h" 2 3 4 # 1 "/usr/include/machine/signal.h" 1 3 4 # 27 "/usr/include/machine/signal.h" 3 4 # 1 "/usr/include/ppc/signal.h" 1 3 4 # 29 "/usr/include/ppc/signal.h" 3 4 # 1 "/usr/include/sys/appleapiopts.h" 1 3 4 # 30 "/usr/include/ppc/signal.h" 2 3 4 typedef int sig_atomic_t; # 50 "/usr/include/ppc/signal.h" 3 4 typedef enum { REGS_SAVED_NONE, REGS_SAVED_CALLER, REGS_SAVED_ALL } regs_saved_t; # 66 "/usr/include/ppc/signal.h" 3 4 struct sigcontext32 { int sc_onstack; int sc_mask; int sc_ir; int sc_psw; int sc_sp; void *sc_regs; }; struct sigcontext64 { int sc_onstack; int sc_mask; long long sc_ir; long long sc_psw; long long sc_sp; void *sc_regs; }; struct sigcontext { int sc_onstack; int sc_mask; int sc_ir; int sc_psw; int sc_sp; void *sc_regs; }; # 28 "/usr/include/machine/signal.h" 2 3 4 # 33 "/usr/include/ppc/setjmp.h" 2 3 4 struct _jmp_buf { struct sigcontext sigcontext; unsigned int vmask __attribute__((aligned(8))); unsigned int vreg[32 * 4] __attribute__((aligned(16))); }; # 82 "/usr/include/ppc/setjmp.h" 3 4 typedef int jmp_buf[(26 + 18*2 + 129 + 1)]; typedef int sigjmp_buf[(26 + 18*2 + 129 + 1) + 1]; extern int setjmp(jmp_buf env); extern void longjmp(jmp_buf env, int val); int _setjmp(jmp_buf env); void _longjmp(jmp_buf, int val); int sigsetjmp(sigjmp_buf env, int val); void siglongjmp(sigjmp_buf env, int val); void longjmperror(void); # 30 "/usr/include/machine/setjmp.h" 2 3 4 # 27 "/usr/include/setjmp.h" 2 3 4 # 2 "z.c" 2 jmp_buf env; void f(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { longjmp(env, 1); } int main() { if (setjmp(env) == 0) { void *p = __builtin_alloca(4); f(1,2,3,4,5,6,7,8); } return 0; } % ~/src/gcc/bin/gcc -O0 -g -v z.i Using built-in specs. Target: powerpc-apple-darwin8.6.0 Configured with: ../gcc-4.1.1/configure --prefix=/Users/akr/src/gcc --enable-languages=c --with-as=/Users/akr/src/odcctools/bin/as --with-ld=/Users/akr/src/odcctools/bin/ld Thread model: posix gcc version 4.1.1 /Users/akr/src/gcc/libexec/gcc/powerpc-apple-darwin8.6.0/4.1.1/cc1 -fpreprocessed z.i -feliminate-unused-debug-symbols -fPIC -quiet -dumpbase z.i -auxbase z -g -O0 -version -o /var/tmp//ccD20CPP.s GNU C version 4.1.1 (powerpc-apple-darwin8.6.0) compiled by GNU C version 4.1.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 060081fe4c432c1f8e1af4cf790a4da4 /Users/akr/src/odcctools/bin/as -arch ppc -o /var/tmp//cck0sLjz.o /var/tmp//ccD20CPP.s /Users/akr/src/gcc/libexec/gcc/powerpc-apple-darwin8.6.0/4.1.1/collect2 -dynamic -arch ppc -weak_reference_mismatches non-weak -o a.out -lcrt1.o /Users/akr/src/gcc/lib/gcc/powerpc-apple-darwin8.6.0/4.1.1/crt2.o -L/Users/akr/src/gcc/lib/gcc/powerpc-apple-darwin8.6.0/4.1.1 -L/Users/akr/src/gcc/lib/gcc/powerpc-apple-darwin8.6.0/4.1.1/../../.. /var/tmp//cck0sLjz.o -lgcc -lSystemStubs -lSystem % ./a.out zsh: bus error ./a.out % uname -a Darwin ppc64.tky.aist.go.jp 8.6.0 Darwin Kernel Version 8.6.0: Tue Mar 7 16:58:48 PST 2006; root:xnu-792.6.70.obj~1/RELEASE_PPC Power Macintosh powerpc -- Summary: longjmp and alloca cause bus error Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: akr at m17n dot org GCC build triplet: powerpc-apple-darwin8.6.0 GCC host triplet: powerpc-apple-darwin8.6.0 GCC target triplet: powerpc-apple-darwin8.6.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28197