I got a bus error by following program which use longjmp and __builtin_alloca
with -O0.

% cat z.c
#include <setjmp.h>

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 "<built-in>"
# 1 "<command line>"
# 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

Reply via email to