2006-12-01 Paul Brook <paul@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Fri, 1 Dec 2006 16:42:26 +0000 (16:42 +0000)
committerPaul Brook <paul@codesourcery.com>
Fri, 1 Dec 2006 16:42:26 +0000 (16:42 +0000)
gas/
* config/tc-arm.c (arm_force_relocation): Return 1 for relocs against
function symbols.

gas/testsuite/
* gas/arm/thumbrel.s: New test.
* gas/arm/thumbrel.d: New test.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/thumbrel.d [new file with mode: 0644]
gas/testsuite/gas/arm/thumbrel.s [new file with mode: 0644]

index d8066c4f12376d91b22b1ad882679e7a71bf8472..63750dba9cafa188491b3b24a2301fe4dc4dcfcd 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-01  Paul Brook  <paul@codesourcery.com>
+
+       * config/tc-arm.c (arm_force_relocation): Return 1 for relocs against
+       function symbols.
+
 2006-11-29  Paul Brook  <paul@codesourcery.com>
 
        * config/tc-arm.c (arm_is_eabi): New function.
index 8ea3ad198b7be1d4455bfdd44e85d12dd97c9331..a7859dc373ae6b1bd7181491e0947e063f10dd0a 100644 (file)
@@ -18962,6 +18962,12 @@ arm_force_relocation (struct fix * fixp)
       || fixp->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0)
     return 1;
 
+  /* Always generate relocations against function symbols.  */
+  if (fixp->fx_r_type == BFD_RELOC_32
+      && fixp->fx_addsy
+      && (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_FUNCTION))
+    return 1;
+
   return generic_force_reloc (fixp);
 }
 
index 580dcd90ea7b0addca76a0377ceaf2f3d4fbd575..3abddcd92047db94ddc9954283c3cfeac87b68ea 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-01  Paul Brook  <paul@codesourcery.com>
+
+       * gas/arm/thumbrel.s: New test.
+       * gas/arm/thumbrel.d: New test.
+
 2006-11-30  Jan Beulich  <jbeulich@novell.com>
 
        * gas/i386/intel.d: Adjust.
diff --git a/gas/testsuite/gas/arm/thumbrel.d b/gas/testsuite/gas/arm/thumbrel.d
new file mode 100644 (file)
index 0000000..495360f
--- /dev/null
@@ -0,0 +1,14 @@
+#objdump: -sr
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+.*:     file format.*
+
+RELOCATION RECORDS FOR \[.text\]:
+OFFSET   TYPE              VALUE 
+00000004 R_ARM_REL32       b
+
+Contents of section .text:
+ 0000 00000000 (00000004|04000000) 00000000 00000000  .*
+# Ignore .ARM.attributes section
+#...
diff --git a/gas/testsuite/gas/arm/thumbrel.s b/gas/testsuite/gas/arm/thumbrel.s
new file mode 100644 (file)
index 0000000..769da16
--- /dev/null
@@ -0,0 +1,11 @@
+@ Check that PC-relative relocs against local function symbols are
+@ generated correctly.
+.text
+.thumb
+a:
+.word 0
+.word b - a
+.word 0
+.word 0
+.type b, %function
+b: