aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-05-11 15:05:17 +0000
committerPaul Brook <paul@codesourcery.com>2006-05-11 15:05:17 +0000
commite28387c3bf6b1358d3a438443fc790c8e0fefa22 (patch)
treee1f439f9bacefe5b007e5a1b1cc1a599f345fab1
parent89ee2ebe8b9182015a1bf8643bb87c312c92474c (diff)
downloadgdb-e28387c3bf6b1358d3a438443fc790c8e0fefa22.zip
gdb-e28387c3bf6b1358d3a438443fc790c8e0fefa22.tar.gz
gdb-e28387c3bf6b1358d3a438443fc790c8e0fefa22.tar.bz2
2006-05-11 Paul Brook <paul@codesourcery.com>
gas/ * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols. gas/testsuite/ * gas/arm/local_function.d: New test. * gas/arm/local_function.s: New test.
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-arm.c10
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/arm/local_function.d10
-rw-r--r--gas/testsuite/gas/arm/local_function.s10
5 files changed, 36 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 54ac4a3..35a8dbe 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols.
+
2006-05-11 Thiemo Seufer <ths@mips.com>
* config/tc-mips.c (append_insn): Don't check the range of j or
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 690f59f..50940dc 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -17053,9 +17053,9 @@ arm_fix_adjustable (fixS * fixP)
#endif
#ifdef OBJ_ELF
-/* Relocations against Thumb function names must be left unadjusted,
- so that the linker can use this information to correctly set the
- bottom bit of their addresses. The MIPS version of this function
+/* Relocations against function names must be left unadjusted,
+ so that the linker can use this information to generate interworking
+ stubs. The MIPS version of this function
also prevents relocations that are mips-16 specific, but I do not
know why it does this.
@@ -17072,6 +17072,10 @@ arm_fix_adjustable (fixS * fixP)
if (fixP->fx_addsy == NULL)
return 1;
+ /* Preserve relocations against symbols with function type. */
+ if (symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_FUNCTION)
+ return 0;
+
if (THUMB_IS_FUNC (fixP->fx_addsy)
&& fixP->fx_subsy == NULL)
return 0;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 9ef3da9..e9745b1 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/local_function.d: New test.
+ * gas/arm/local_function.s: New test.
+
2006-05-11 Thiemo Seufer <ths@mips.com>
* gas/mips/jal-range.l: Don't check the range of j or jal
diff --git a/gas/testsuite/gas/arm/local_function.d b/gas/testsuite/gas/arm/local_function.d
new file mode 100644
index 0000000..46da8ec
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_function.d
@@ -0,0 +1,10 @@
+#objdump: -r
+#name: Relocations agains local function symbols
+# 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
+00000000 R_ARM_(CALL|PC24) bar
diff --git a/gas/testsuite/gas/arm/local_function.s b/gas/testsuite/gas/arm/local_function.s
new file mode 100644
index 0000000..1d98a37
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_function.s
@@ -0,0 +1,10 @@
+ .text
+ .type foo, %function
+foo:
+ bl bar
+
+ .section .text.bar
+ nop
+ .type bar, %function
+bar:
+ nop