Date: Fri, 26 Feb 2016 22:04:28 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 207325] projects/clang380-import for TARGET_ARCH=powerpc : c++ exceptions cause SEGV (9 line program) Message-ID: <bug-207325-8-smsZVudYgb@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-207325-8@https.bugs.freebsd.org/bugzilla/> References: <bug-207325-8@https.bugs.freebsd.org/bugzilla/>
next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D207325 --- Comment #4 from Mark Millard <markmi@dsl-only.net> --- I have found the following mismatch between the powerpc code generated and = the .eh_frame information generated by clang 3.8.0. (Using objdump and dwarfdump notation below, no relocations.) 00007fd8 <_Unwind_RaiseException> mflr r0 00007fdc <_Unwind_RaiseException+0x4> stw r31,-148(r1) 00007fe0 <_Unwind_RaiseException+0x8> stw r30,-152(r1) 00007fe4 <_Unwind_RaiseException+0xc> stw r0,4(r1) 00007fe8 <_Unwind_RaiseException+0x10> stwu r1,-2992(r1) 00007fec <_Unwind_RaiseException+0x14> mr r31,r1 00007ff0 <_Unwind_RaiseException+0x18> mfcr r12 . . . 0000827c <_Unwind_RaiseException+0x2a4> lwz r14,2776(r31) 00008280 <_Unwind_RaiseException+0x2a8> addi r1,r1,2992 00008284 <_Unwind_RaiseException+0x2ac> lwz r0,4(r1) 00008288 <_Unwind_RaiseException+0x2b0> lwz r31,-148(r1) 0000828c <_Unwind_RaiseException+0x2b4> lwz r30,-152(r1) 00008290 <_Unwind_RaiseException+0x2b8> mtlr r0 00008294 <_Unwind_RaiseException+0x2bc> blr 00008298 <_Unwind_RaiseException+0x2c0> bl 0001eccc <abort@plt> The .eh_frame information shows off cfa=3D2992(r31) over that whole range b= ut 0x828c to 0x8298 comes after R31 is returned to its old value. (See below.) Also with <off cfa=3D2992(r31) > for 0x00007ff0 it also lists: <off r31=3D-= 148(cfa) > for 0x00007ff0. In other words: DW_CFA_offset r31 -148 (37 * -4) is used as if cfa was not tied to r31's value via <off cfa=3D2992(r31) >. The dwarfdump material for this is: < 0><0x00007fd8:0x0000829c><><fde offset 0x000002b4 length: 0x00000064><= eh aug data len 0x0> 0x00007fd8: <off cfa=3D00(r1) >=20 0x00007fec: <off cfa=3D2992(r1) > <off r30=3D-152(cfa) > <off r31= =3D-148(cfa) > <off r65=3D04(cfa) >=20 0x00007ff0: <off cfa=3D2992(r31) > <off r14=3D-216(cfa) > <off r15=3D-212(cfa) > <off r16=3D-208(cfa) > <off r17=3D-204(cfa) > <off r18=3D= -200(cfa) > <off r19=3D-196(cfa) > <off r20=3D-192(cfa) > <off r21=3D-188(cfa) > <off r22=3D-184(cfa) > <off r23=3D-180(cfa) > <off r24=3D-176(cfa) > <off r25=3D= -172(cfa) > <off r26=3D-168(cfa) > <off r27=3D-164(cfa) > <off r28=3D-160(cfa) > <off r29=3D-156(cfa) > <off r30=3D-152(cfa) > <off r31=3D-148(cfa) > <off r46=3D= -144(cfa) > <off r47=3D-136(cfa) > <off r48=3D-128(cfa) > <off r49=3D-120(cfa) > <off r50=3D-112(cfa) > <off r51=3D-104(cfa) > <off r52=3D-96(cfa) > <off r53=3D-= 88(cfa) > <off r54=3D-80(cfa) > <off r55=3D-72(cfa) > <off r56=3D-64(cfa) > <off r57= =3D-56(cfa) > <off r58=3D-48(cfa) > <off r59=3D-40(cfa) > <off r60=3D-32(cfa) > <off r61= =3D-24(cfa) > <off r62=3D-16(cfa) > <off r63=3D-8(cfa) > <off r65=3D04(cfa) >=20 fde section offset 692 0x000002b4 cie offset for fde: 696 0x000002b8 0 DW_CFA_advance_loc 20 (5 * 4) 1 DW_CFA_def_cfa_offset 2992 4 DW_CFA_offset r31 -148 (37 * -4) 6 DW_CFA_offset r30 -152 (38 * -4) 8 DW_CFA_offset_extended_sf r65 4 (-1 * -4) 11 DW_CFA_advance_loc 4 (1 * 4) 12 DW_CFA_def_cfa_register r31 14 DW_CFA_offset r14 -216 (54 * -4) 16 DW_CFA_offset r15 -212 (53 * -4) 18 DW_CFA_offset r16 -208 (52 * -4) 20 DW_CFA_offset r17 -204 (51 * -4) 22 DW_CFA_offset r18 -200 (50 * -4) 24 DW_CFA_offset r19 -196 (49 * -4) 26 DW_CFA_offset r20 -192 (48 * -4) 28 DW_CFA_offset r21 -188 (47 * -4) 30 DW_CFA_offset r22 -184 (46 * -4) 32 DW_CFA_offset r23 -180 (45 * -4) 34 DW_CFA_offset r24 -176 (44 * -4) 36 DW_CFA_offset r25 -172 (43 * -4) 38 DW_CFA_offset r26 -168 (42 * -4) 40 DW_CFA_offset r27 -164 (41 * -4) 42 DW_CFA_offset r28 -160 (40 * -4) 44 DW_CFA_offset r29 -156 (39 * -4) 46 DW_CFA_offset r30 -152 (38 * -4) 48 DW_CFA_offset r31 -148 (37 * -4) 50 DW_CFA_offset r46 -144 (36 * -4) 52 DW_CFA_offset r47 -136 (34 * -4) 54 DW_CFA_offset r48 -128 (32 * -4) 56 DW_CFA_offset r49 -120 (30 * -4) 58 DW_CFA_offset r50 -112 (28 * -4) 60 DW_CFA_offset r51 -104 (26 * -4) 62 DW_CFA_offset r52 -96 (24 * -4) 64 DW_CFA_offset r53 -88 (22 * -4) 66 DW_CFA_offset r54 -80 (20 * -4) 68 DW_CFA_offset r55 -72 (18 * -4) 70 DW_CFA_offset r56 -64 (16 * -4) 72 DW_CFA_offset r57 -56 (14 * -4) 74 DW_CFA_offset r58 -48 (12 * -4) 76 DW_CFA_offset r59 -40 (10 * -4) 78 DW_CFA_offset r60 -32 (8 * -4) 80 DW_CFA_offset r61 -24 (6 * -4) 82 DW_CFA_offset r62 -16 (4 * -4) 84 DW_CFA_offset r63 -8 (2 * -4) 86 DW_CFA_nop --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-207325-8-smsZVudYgb>