From: Paul Brook Date: Thu, 11 May 2006 15:05:17 +0000 (+0000) Subject: 2006-05-11 Paul Brook X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e28387c3bf6b1358d3a438443fc790c8e0fefa22;p=binutils-gdb.git 2006-05-11 Paul Brook 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. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 54ac4a32a1f..35a8dbedab3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2006-05-11 Paul Brook + + * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols. + 2006-05-11 Thiemo Seufer * 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 690f59f7bdf..50940dc47e0 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 9ef3da99850..e9745b114eb 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-11 Paul Brook + + * gas/arm/local_function.d: New test. + * gas/arm/local_function.s: New test. + 2006-05-11 Thiemo Seufer * 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 00000000000..46da8eceb6c --- /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 00000000000..1d98a37425c --- /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