Date: Sun, 6 Mar 2016 03:48:46 -0800 From: Mark Millard <markmi@dsl-only.net> To: Roman Divacky <rdivacky@vlakno.cz>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org> Subject: Bug 207736 submitted for TARGET_ARCH=powerpc (& ppc64?) clang 3.8.0 frame-pointer code generation error for _Unwind_RaiseException Message-ID: <AEABBB51-79D4-49FF-AF6C-17CEEE0F3D6C@dsl-only.net>
next in thread | raw e-mail | index | archive | help
[This has been reported on llvm bugzilla: 26856.] The below causes gdb difficulties for its stack handling: more than just = exception handling is at issue. I just happened to notice it via = exception handling. Function _Unwind_RaiseException below is from a FreeBSD = TARGET_ARCH=3Dpowerpc "buildworld" using clang 3.8.0. Dump of assembler code for function _Unwind_RaiseException: 0x41b2ab80 <+0>: mflr r0 0x41b2ab84 <+4>: stw r31,-148(r1) 0x41b2ab88 <+8>: stw r30,-152(r1) 0x41b2ab8c <+12>: stw r0,4(r1) 0x41b2ab90 <+16>: stwu r1,-2992(r1) 0x41b2ab94 <+20>: mr r31,r1 . . . 0x41b2abe0 <+96>: stw r31,2844(r31) (which replaces the earlier save of the old Frame pointer R31 value with a copy of r1's current value. Note the offset relationships with the r1 adjustment: -2992+2844=3D-148) . . . 0x41b2add0 <+592>: lwz r31,2844(r31) (This restores the r1 value that resulted from the "stwu r1,-2992(r1)" = into R31.) . . . 0x41b2ae30 <+688>: lwz r31,-148(r1) (This restores the r1 value that resulted from the "stwu r1,-2992(r1)" = into R31.) . . . The wrong r31 value is present when _Unwind_RaiseException returns. But before that while _Unwind_RaiseException is active the C++ exception = handling infrastructure has been given bad r31 information for around = _Unwind_RaiseException's frame. =3D=3D=3D Mark Millard markmi at dsl-only.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AEABBB51-79D4-49FF-AF6C-17CEEE0F3D6C>