diff options
author | Tamar Christina <tamar.christina@arm.com> | 2020-01-02 14:06:01 +0000 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2020-01-02 14:08:27 +0000 |
commit | 0db131fb835e4c4f6a024e86743467e7e01c965e (patch) | |
tree | 46301a70ff4b14310b46dd329b1d8679be65fae1 | |
parent | a65b5de624a20f37f0fed484d6208d014f10a6f8 (diff) | |
download | gdb-0db131fb835e4c4f6a024e86743467e7e01c965e.zip gdb-0db131fb835e4c4f6a024e86743467e7e01c965e.tar.gz gdb-0db131fb835e4c4f6a024e86743467e7e01c965e.tar.bz2 |
AArch64: Set the correct ELF class for AArch64 stubs (PR/25210)
This fixes PR 25210 by specifying the the correct ELF class for AArch64 stubs.
After doing this the stub section starts behaving like a normal object file
loaded from disk. That is SEC_LINKER_CREATED causes us to have to write the
section manually.
This flag was added as a fix for PR 24753. I believe that
fix to still be correct as linker created sections don't have a size on disk
and it fixes the Arm bootstrap regression. But in this case specifying the
correct section class also makes the stub section not be considered by
compress.c.
So I'm partially revert this change so that we don't have to manage the section
manually as implied by SEC_LINKER_CREATED.
bfd/ChangeLog:
PR 25210
PR 24753
* elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Set ELF class.
ld/ChangeLog:
PR 25210
PR 24753
* emultempl/aarch64elf.em (elf${ELFSIZE}_aarch64_add_stub_section):
Remove SEC_LINKER_CREATED.
* testsuite/ld-aarch64/aarch64-elf.exp: Add erratum835769-843419.
* testsuite/ld-aarch64/erratum835769-843419.d: New test.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 4 | ||||
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/emultempl/aarch64elf.em | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/erratum835769-843419.d | 54 |
6 files changed, 75 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c78b42b..144c778 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2020-01-02 Tamar Christina <tamar.christina@arm.com> + + PR 25210 + PR 24753 + * elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Set ELF class. + 2020-01-01 Alan Modra <amodra@gmail.com> Update year range in copyright notice of all files. diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 5fabcd8..756ffeb 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -3177,6 +3177,10 @@ _bfd_aarch64_create_stub_section (asection *section, if (s_name == NULL) return NULL; + /* PR 25210. Set the right class on the stub_bfd. */ + elf_elfheader (htab->stub_bfd)->e_ident[EI_CLASS] = ELFCLASSNN; + BFD_ASSERT (ELFCLASSNN == get_elf_backend_data (htab->stub_bfd)->s->elfclass); + memcpy (s_name, section->name, namelen); memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX)); return (*htab->add_stub_section) (s_name, section); diff --git a/ld/ChangeLog b/ld/ChangeLog index c78b42b..356a48a 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2020-01-02 Tamar Christina <tamar.christina@arm.com> + + PR 25210 + PR 24753 + * emultempl/aarch64elf.em (elf${ELFSIZE}_aarch64_add_stub_section): + Remove SEC_LINKER_CREATED. + * testsuite/ld-aarch64/aarch64-elf.exp: Add erratum835769-843419. + * testsuite/ld-aarch64/erratum835769-843419.d: New test. + 2020-01-01 Alan Modra <amodra@gmail.com> Update year range in copyright notice of all files. diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em index 7137502..d0519b3 100644 --- a/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em @@ -170,7 +170,7 @@ elf${ELFSIZE}_aarch64_add_stub_section (const char *stub_sec_name, lang_output_section_statement_type *os; struct hook_stub_info info; - flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_LINKER_CREATED + flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP); stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd, stub_sec_name, flags); diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 1afedd0..fefc751 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -96,6 +96,7 @@ run_dump_test "erratum843419-far-adr" run_dump_test "erratum843419-far-full" run_dump_test "erratum843419-full" run_dump_test "erratum843419-no-args" +run_dump_test "erratum835769-843419" # Relocation Tests run_dump_test_lp64 "weak-undefined" diff --git a/ld/testsuite/ld-aarch64/erratum835769-843419.d b/ld/testsuite/ld-aarch64/erratum835769-843419.d new file mode 100644 index 0000000..728765f --- /dev/null +++ b/ld/testsuite/ld-aarch64/erratum835769-843419.d @@ -0,0 +1,54 @@ +#source: erratum835769.s +#as: +#ld: --fix-cortex-a53-835769 --fix-cortex-a53-843419=full -e0x400000 +#objdump: -dr +#... +Disassembly of section .text: +#... +[0-9a-f]+ <a1ldr>: +[ \t0-9a-f]+:[ \t]+b8408c87[ \t]+ldr[ \t]+w7, \[x4, #8\]\! +[ \t0-9a-f]+:[ \t]+1b017c06[ \t]+mul[ \t]+w6, w0, w1 +[ \t0-9a-f]+:[ \t]+f9400084[ \t]+ldr[ \t]+x4, \[x4\] +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <__erratum_835769_veneer_0> +[ \t0-9a-f]+:[ \t]+aa0503e0[ \t]+mov[ \t]+x0, x5 +[ \t0-9a-f]+:[ \t]+d65f03c0[ \t]+ret + +[0-9a-f]+ <a5ldr>: +[ \t0-9a-f]+:[ \t]+b8408c87[ \t]+ldr[ \t]+w7, \[x4, #8\]! +[ \t0-9a-f]+:[ \t]+1b017c06[ \t]+mul[ \t]+w6, w0, w1 +[ \t0-9a-f]+:[ \t]+f9400084[ \t]+ldr[ \t]+x4, \[x4\] +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <__erratum_835769_veneer_1> +[ \t0-9a-f]+:[ \t]+aa0503e0[ \t]+mov[ \t]+x0, x5 +[ \t0-9a-f]+:[ \t]+d65f03c0[ \t]+ret + +[0-9a-f]+ <a6ldr>: +[ \t0-9a-f]+:[ \t]+b8408c87[ \t]+ldr[ \t]+w7, \[x4, #8\]! +[ \t0-9a-f]+:[ \t]+1b017c06[ \t]+mul[ \t]+w6, w0, w1 +[ \t0-9a-f]+:[ \t]+f9400084[ \t]+ldr[ \t]+x4, \[x4\] +[ \t0-9a-f]+:[ \t]+9b031885[ \t]+madd[ \t]+x5, x4, x3, x6 +[ \t0-9a-f]+:[ \t]+aa0503e0[ \t]+mov[ \t]+x0, x5 +[ \t0-9a-f]+:[ \t]+d65f03c0[ \t]+ret + +[0-9a-f]+ <a7str>: +[ \t0-9a-f]+:[ \t]+b8408c87[ \t]+ldr[ \t]+w7, \[x4, #8\]! +[ \t0-9a-f]+:[ \t]+1b017c06[ \t]+mul[ \t]+w6, w0, w1 +[ \t0-9a-f]+:[ \t]+f9000084[ \t]+str[ \t]+x4, \[x4\] +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <__erratum_835769_veneer_2> +[ \t0-9a-f]+:[ \t]+aa0503e0[ \t]+mov[ \t]+x0, x5 +[ \t0-9a-f]+:[ \t]+d65f03c0[ \t]+ret + +[ \t0-9a-f]+:[ \t]+d503201f[ \t]+nop +[ \t0-9a-f]+:[ \t]+14000400[ \t]+b[ \t]+[0-9a-f]+ <__erratum_835769_veneer_0\+0xfe8> +[ \t0-9a-f]+:[ \t]+d503201f[ \t]+nop +[0-9a-f]+ <__erratum_835769_veneer_2>: +[ \t0-9a-f]+:[ \t]+9b031885[ \t]+madd[ \t]+x5, x4, x3, x6 +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <a7str\+0x[0-9a-f]+> + +[0-9a-f]+ <__erratum_835769_veneer_1>: +[ \t0-9a-f]+:[ \t]+9ba31845[ \t]+umaddl[ \t]+x5, w2, w3, x6 +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <a5ldr\+0x[0-9a-f]+> + +[0-9a-f]+ <__erratum_835769_veneer_0>: +[ \t0-9a-f]+:[ \t]+9b031845[ \t]+madd[ \t]+x5, x2, x3, x6 +[ \t0-9a-f]+:[ \t0-9a-z]+[ \t]+b[ \t]+[0-9a-f]+ <a1ldr\+0x[0-9a-f]+> +#pass |