This patch addresses the following FAILs on armv6-m: FAIL: g++.sum:g++.old-deja/g++.jason/thunk2.C -std=gnu++11 execution test FAIL: g++.sum:g++.old-deja/g++.jason/thunk2.C -std=gnu++98 execution test
The source of the problem is the use of ARM thunk offsets for Thumb1. This test is using multiple inheritance, and that triggered the problem. I tested this patch with the default ARM and THUMB multilibs in additional to -march=armv6-m. OK for trunk? Cesar 2013-06-06 Julian Brown <jul...@codesourcery.com> Cesar Philippidis <ce...@codesourcery.com> gcc/ * config/arm/arm.c (arm_output_mi_thunk): Fix offset for TARGET_THUMB1_ONLY.
Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 405523) +++ gcc/config/arm/arm.c (revision 405524) @@ -23140,7 +23140,11 @@ { /* Output ".word .LTHUNKn-7-.LTHUNKPCn". */ rtx tem = XEXP (DECL_RTL (function), 0); - tem = gen_rtx_PLUS (GET_MODE (tem), tem, GEN_INT (-7)); + /* For TARGET_THUMB1_ONLY the thunk is in Thumb mode, so the PC + pipeline offset is four rather than eight. Adjust the offset + accordingly. */ + tem = gen_rtx_PLUS (GET_MODE (tem), tem, + GEN_INT (TARGET_THUMB1_ONLY ? -3 : -7)); tem = gen_rtx_MINUS (GET_MODE (tem), tem, gen_rtx_SYMBOL_REF (Pmode,