http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50737
--- Comment #12 from Uros Bizjak <ubizjak at gmail dot com> 2011-10-16 20:34:51 UTC --- (In reply to comment #11) > > Running target unix > > FAIL: Array_3 execution - source compiled test > > FAIL: Array_3 -findirect-dispatch execution - source compiled test > > FAIL: Array_3 -O3 execution - source compiled test > > FAIL: Array_3 -O3 -findirect-dispatch execution - source compiled test > > Probably because of a double PC adjustment for signals. The old code should > be > removed, it is located in libjava/include/dwarf2-signal.h for alpha. Indeed! Following additional patch fixes all libjava tests: Index: libjava/include/dwarf2-signal.h =================================================================== --- libjava/include/dwarf2-signal.h (revision 180054) +++ libjava/include/dwarf2-signal.h (working copy) @@ -29,21 +29,8 @@ // then throw an exception. With the dwarf2 unwinder we don't usually // need to do anything, with some minor exceptions. -#ifdef __alpha__ -#define MAKE_THROW_FRAME(_exception) \ -do \ -{ \ - /* Alpha either leaves PC pointing at a faulting instruction or the \ - following instruction, depending on the signal. SEGV always does \ - the former, so we adjust the saved PC to point to the following \ - instruction; this is what the handler in libgcc expects. */ \ - struct sigcontext *_sc = (struct sigcontext *)_p; \ - _sc->sc_pc += 4; \ -} \ -while (0) +#ifdef __ia64__ -#elif defined(__ia64__) - #define MAKE_THROW_FRAME(_exception) \ do \ { \ I'm re-running libjava tests and will post complete patch to gcc-patches@ ML.