gas:
authorZack Weinberg <zackw@panix.com>
Mon, 13 Jun 2005 15:34:39 +0000 (15:34 +0000)
committerZack Weinberg <zackw@panix.com>
Mon, 13 Jun 2005 15:34:39 +0000 (15:34 +0000)
* config/tc-arm.c (find_real_start): Check S_IS_LOCAL on
symbolP as well as for names with a leading dot.  Use ACONCAT.
(md_apply_fix): For branch relocations, only replace value
with fixP->fx_offset (under #ifdef OBJ_ELF) when !fixP->fx_done.
(arm_force_relocation): Remove #ifdef OBJ_ELF case.
* config/tc-arm.h (LOCAL_LABEL): Remove unnecessary parentheses.
(LOCAL_LABEL_PREFIX): Don't define.
gas/testsuite:
* gas/arm/thumb.s: Only branch to labels defined in this file.
* gas/arm/thumb.d, gas/arm/thumb32.d: Adjust expected output.

gas/ChangeLog
gas/config/tc-arm.c
gas/config/tc-arm.h
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/thumb.d
gas/testsuite/gas/arm/thumb.s
gas/testsuite/gas/arm/thumb32.d

index 992552609374bf9e7e69cf3212b3ec20b46826b9..6ca97910d0fbcc691a6854d3bbf218b5dc5c28e2 100644 (file)
@@ -1,3 +1,13 @@
+2005-06-13  Zack Weinberg  <zack@codesourcery.com>
+
+       * config/tc-arm.c (find_real_start): Check S_IS_LOCAL on
+       symbolP as well as for names with a leading dot.  Use ACONCAT.
+       (md_apply_fix): For branch relocations, only replace value
+       with fixP->fx_offset (under #ifdef OBJ_ELF) when !fixP->fx_done.
+       (arm_force_relocation): Remove #ifdef OBJ_ELF case.
+       * config/tc-arm.h (LOCAL_LABEL): Remove unnecessary parentheses.
+       (LOCAL_LABEL_PREFIX): Don't define.
+
 2005-06-10  Alan Modra  <amodra@bigpond.net.au>
 
        * config/tc-hppa.c (pa_block): Allocate just one byte for the
index a3cc4329e7222fb3c633fe84dd30d6d7962a591d..2288d991ee44c34f826c1c211d0f0e7b7004385e 100644 (file)
@@ -1414,15 +1414,15 @@ find_real_start (symbolS * symbolP)
   if (name == NULL)
     abort ();
 
-  /* Names that start with '.' are local labels, not function entry points.
-     The compiler may generate BL instructions to these labels because it
-     needs to perform a branch to a far away location. */
-  if (name[0] == '.')
+  /* The compiler may generate BL instructions to local labels because
+     it needs to perform a branch to a far away location. These labels
+     do not have a corresponding ".real_start_of" label.  We check
+     both for S_IS_LOCAL and for a leading dot, to give a way to bypass
+     the ".real_start_of" convention for nonlocal branches.  */
+  if (S_IS_LOCAL (symbolP) || name[0] == '.')
     return symbolP;
 
-  real_start = malloc (strlen (name) + strlen (STUB_NAME) + 1);
-  sprintf (real_start, "%s%s", STUB_NAME, name);
-
+  real_start = ACONCAT ((STUB_NAME, name, NULL));
   new_target = symbol_find (real_start);
 
   if (new_target == NULL)
@@ -1431,8 +1431,6 @@ find_real_start (symbolS * symbolP)
       new_target = symbolP;
     }
 
-  free (real_start);
-
   return new_target;
 }
 
