diff options
author | Paul Brook <paul@codesourcery.com> | 2006-05-11 15:05:17 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2006-05-11 15:05:17 +0000 |
commit | e28387c3bf6b1358d3a438443fc790c8e0fefa22 (patch) | |
tree | e1f439f9bacefe5b007e5a1b1cc1a599f345fab1 | |
parent | 89ee2ebe8b9182015a1bf8643bb87c312c92474c (diff) | |
download | gdb-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/ChangeLog | 4 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 10 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/local_function.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/local_function.s | 10 |
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 |