On 06/06/13 16:43, Cesar Philippidis wrote:
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.


ARM-fix-mi-thunks-TARGET_THUMB1_ONLY.patch


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,


The pipeline offset is 4 for Thumb2 as well. So at the very least you need to explain why your change doesn't apply then as well.

R.

Reply via email to