@@ -10513,7 +10511,8 @@ md_apply_fix (fixS *    fixP,
 #define SEXT24(x)      ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000)
 
 #ifdef OBJ_ELF
-      value = fixP->fx_offset;
+      if (!fixP->fx_done)
+       value = fixP->fx_offset;
 #endif
 
       /* We are going to store value (shifted right by two) in the
@@ -10583,7 +10582,8 @@ md_apply_fix (fixS *    fixP,
        newval = md_chars_to_number (buf, INSN_SIZE);
 
 #ifdef OBJ_ELF
-       value = fixP->fx_offset;
+       if (!fixP->fx_done)
+         value = fixP->fx_offset;
 #endif
        hbit   = (value >> 1) & 1;
        value  = (value >> 2) & 0x00ffffff;
@@ -10742,7 +10742,8 @@ md_apply_fix (fixS *    fixP,
        if (diff & 0x400000)
          diff |= ~0x3fffff;
 #ifdef OBJ_ELF
-       value = fixP->fx_offset;
+       if (!fixP->fx_done)
+         value = fixP->fx_offset;
 #endif
        value += diff;
 
@@ -11353,13 +11354,6 @@ arm_force_relocation (struct fix * fixp)
   if (fixp->fx_r_type == BFD_RELOC_RVA)
     return 1;
 #endif
-#ifdef OBJ_ELF
-  if (fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
-      || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
-      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
-      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
-    return 1;
-#endif
 
   /* Resolve these relocations even if the symbol is extern or weak.  */
   if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
index 09a49ad426a0b47bd637680ef4f7d999494c2cf3..c17d176f6dcba3309b811e6d4ff8633d8052d945 100644 (file)
@@ -127,8 +127,8 @@ struct fix;
 
 #define OPTIONAL_REGISTER_PREFIX '%'
 
-#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L'))
-#define LOCAL_LABELS_FB   1
+#define LOCAL_LABEL(name)  (name[0] == '.' && name[1] == 'L')
+#define LOCAL_LABELS_FB    1
 
 /* This expression evaluates to true if the relocation is for a local
    object for which we still want to do the relocation at runtime.
@@ -168,7 +168,6 @@ struct fix;
 # define md_elf_section_change_hook()  arm_elf_change_section ()
 # define md_elf_section_type(str, len) arm_elf_section_type (str, len)
 # define GLOBAL_OFFSET_TABLE_NAME      "_GLOBAL_OFFSET_TABLE_"
-# define LOCAL_LABEL_PREFIX            '.'
 # define TC_SEGMENT_INFO_TYPE          struct arm_segment_info_type
 
 enum mstate
index 84261dc3d2f3e664c85fecda6c46cff1cb127c0e..35f59b9f85c081811543c8507d816d7c0f50b108 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-13  Zack Weinberg  <zack@codesourcery.com>
+
+       * gas/arm/thumb.s: Only branch to labels defined in this file.
+       * gas/arm/thumb.d, gas/arm/thumb32.d: Adjust expected output.
+
 2005-06-01  Maciej W. Rozycki  <macro@linux-mips.org>
 
        * gas/mips/ldstla-32-1.l: Update to handle leading zeroes.
index 35614419bbdae77aaef791df62be428f9a616659..5c33adfb5b3f2487dcedbcfc36d629a729ef5fbd 100644 (file)
@@ -119,68 +119,41 @@ Disassembly of section \.text:
 0+0de <[^>]+> 2f68             cmp     r7, #104
 0+0e0 <[^>]+> 46c0             nop                     \(mov r8, r8\)
 0+0e2 <[^>]+> 46c0             nop                     \(mov r8, r8\)
-0+0e4 <[^>]+> ea000037         b       0+0e4 <[^>]+>
-                       e4: R_ARM_PC24  \.text
-0+0e8 <[^>]+> eafffffe         b       0+000 <[^>]+>
-                       e8: R_ARM_PC24  \.wombat
-0+0ec <[^>]+> eb000037         bl      0+0e4 <[^>]+>
-                       ec: R_ARM_PC24  \.text
-0+0f0 <[^>]+> ebfffffe         bl      0+000 <[^>]+>
-                       f0: R_ARM_PC24  \.wombat
+0+0e4 <[^>]+> eafffffe         b       0+0e4 <[^>]+>
+0+0e8 <[^>]+> ea000011         b       0+134 <[^>]+>
+0+0ec <[^>]+> ebfffffc         bl      0+0e4 <[^>]+>
+0+0f0 <[^>]+> eb00000f         bl      0+134 <[^>]+>
 0+0f4 <[^>]+> e12fff10         bx      r0
 0+0f8 <[^>]+> ef123456         swi     0x00123456
 0+0fc <[^>]+> a004             add     r0, pc, #16     \(adr r0,0+110 <[^>]+>\)
 0+0fe <[^>]+> e77f             b.n     0+000 <[^>]+>
-0+100 <[^>]+> e7fe             b.n     0+000 <[^>]+>
-                       100: R_ARM_THM_JUMP11   \.wombat
-0+102 <[^>]+> f7ff fffe        bl      0+000 <[^>]+>
-                       102: R_ARM_THM_CALL     \.text
-0+106 <[^>]+> f7ff fffe        bl      0+000 <[^>]+>
-                       106: R_ARM_THM_CALL     \.wombat
+0+100 <[^>]+> e018             b.n     0+134 <[^>]+>
+0+102 <[^>]+> f7ff ff7d        bl      0+000 <[^>]+>
+0+106 <[^>]+> f000 f815        bl      0+134 <[^>]+>
 0+10a <[^>]+> 4700             bx      r0
 0+10c <[^>]+> dfff             swi     255
        \.\.\.
-0+110 <[^>]+> d0fe             beq.n   0+000 <[^>]+>
-                       110: R_ARM_THM_JUMP8    \.wombat
-0+112 <[^>]+> d1fe             bne.n   0+000 <[^>]+>
-                       112: R_ARM_THM_JUMP8    \.wombat
-0+114 <[^>]+> d2fe             bcs.n   0+000 <[^>]+>
-                       114: R_ARM_THM_JUMP8    \.wombat
-0+116 <[^>]+> d3fe             bcc.n   0+000 <[^>]+>
-                       116: R_ARM_THM_JUMP8    \.wombat
-0+118 <[^>]+> d4fe             bmi.n   0+000 <[^>]+>
-                       118: R_ARM_THM_JUMP8    \.wombat
-0+11a <[^>]+> d5fe             bpl.n   0+000 <[^>]+>
-                       11a: R_ARM_THM_JUMP8    \.wombat
-0+11c <[^>]+> d6fe             bvs.n   0+000 <[^>]+>
-                       11c: R_ARM_THM_JUMP8    \.wombat
-0+11e <[^>]+> d7fe             bvc.n   0+000 <[^>]+>
-                       11e: R_ARM_THM_JUMP8    \.wombat
-0+120 <[^>]+> d8fe             bhi.n   0+000 <[^>]+>
-                       120: R_ARM_THM_JUMP8    \.wombat
-0+122 <[^>]+> d9fe             bls.n   0+000 <[^>]+>
-                       122: R_ARM_THM_JUMP8    \.wombat
-0+124 <[^>]+> dafe             bge.n   0+000 <[^>]+>
-                       124: R_ARM_THM_JUMP8    \.wombat
-0+126 <[^>]+> dcfe             bgt.n   0+000 <[^>]+>
-                       126: R_ARM_THM_JUMP8    \.wombat
-0+128 <[^>]+> dbfe             blt.n   0+000 <[^>]+>
-                       128: R_ARM_THM_JUMP8    \.wombat
-0+12a <[^>]+> dcfe             bgt.n   0+000 <[^>]+>
-                       12a: R_ARM_THM_JUMP8    \.wombat
-0+12c <[^>]+> ddfe             ble.n   0+000 <[^>]+>
-                       12c: R_ARM_THM_JUMP8    \.wombat
-0+12e <[^>]+> d8fe             bhi.n   0+000 <[^>]+>
-                       12e: R_ARM_THM_JUMP8    \.wombat
-0+130 <[^>]+> d3fe             bcc.n   0+000 <[^>]+>
-                       130: R_ARM_THM_JUMP8    \.wombat
-0+132 <[^>]+> d3fe             bcc.n   0+000 <[^>]+>
-                       132: R_ARM_THM_JUMP8    \.wombat
-0+134 <[^>]+> f000 fc9a        bl      0+938 <[^>]+>
-                       134: R_ARM_THM_CALL     \.text
+0+110 <[^>]+> d010             beq.n   0+134 <[^>]+>
+0+112 <[^>]+> d10f             bne.n   0+134 <[^>]+>
+0+114 <[^>]+> d20e             bcs.n   0+134 <[^>]+>
+0+116 <[^>]+> d30d             bcc.n   0+134 <[^>]+>
+0+118 <[^>]+> d40c             bmi.n   0+134 <[^>]+>
+0+11a <[^>]+> d50b             bpl.n   0+134 <[^>]+>
+0+11c <[^>]+> d60a             bvs.n   0+134 <[^>]+>
+0+11e <[^>]+> d709             bvc.n   0+134 <[^>]+>
+0+120 <[^>]+> d808             bhi.n   0+134 <[^>]+>
+0+122 <[^>]+> d907             bls.n   0+134 <[^>]+>
+0+124 <[^>]+> da06             bge.n   0+134 <[^>]+>
+0+126 <[^>]+> dc05             bgt.n   0+134 <[^>]+>
+0+128 <[^>]+> db04             blt.n   0+134 <[^>]+>
+0+12a <[^>]+> dc03             bgt.n   0+134 <[^>]+>
+0+12c <[^>]+> dd02             ble.n   0+134 <[^>]+>
+0+12e <[^>]+> d801             bhi.n   0+134 <[^>]+>
+0+130 <[^>]+> d300             bcc.n   0+134 <[^>]+>
+0+132 <[^>]+> d3ff             bcc.n   0+134 <[^>]+>
+0+134 <[^>]+> f000 fc00        bl      0+938 <[^>]+>
        \.\.\.
-0+938 <[^>]+> f000 f898        bl      0+134 <[^>]+>
-                       938: R_ARM_THM_CALL     \.text
+0+938 <[^>]+> f7ff fbfc        bl      0+134 <[^>]+>
 0+93c <[^>]+> 4801             ldr     r0, \[pc, #4\]  \(0+944 <[^>]+>\)
 0+93e <[^>]+> 4801             ldr     r0, \[pc, #4\]  \(0+944 <[^>]+>\)
 0+940 <[^>]+> 4801             ldr     r0, \[pc, #4\]  \(0+948 <[^>]+>\)
index 82c1ccd55dfb694e3f7fea149add34d3fabf97ec..d1e43394efa2eec41176dcd167183e7426feb33c 100644 (file)
@@ -145,9 +145,9 @@ near:
        .arm
 .localbar:
        b       .localbar
-       b       .wombat
+       b       .back
        bl      .localbar
-       bl      .wombat
+       bl      .back
 
        bx      r0
        swi     0x123456
@@ -159,33 +159,33 @@ morethumb:
        adr     r0, forwardonly
 
        b       .foo
-       b       .wombat
+       b       .back
        bl      .foo
-       bl      .wombat
+       bl      .back
 
        bx      r0
 
        swi     0xff
        .align  0
 forwardonly:
-       beq     .wombat
-       bne     .wombat
-       bcs     .wombat
-       bcc     .wombat
-       bmi     .wombat
-       bpl     .wombat
-       bvs     .wombat
-       bvc     .wombat
-       bhi     .wombat
-       bls     .wombat
-       bge     .wombat
-       bgt     .wombat
-       blt     .wombat
-       bgt     .wombat
-       ble     .wombat
-       bhi     .wombat
-       blo     .wombat
-       bul     .wombat
+       beq     .back
+       bne     .back
+       bcs     .back
+       bcc     .back
+       bmi     .back
+       bpl     .back
+       bvs     .back
+       bvc     .back
+       bhi     .back
+       bls     .back
+       bge     .back
+       bgt     .back
+       blt     .back
+       bgt     .back
+       ble     .back
+       bhi     .back
+       blo     .back
+       bul     .back
 
 .back:
        bl      .local
index 3d0fc6dcc3b22c75569a1e03725e61c3016a5f55..6bd07ace84b4d57fb66c76dab207700fd4739bd0 100644 (file)
@@ -295,14 +295,10 @@ Disassembly of section .text:
 0+3cc <[^>]+> f340 800c        ble\.w  0+3e8 <[^>]+>
 0+3d0 <[^>]+> f7ff bfae        b\.w    0+330 <[^>]+>
 0+3d4 <[^>]+> f000 b808        b\.w    0+3e8 <[^>]+>
-0+3d8 <[^>]+> f000 f996        bl      0+330 <[^>]+>
-                       3d8: R_ARM_THM_CALL     \.text
-0+3dc <[^>]+> f000 f9f2        bl      0+3e8 <[^>]+>
-                       3dc: R_ARM_THM_CALL     \.text
-0+3e0 <[^>]+> f000 e996        blx     0+330 <[^>]+>
-                       3e0: R_ARM_THM_XPC22    \.text
-0+3e4 <[^>]+> f000 e9f2        blx     0+3e8 <[^>]+>
-                       3e4: R_ARM_THM_XPC22    \.text
+0+3d8 <[^>]+> f7ff ffaa        bl      0+330 <[^>]+>
+0+3dc <[^>]+> f000 f804        bl      0+3e8 <[^>]+>
+0+3e0 <[^>]+> f7ff efa6        blx     0+330 <[^>]+>
+0+3e4 <[^>]+> f000 e800        blx     0+3e8 <[^>]+>
 0+3e8 <[^>]+> 4748             bx      r9
 0+3ea <[^>]+> 4780             blx     r0
 0+3ec <[^>]+> 47c8             blx     r9