diff options
Diffstat (limited to 'recipes/binutils/binutils-2.19.51/thumb-func.patch')
-rw-r--r-- | recipes/binutils/binutils-2.19.51/thumb-func.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/recipes/binutils/binutils-2.19.51/thumb-func.patch b/recipes/binutils/binutils-2.19.51/thumb-func.patch new file mode 100644 index 0000000000..9c18eff3ba --- /dev/null +++ b/recipes/binutils/binutils-2.19.51/thumb-func.patch @@ -0,0 +1,55 @@ +Index: elf32-arm.c +=================================================================== +RCS file: /cvs/src/src/bfd/elf32-arm.c,v +retrieving revision 1.211 +retrieving revision 1.212 +diff -u -r1.211 -r1.212 +--- src/bfd/elf32-arm.c 29 Aug 2009 22:10:58 -0000 1.211 ++++ src/bfd/elf32-arm.c 9 Sep 2009 18:36:10 -0000 1.212 +@@ -7036,6 +7036,9 @@ + + splt->output_offset + + h->plt.offset); + *unresolved_reloc_p = FALSE; ++ /* The PLT entry is in ARM mode, regardless of the ++ target function. */ ++ sym_flags = STT_FUNC; + } + + from = (input_section->output_section->vma +@@ -7452,10 +7455,14 @@ + /* If the Thumb BLX instruction is available, convert the + BL to a BLX instruction to call the ARM-mode PLT entry. */ + lower_insn = (lower_insn & ~0x1000) | 0x0800; ++ sym_flags = STT_FUNC; + } + else +- /* Target the Thumb stub before the ARM PLT entry. */ +- value -= PLT_THUMB_STUB_SIZE; ++ { ++ /* Target the Thumb stub before the ARM PLT entry. */ ++ value -= PLT_THUMB_STUB_SIZE; ++ sym_flags = STT_ARM_TFUNC; ++ } + *unresolved_reloc_p = FALSE; + } + +@@ -11449,13 +11456,13 @@ + { + h->root.u.def.section = s; + h->root.u.def.value = h->plt.offset; +- } + +- /* Make sure the function is not marked as Thumb, in case +- it is the target of an ABS32 relocation, which will +- point to the PLT entry. */ +- if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC) +- h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC); ++ /* Make sure the function is not marked as Thumb, in case ++ it is the target of an ABS32 relocation, which will ++ point to the PLT entry. */ ++ if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC) ++ h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC); ++ } + + /* Make room for this entry. */ + s->size += htab->plt_entry_size; |