diff options
| author | Sergey Lapin <slapin@ossfans.org> | 2009-10-13 17:30:38 +0400 |
|---|---|---|
| committer | Sergey Lapin <slapin@ossfans.org> | 2009-10-13 17:30:38 +0400 |
| commit | c9d89f888ec69245c56358b454f37cffd8bb87ac (patch) | |
| tree | 10d3aefa0fc1c74baeccbc456ce16e0d42816f17 /recipes/binutils/binutils-2.19.51/thumb-func.patch | |
| parent | 43653cf44fc541bd55cb094392444a7faa7bb3be (diff) | |
| parent | 925dea6086bd5f7479eda0226f32bcd46ba025a1 (diff) | |
Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into org.openembedded.dev
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; |
