[PATCH] ARMv6-M MI thunk fix
Cesar Philippidis
cesar@codesourcery.com
Thu Jun 6 15:43:00 GMT 2013
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 <julian@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com>
gcc/
* config/arm/arm.c (arm_output_mi_thunk): Fix offset for
TARGET_THUMB1_ONLY.
-------------- next part --------------
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,
More information about the Gcc-patches
mailing list