diff options
92 files changed, 1320 insertions, 122 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a2e5f1e..0b52c17 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,20 @@ 2016-02-26 H.J. Lu <hongjiu.lu@intel.com> + PR ld/19609 + * elf32-i386.c (elf_i386_convert_load): Convert to R_386_32 for + load with locally bound symbols if PIC is false or there is no + base register. Optimize branch to 0 if PIC is false. + (elf_i386_relocate_section): Don't generate dynamic relocations + against undefined weak symbols if PIC is false. + * elf64-x86-64.c (elf_x86_64_convert_load): Disable optimization + if we can't estimate relocation overflow with --no-relax. + Convert to R_X86_64_32S/R_X86_64_32 for load with locally bound + symbols if PIC is false. Optimize branch to 0 if PIC is false. + (elf_x86_64_relocate_section): Don't generate dynamic relocations + against undefined weak symbols if PIC is false. + +2016-02-26 H.J. Lu <hongjiu.lu@intel.com> + PR ld/19645 * bfd.c (bfd): Change flags to 20 bits. (BFD_CONVERT_ELF_COMMON): New. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 2ae5e44..ab3945d 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2863,6 +2863,7 @@ elf_i386_convert_load (bfd *abfd, asection *sec, struct elf_i386_link_hash_table *htab; bfd_boolean changed_contents; bfd_boolean changed_relocs; + bfd_boolean is_pic; bfd_signed_vma *local_got_refcounts; /* Don't even try to convert non-ELF outputs. */ @@ -2889,6 +2890,8 @@ elf_i386_convert_load (bfd *abfd, asection *sec, changed_relocs = FALSE; local_got_refcounts = elf_local_got_refcounts (abfd); + is_pic = bfd_link_pic (link_info); + /* Get the section contents. */ if (elf_section_data (sec)->this_hdr.contents != NULL) contents = elf_section_data (sec)->this_hdr.contents; @@ -2913,6 +2916,7 @@ elf_i386_convert_load (bfd *abfd, asection *sec, unsigned int addend; unsigned int nop; bfd_vma nop_offset; + bfd_boolean to_reloc_32; if (r_type != R_386_GOT32 && r_type != R_386_GOT32X) continue; @@ -2929,9 +2933,7 @@ elf_i386_convert_load (bfd *abfd, asection *sec, modrm = bfd_get_8 (abfd, contents + roff - 1); baseless = (modrm & 0xc7) == 0x5; - if (r_type == R_386_GOT32X - && baseless - && bfd_link_pic (link_info)) + if (r_type == R_386_GOT32X && baseless && is_pic) { /* For PIC, disallow R_386_GOT32X without a base register since we don't know what the GOT base is. Allow @@ -2960,7 +2962,7 @@ elf_i386_convert_load (bfd *abfd, asection *sec, opcode = bfd_get_8 (abfd, contents + roff - 2); - /* It is OK to convert mov to lea. */ + /* Convert mov to lea since it has been done for a while. */ if (opcode != 0x8b) { /* Only convert R_386_GOT32X relocation for call, jmp or @@ -2968,14 +2970,12 @@ elf_i386_convert_load (bfd *abfd, asection *sec, instructions. */ if (r_type != R_386_GOT32X) continue; - - /* It is OK to convert indirect branch to direct branch. It - is OK to convert adc, add, and, cmp, or, sbb, sub, test, - xor only when PIC is false. */ - if (opcode != 0xff && bfd_link_pic (link_info)) - continue; } + /* Convert to R_386_32 if PIC is false or there is no base + register. */ + to_reloc_32 = !is_pic || baseless; + /* Try to convert R_386_GOT32 and R_386_GOT32X. Get the symbol referred to by the reloc. */ if (r_symndx < symtab_hdr->sh_info) @@ -3010,6 +3010,27 @@ elf_i386_convert_load (bfd *abfd, asection *sec, if (h->type == STT_GNU_IFUNC) continue; + /* Undefined weak symbol is only bound locally in executable + and its reference is resolved as 0. */ + if (UNDEFINED_WEAK_RESOLVED_TO_ZERO (link_info, + elf_i386_hash_entry (h))) + { + if (opcode == 0xff) + { + /* No direct branch to 0 for PIC. */ + if (is_pic) + continue; + else + goto convert_branch; + } + else + { + /* We can convert load of address 0 to R_386_32. */ + to_reloc_32 = TRUE; + goto convert_load; + } + } + if (opcode == 0xff) { /* We have "call/jmp *foo@GOT[(%reg)]". */ @@ -3087,27 +3108,29 @@ convert_branch: convert_load: if (opcode == 0x8b) { - /* Convert "mov foo@GOT(%reg1), %reg2" to - "lea foo@GOTOFF(%reg1), %reg2". */ - if (r_type == R_386_GOT32X - && (baseless || !bfd_link_pic (link_info))) + if (to_reloc_32) { + /* Convert "mov foo@GOT[(%reg1)], %reg2" to + "mov $foo, %reg2" with R_386_32. */ r_type = R_386_32; - /* For R_386_32, convert - "lea foo@GOTOFF(%reg1), %reg2" to - "lea foo@GOT, %reg2". */ - if (!baseless) - { - modrm = 0x5 | (modrm & 0x38); - bfd_put_8 (abfd, modrm, contents + roff - 1); - } + modrm = 0xc0 | (modrm & 0x38) >> 3; + bfd_put_8 (abfd, modrm, contents + roff - 1); + opcode = 0xc7; } else - r_type = R_386_GOTOFF; - opcode = 0x8d; + { + /* Convert "mov foo@GOT(%reg1), %reg2" to + "lea foo@GOTOFF(%reg1), %reg2". */ + r_type = R_386_GOTOFF; + opcode = 0x8d; + } } else { + /* Only R_386_32 is supported. */ + if (!to_reloc_32) + continue; + if (opcode == 0x85) { /* Convert "test %reg1, foo@GOT(%reg2)" to @@ -4369,10 +4392,10 @@ r_386_got32: || eh->func_pointer_refcount > 0 || (h->root.type == bfd_link_hash_undefweak && !resolved_to_zero)) - && ((h->def_dynamic - && !h->def_regular) - || h->root.type == bfd_link_hash_undefweak - || h->root.type == bfd_link_hash_undefined))) + && ((h->def_dynamic && !h->def_regular) + /* Undefined weak symbol is bound locally when + PIC is false. */ + || h->root.type == bfd_link_hash_undefweak))) { Elf_Internal_Rela outrel; bfd_boolean skip, relocate; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 6ca3b2e..c696850 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3070,6 +3070,8 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, bfd_boolean changed_relocs; bfd_signed_vma *local_got_refcounts; bfd_vma maxpagesize; + bfd_boolean is_pic; + bfd_boolean require_reloc_pc32; /* Don't even try to convert non-ELF outputs. */ if (!is_elf_hash_table (link_info->hash)) @@ -3105,6 +3107,13 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, goto error_return; } + is_pic = bfd_link_pic (link_info); + + /* TRUE if we can convert only to R_X86_64_PC32. Enable it for + --no-relax. */ + require_reloc_pc32 + = link_info->disable_target_specific_optimizations > 1; + irelend = internal_relocs + sec->reloc_count; for (irel = internal_relocs; irel < irelend; irel++) { @@ -3118,10 +3127,12 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, bfd_signed_vma raddend; unsigned int opcode; unsigned int modrm; + bfd_boolean relocx; + bfd_boolean to_reloc_pc32; - if (r_type != R_X86_64_GOTPCREL - && r_type != R_X86_64_GOTPCRELX - && r_type != R_X86_64_REX_GOTPCRELX) + relocx = (r_type == R_X86_64_GOTPCRELX + || r_type == R_X86_64_REX_GOTPCRELX); + if (!relocx && r_type != R_X86_64_GOTPCREL) continue; roff = irel->r_offset; @@ -3135,26 +3146,27 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, opcode = bfd_get_8 (abfd, contents + roff - 2); - /* It is OK to convert mov to lea. */ + /* Convert mov to lea since it has been done for a while. */ if (opcode != 0x8b) { /* Only convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX - for mov call, jmp or one of adc, add, and, cmp, or, sbb, - sub, test, xor instructions. */ - if (r_type != R_X86_64_GOTPCRELX - && r_type != R_X86_64_REX_GOTPCRELX) + for call, jmp or one of adc, add, and, cmp, or, sbb, sub, + test, xor instructions. */ + if (!relocx) continue; - - /* It is OK to convert indirect branch to direct branch. */ - if (opcode != 0xff) - { - /* It is OK to convert adc, add, and, cmp, or, sbb, sub, - test, xor only when PIC is false. */ - if (bfd_link_pic (link_info)) - continue; - } } + /* We convert only to R_X86_64_PC32: + 1. Branch. + 2. R_X86_64_GOTPCREL since we can't modify REX byte. + 3. require_reloc_pc32 is true. + 4. PIC. + */ + to_reloc_pc32 = (opcode == 0xff + || !relocx + || require_reloc_pc32 + || is_pic); + /* Get the symbol referred to by the reloc. */ if (r_symndx < symtab_hdr->sh_info) { @@ -3195,22 +3207,59 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, /* STT_GNU_IFUNC must keep GOTPCREL relocations. We also avoid optimizing GOTPCREL relocations againt _DYNAMIC since ld.so may use its link-time address. */ - if ((h->def_regular - || h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && h->type != STT_GNU_IFUNC - && h != htab->elf.hdynamic - && SYMBOL_REFERENCES_LOCAL (link_info, h)) + if (h->type == STT_GNU_IFUNC) + continue; + + /* Undefined weak symbol is only bound locally in executable + and its reference is resolved as 0 without relocation + overflow. We can only perform this optimization for + GOTPCRELX relocations since we need to modify REX byte. + It is OK convert mov with R_X86_64_GOTPCREL to + R_X86_64_PC32. */ + if ((relocx || opcode == 0x8b) + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (link_info, + elf_x86_64_hash_entry (h))) + { + if (opcode == 0xff) + { + /* Skip for branch instructions since R_X86_64_PC32 + may overflow. */ + if (require_reloc_pc32) + continue; + } + else if (relocx) + { + /* For non-branch instructions, we can convert to + R_X86_64_32/R_X86_64_32S since we know if there + is a REX byte. */ + to_reloc_pc32 = FALSE; + } + + /* Since we don't know the current PC when PIC is true, + we can't convert to R_X86_64_PC32. */ + if (to_reloc_pc32 && is_pic) + continue; + + goto convert; + } + else if ((h->def_regular + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h != htab->elf.hdynamic + && SYMBOL_REFERENCES_LOCAL (link_info, h)) { /* bfd_link_hash_new or bfd_link_hash_undefined is - set by an assignment in a linker script in - bfd_elf_record_link_assignment. FIXME: If we - ever get a linker error due relocation overflow, - we will skip this optimization. */ + set by an assignment in a linker script in + bfd_elf_record_link_assignment. */ if (h->def_regular && (h->root.type == bfd_link_hash_new || h->root.type == bfd_link_hash_undefined)) - goto convert; + { + /* Skip since R_X86_64_32/R_X86_64_32S may overflow. */ + if (require_reloc_pc32) + continue; + goto convert; + } tsec = h->root.u.def.section; toff = h->root.u.def.value; symtype = h->type; @@ -3219,6 +3268,10 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, continue; } + /* We can only estimate relocation overflow for R_X86_64_PC32. */ + if (!to_reloc_pc32) + goto convert; + if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE) { /* At this stage in linking, no SEC_MERGE symbol has been @@ -3342,15 +3395,55 @@ convert: } else { + unsigned int rex; + unsigned int rex_mask = REX_R; + + if (r_type == R_X86_64_REX_GOTPCRELX) + rex = bfd_get_8 (abfd, contents + roff - 3); + else + rex = 0; + if (opcode == 0x8b) { - /* Convert "mov foo@GOTPCREL(%rip), %reg" to - "lea foo(%rip), %reg". */ - opcode = 0x8d; - r_type = R_X86_64_PC32; + if (to_reloc_pc32) + { + /* Convert "mov foo@GOTPCREL(%rip), %reg" to + "lea foo(%rip), %reg". */ + opcode = 0x8d; + r_type = R_X86_64_PC32; + } + else + { + /* Convert "mov foo@GOTPCREL(%rip), %reg" to + "mov $foo, %reg". */ + opcode = 0xc7; + modrm = bfd_get_8 (abfd, contents + roff - 1); + modrm = 0xc0 | (modrm & 0x38) >> 3; + if ((rex & REX_W) != 0 + && ABI_64_P (link_info->output_bfd)) + { + /* Keep the REX_W bit in REX byte for LP64. */ + r_type = R_X86_64_32S; + goto rewrite_modrm_rex; + } + else + { + /* If the REX_W bit in REX byte isn't needed, + use R_X86_64_32 and clear the W bit to avoid + sign-extend imm32 to imm64. */ + r_type = R_X86_64_32; + /* Clear the W bit in REX byte. */ + rex_mask |= REX_W; + goto rewrite_modrm_rex; + } + } } else { + /* R_X86_64_PC32 isn't supported. */ + if (to_reloc_pc32) + continue; + modrm = bfd_get_8 (abfd, contents + roff - 1); if (opcode == 0x85) { @@ -3366,18 +3459,23 @@ convert: modrm = 0xc0 | (modrm & 0x38) >> 3 | (opcode & 0x3c); opcode = 0x81; } + + /* Use R_X86_64_32 with 32-bit operand to avoid relocation + overflow when sign-extending imm32 to imm64. */ + r_type = (rex & REX_W) != 0 ? R_X86_64_32S : R_X86_64_32; + +rewrite_modrm_rex: bfd_put_8 (abfd, modrm, contents + roff - 1); - if (r_type == R_X86_64_REX_GOTPCRELX) + if (rex) { /* Move the R bit to the B bit in REX byte. */ - unsigned int rex = bfd_get_8 (abfd, contents + roff - 3); - rex = (rex & ~REX_R) | (rex & REX_R) >> 2; + rex = (rex & ~rex_mask) | (rex & REX_R) >> 2; bfd_put_8 (abfd, rex, contents + roff - 3); } - /* No addend for R_X86_64_32S relocation. */ + + /* No addend for R_X86_64_32/R_X86_64_32S relocations. */ irel->r_addend = 0; - r_type = R_X86_64_32S; } bfd_put_8 (abfd, opcode, contents + roff - 2); @@ -4688,9 +4786,9 @@ direct: || eh->func_pointer_refcount > 0 || (h->root.type == bfd_link_hash_undefweak && !resolved_to_zero)) - && ((h->def_dynamic - && !h->def_regular) - || h->root.type == bfd_link_hash_undefweak + && ((h->def_dynamic && !h->def_regular) + /* Undefined weak symbol is bound locally when + PIC is false. */ || h->root.type == bfd_link_hash_undefined))) { Elf_Internal_Rela outrel; diff --git a/ld/ChangeLog b/ld/ChangeLog index 2c02012..ef2e60f 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,101 @@ 2016-02-26 H.J. Lu <hongjiu.lu@intel.com> + PR ld/19609 + * testsuite/ld-i386/got1.dd: Updated. + * testsuite/ld-i386/lea1c.d: Likewise. + * testsuite/ld-i386/load1-nacl.d: Likewise. + * testsuite/ld-i386/load1.d: Likewise. + * testsuite/ld-i386/load4b.d: Likewise. + * testsuite/ld-i386/load5b.d: Likewise. + * testsuite/ld-i386/mov1b.d: Likewise. + * testsuite/ld-x86-64/mov1b.d: Likewise. + * testsuite/ld-x86-64/mov1d.d: Likewise. + * testsuite/ld-ifunc/ifunc-21-i386.d: Likewise. + * testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise. + * testsuite/ld-ifunc/ifunc-22-i386.d: Likewise. + * testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise. + * testsuite/ld-x86-64/gotpcrel1.dd: Likewise. + * testsuite/ld-x86-64/lea1a.d: Likewise. + * testsuite/ld-x86-64/lea1b.d: Likewise. + * testsuite/ld-x86-64/lea1c.d: Likewise. + * testsuite/ld-x86-64/lea1d.d: Likewise. + * testsuite/ld-x86-64/lea1e.d: Likewise. + * testsuite/ld-x86-64/lea1f.d: Likewise. + * testsuite/ld-x86-64/mov1b.d: Likewise. + * testsuite/ld-x86-64/mov1d.d: Likewise. + * testsuite/ld-x86-64/pr13082-3b.d: Likewise. + * testsuite/ld-x86-64/pr13082-4b.d: Likewise. + * testsuite/ld-x86-64/lea1.s: Add tests for 32-bit registers. + * testsuite/ld-i386/pr19609-1.s: New file. + * testsuite/ld-i386/pr19609-1a.d: Likewise. + * testsuite/ld-i386/pr19609-1b.d: Likewise. + * testsuite/ld-i386/pr19609-1c.d: Likewise. + * testsuite/ld-i386/pr19609-1d.d: Likewise. + * testsuite/ld-i386/pr19609-1e.d: Likewise. + * testsuite/ld-i386/pr19609-1f.d: Likewise. + * testsuite/ld-i386/pr19609-1g.d: Likewise. + * testsuite/ld-i386/pr19609-1h.d: Likewise. + * testsuite/ld-i386/pr19609-1i.d: Likewise. + * testsuite/ld-i386/pr19609-2.s: Likewise. + * testsuite/ld-i386/pr19609-2a.d: Likewise. + * testsuite/ld-i386/pr19609-2b.d: Likewise. + * testsuite/ld-i386/pr19609-2c.d: Likewise. + * testsuite/ld-i386/undefweak.s: Likewise. + * testsuite/ld-i386/undefweaka.d: Likewise. + * testsuite/ld-i386/undefweakb.d: Likewise. + * testsuite/ld-x86-64/pr13082-3c.d: Likewise. + * testsuite/ld-x86-64/pr13082-3d.d: Likewise. + * testsuite/ld-x86-64/pr19609-1.s: Likewise. + * testsuite/ld-x86-64/pr19609-1a.d: Likewise. + * testsuite/ld-x86-64/pr19609-1b.d: Likewise. + * testsuite/ld-x86-64/pr19609-1c.d: Likewise. + * testsuite/ld-x86-64/pr19609-1d.d: Likewise. + * testsuite/ld-x86-64/pr19609-1e.d: Likewise. + * testsuite/ld-x86-64/pr19609-1f.d: Likewise. + * testsuite/ld-x86-64/pr19609-1g.d: Likewise. + * testsuite/ld-x86-64/pr19609-1h.d: Likewise. + * testsuite/ld-x86-64/pr19609-1i.d: Likewise. + * testsuite/ld-x86-64/pr19609-1j.d: Likewise. + * testsuite/ld-x86-64/pr19609-1k.d: Likewise. + * testsuite/ld-x86-64/pr19609-1l.d: Likewise. + * testsuite/ld-x86-64/pr19609-1m.d: Likewise. + * testsuite/ld-x86-64/pr19609-2.s: Likewise. + * testsuite/ld-x86-64/pr19609-2a.d: Likewise. + * testsuite/ld-x86-64/pr19609-2b.d: Likewise. + * testsuite/ld-x86-64/pr19609-2c.d: Likewise. + * testsuite/ld-x86-64/pr19609-2d.d: Likewise. + * testsuite/ld-x86-64/pr19609-3.s: Likewise. + * testsuite/ld-x86-64/pr19609-3a.d: Likewise. + * testsuite/ld-x86-64/pr19609-3b.d: Likewise. + * testsuite/ld-x86-64/pr19609-4.s: Likewise. + * testsuite/ld-x86-64/pr19609-4a.d: Likewise. + * testsuite/ld-x86-64/pr19609-4b.d: Likewise. + * testsuite/ld-x86-64/pr19609-4c.d: Likewise. + * testsuite/ld-x86-64/pr19609-4d.d: Likewise. + * testsuite/ld-x86-64/pr19609-4e.d: Likewise. + * testsuite/ld-x86-64/pr19609-5.s: Likewise. + * testsuite/ld-x86-64/pr19609-5a.d: Likewise. + * testsuite/ld-x86-64/pr19609-5b.d: Likewise. + * testsuite/ld-x86-64/pr19609-5c.d: Likewise. + * testsuite/ld-x86-64/pr19609-5d.d: Likewise. + * testsuite/ld-x86-64/pr19609-5e.d: Likewise. + * testsuite/ld-x86-64/pr19609-6.s: Likewise. + * testsuite/ld-x86-64/pr19609-6a.d: Likewise. + * testsuite/ld-x86-64/pr19609-6b.d: Likewise. + * testsuite/ld-x86-64/pr19609-6c.d: Likewise. + * testsuite/ld-x86-64/pr19609-6d.d: Likewise. + * testsuite/ld-x86-64/pr19609-7.s: Likewise. + * testsuite/ld-x86-64/pr19609-7a.d: Likewise. + * testsuite/ld-x86-64/pr19609-7b.d: Likewise. + * testsuite/ld-x86-64/pr19609-7c.d: Likewise. + * testsuite/ld-x86-64/pr19609-7d.d: Likewise. + * testsuite/ld-i386/i386.exp: Run undefweak tests and tests for + PR ld/19609. + * testsuite/ld-x86-64/x86-64.exp: Run pr13082-3c, pr13082-3d + and tests for PR ld/19609. + +2016-02-26 H.J. Lu <hongjiu.lu@intel.com> + PR ld/19645 * NEWS: Mention -z common/-z nocommon for ELF targets. * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle diff --git a/ld/testsuite/ld-i386/got1.dd b/ld/testsuite/ld-i386/got1.dd index e6e82de..cfea36b 100644 --- a/ld/testsuite/ld-i386/got1.dd +++ b/ld/testsuite/ld-i386/got1.dd @@ -4,7 +4,7 @@ [ ]*[a-f0-9]+: [ a-f0-9]+ addr16 call [a-f0-9]+ <foo> [ ]*[a-f0-9]+: [ a-f0-9]+ call \*0x[a-f0-9]+ [ ]*[a-f0-9]+: [ a-f0-9]+ call \*0x[a-f0-9]+ -[ ]*[a-f0-9]+: [ a-f0-9]+ lea *0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: [ a-f0-9]+ mov *\$0x[a-f0-9]+,%eax [ ]*[a-f0-9]+: ff d0 call \*%eax [ ]*[a-f0-9]+: [ a-f0-9]+ mov *0x[a-f0-9]+,%eax [ ]*[a-f0-9]+: ff d0 call \*%eax @@ -12,7 +12,7 @@ [ ]*[a-f0-9]+: ff d0 call \*%eax [ ]*[a-f0-9]+: [ a-f0-9]+ call [a-f0-9]+ <__x86.get_pc_thunk.cx> [ ]*[a-f0-9]+: [ a-f0-9]+ add \$0x[a-f0-9]+,%ecx -[ ]*[a-f0-9]+: [ a-f0-9]+ lea *0x[a-f0-9]+,%ecx +[ ]*[a-f0-9]+: [ a-f0-9]+ mov *\$0x[a-f0-9]+,%ecx [ ]*[a-f0-9]+: ff d1 call \*%ecx [ ]*[a-f0-9]+: 83 ec 0c sub \$0xc,%esp [ ]*[a-f0-9]+: 6a 00 push \$0x0 diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 5ddf045..e5f4aaa 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -350,6 +350,20 @@ run_dump_test "pr19636-4b" run_dump_test "pr19636-4c" run_dump_test "pr19636-4d" run_dump_test "pr19645" +run_dump_test "pr19609-1a" +run_dump_test "pr19609-1b" +run_dump_test "pr19609-1c" +run_dump_test "pr19609-1d" +run_dump_test "pr19609-1e" +run_dump_test "pr19609-1f" +run_dump_test "pr19609-1g" +run_dump_test "pr19609-1h" +run_dump_test "pr19609-1i" +run_dump_test "pr19609-2a" +run_dump_test "pr19609-2b" +run_dump_test "pr19609-2c" +run_dump_test "undefweaka" +run_dump_test "undefweakb" if { !([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"] diff --git a/ld/testsuite/ld-i386/lea1c.d b/ld/testsuite/ld-i386/lea1c.d index 0c3580d..b461089 100644 --- a/ld/testsuite/ld-i386/lea1c.d +++ b/ld/testsuite/ld-i386/lea1c.d @@ -9,8 +9,8 @@ Disassembly of section .text: #... -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax #pass diff --git a/ld/testsuite/ld-i386/load1-nacl.d b/ld/testsuite/ld-i386/load1-nacl.d index 1245639..1dbba11 100644 --- a/ld/testsuite/ld-i386/load1-nacl.d +++ b/ld/testsuite/ld-i386/load1-nacl.d @@ -16,7 +16,7 @@ SYMBOL TABLE: Disassembly of section .text: 0+20000 <_start>: -[ ]*[a-f0-9]+: 8d 05 80 00 03 10 lea 0x10030080,%eax +[ ]*[a-f0-9]+: c7 c0 80 00 03 10 mov \$0x10030080,%eax [ ]*[a-f0-9]+: 81 d0 80 00 03 10 adc \$0x10030080,%eax [ ]*[a-f0-9]+: 81 c3 80 00 03 10 add \$0x10030080,%ebx [ ]*[a-f0-9]+: 81 e1 80 00 03 10 and \$0x10030080,%ecx @@ -26,7 +26,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 80 00 03 10 sub \$0x10030080,%ebp [ ]*[a-f0-9]+: 81 f4 80 00 03 10 xor \$0x10030080,%esp [ ]*[a-f0-9]+: f7 c1 80 00 03 10 test \$0x10030080,%ecx -[ ]*[a-f0-9]+: 8d 05 80 00 03 10 lea 0x10030080,%eax +[ ]*[a-f0-9]+: c7 c0 80 00 03 10 mov \$0x10030080,%eax [ ]*[a-f0-9]+: 81 d0 80 00 03 10 adc \$0x10030080,%eax [ ]*[a-f0-9]+: 81 c3 80 00 03 10 add \$0x10030080,%ebx [ ]*[a-f0-9]+: 81 e1 80 00 03 10 and \$0x10030080,%ecx @@ -36,7 +36,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 80 00 03 10 sub \$0x10030080,%ebp [ ]*[a-f0-9]+: 81 f4 80 00 03 10 xor \$0x10030080,%esp [ ]*[a-f0-9]+: f7 c1 80 00 03 10 test \$0x10030080,%ecx -[ ]*[a-f0-9]+: 8d 05 81 00 03 10 lea 0x10030081,%eax +[ ]*[a-f0-9]+: c7 c0 81 00 03 10 mov \$0x10030081,%eax [ ]*[a-f0-9]+: 81 d0 81 00 03 10 adc \$0x10030081,%eax [ ]*[a-f0-9]+: 81 c3 81 00 03 10 add \$0x10030081,%ebx [ ]*[a-f0-9]+: 81 e1 81 00 03 10 and \$0x10030081,%ecx @@ -46,7 +46,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 81 00 03 10 sub \$0x10030081,%ebp [ ]*[a-f0-9]+: 81 f4 81 00 03 10 xor \$0x10030081,%esp [ ]*[a-f0-9]+: f7 c1 81 00 03 10 test \$0x10030081,%ecx -[ ]*[a-f0-9]+: 8d 05 81 00 03 10 lea 0x10030081,%eax +[ ]*[a-f0-9]+: c7 c0 81 00 03 10 mov \$0x10030081,%eax [ ]*[a-f0-9]+: 81 d0 81 00 03 10 adc \$0x10030081,%eax [ ]*[a-f0-9]+: 81 c3 81 00 03 10 add \$0x10030081,%ebx [ ]*[a-f0-9]+: 81 e1 81 00 03 10 and \$0x10030081,%ecx diff --git a/ld/testsuite/ld-i386/load1.d b/ld/testsuite/ld-i386/load1.d index a252a15..9c4aa8e 100644 --- a/ld/testsuite/ld-i386/load1.d +++ b/ld/testsuite/ld-i386/load1.d @@ -15,7 +15,7 @@ SYMBOL TABLE: Disassembly of section .text: 0+8048074 <_start>: -[ ]*[a-f0-9]+: 8d 05 70 91 04 08 lea 0x8049170,%eax +[ ]*[a-f0-9]+: c7 c0 70 91 04 08 mov \$0x8049170,%eax [ ]*[a-f0-9]+: 81 d0 70 91 04 08 adc \$0x8049170,%eax [ ]*[a-f0-9]+: 81 c3 70 91 04 08 add \$0x8049170,%ebx [ ]*[a-f0-9]+: 81 e1 70 91 04 08 and \$0x8049170,%ecx @@ -25,7 +25,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 70 91 04 08 sub \$0x8049170,%ebp [ ]*[a-f0-9]+: 81 f4 70 91 04 08 xor \$0x8049170,%esp [ ]*[a-f0-9]+: f7 c1 70 91 04 08 test \$0x8049170,%ecx -[ ]*[a-f0-9]+: 8d 05 70 91 04 08 lea 0x8049170,%eax +[ ]*[a-f0-9]+: c7 c0 70 91 04 08 mov \$0x8049170,%eax [ ]*[a-f0-9]+: 81 d0 70 91 04 08 adc \$0x8049170,%eax [ ]*[a-f0-9]+: 81 c3 70 91 04 08 add \$0x8049170,%ebx [ ]*[a-f0-9]+: 81 e1 70 91 04 08 and \$0x8049170,%ecx @@ -35,7 +35,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 70 91 04 08 sub \$0x8049170,%ebp [ ]*[a-f0-9]+: 81 f4 70 91 04 08 xor \$0x8049170,%esp [ ]*[a-f0-9]+: f7 c1 70 91 04 08 test \$0x8049170,%ecx -[ ]*[a-f0-9]+: 8d 05 71 91 04 08 lea 0x8049171,%eax +[ ]*[a-f0-9]+: c7 c0 71 91 04 08 mov \$0x8049171,%eax [ ]*[a-f0-9]+: 81 d0 71 91 04 08 adc \$0x8049171,%eax [ ]*[a-f0-9]+: 81 c3 71 91 04 08 add \$0x8049171,%ebx [ ]*[a-f0-9]+: 81 e1 71 91 04 08 and \$0x8049171,%ecx @@ -45,7 +45,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 81 ed 71 91 04 08 sub \$0x8049171,%ebp [ ]*[a-f0-9]+: 81 f4 71 91 04 08 xor \$0x8049171,%esp [ ]*[a-f0-9]+: f7 c1 71 91 04 08 test \$0x8049171,%ecx -[ ]*[a-f0-9]+: 8d 05 71 91 04 08 lea 0x8049171,%eax +[ ]*[a-f0-9]+: c7 c0 71 91 04 08 mov \$0x8049171,%eax [ ]*[a-f0-9]+: 81 d0 71 91 04 08 adc \$0x8049171,%eax [ ]*[a-f0-9]+: 81 c3 71 91 04 08 add \$0x8049171,%ebx [ ]*[a-f0-9]+: 81 e1 71 91 04 08 and \$0x8049171,%ecx diff --git a/ld/testsuite/ld-i386/load4b.d b/ld/testsuite/ld-i386/load4b.d index 0f6f4e2..9d1732b 100644 --- a/ld/testsuite/ld-i386/load4b.d +++ b/ld/testsuite/ld-i386/load4b.d @@ -9,5 +9,5 @@ Disassembly of section .text: #... -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax #pass diff --git a/ld/testsuite/ld-i386/load5b.d b/ld/testsuite/ld-i386/load5b.d index 6db0b28..96726a4 100644 --- a/ld/testsuite/ld-i386/load5b.d +++ b/ld/testsuite/ld-i386/load5b.d @@ -9,5 +9,5 @@ Disassembly of section .text: #... -[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax #pass diff --git a/ld/testsuite/ld-i386/mov1b.d b/ld/testsuite/ld-i386/mov1b.d index ae40862..1b7cc2f 100644 --- a/ld/testsuite/ld-i386/mov1b.d +++ b/ld/testsuite/ld-i386/mov1b.d @@ -1,6 +1,6 @@ #source: mov1.s #as: --32 -#ld: -pie -melf_i386 +#ld: -pie -melf_i386 --no-dynamic-linker #objdump: -dw .*: +file format .* @@ -10,6 +10,6 @@ Disassembly of section .text: #... [ ]*[a-f0-9]+: 8b 81 ([0-9a-f]{2} ){4} * mov -0x[a-f0-9]+\(%ecx\),%eax -[ ]*[a-f0-9]+: 8b 81 ([0-9a-f]{2} ){4} * mov -0x[a-f0-9]+\(%ecx\),%eax -[ ]*[a-f0-9]+: 8b 81 ([0-9a-f]{2} ){4} * mov -0x[a-f0-9]+\(%ecx\),%eax +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 * mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 * mov \$0x0,%eax #pass diff --git a/ld/testsuite/ld-i386/pr19609-1.s b/ld/testsuite/ld-i386/pr19609-1.s new file mode 100644 index 0000000..f0b8eac --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1.s @@ -0,0 +1,12 @@ + .text + .weak bar + .globl _start + .type _start, @function +_start: + cmp bar@GOT(%edx), %eax + cmp bar@GOT(%edx), %ecx + mov bar@GOT(%edx), %eax + mov bar@GOT(%edx), %ecx + test bar@GOT(%edx), %eax + test bar@GOT(%edx), %ecx + .size _start, .-_start diff --git a/ld/testsuite/ld-i386/pr19609-1a.d b/ld/testsuite/ld-i386/pr19609-1a.d new file mode 100644 index 0000000..214adaf --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1a.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1b.d b/ld/testsuite/ld-i386/pr19609-1b.d new file mode 100644 index 0000000..ebd6bc9 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1b.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -pie -melf_i386 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1c.d b/ld/testsuite/ld-i386/pr19609-1c.d new file mode 100644 index 0000000..e7d1c13 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1c.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -shared -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 3b 82 fc ff ff ff cmp -0x4\(%edx\),%eax +[ ]*[a-f0-9]+: 3b 8a fc ff ff ff cmp -0x4\(%edx\),%ecx +[ ]*[a-f0-9]+: 8b 82 fc ff ff ff mov -0x4\(%edx\),%eax +[ ]*[a-f0-9]+: 8b 8a fc ff ff ff mov -0x4\(%edx\),%ecx +[ ]*[a-f0-9]+: 85 82 fc ff ff ff test %eax,-0x4\(%edx\) +[ ]*[a-f0-9]+: 85 8a fc ff ff ff test %ecx,-0x4\(%edx\) diff --git a/ld/testsuite/ld-i386/pr19609-1d.d b/ld/testsuite/ld-i386/pr19609-1d.d new file mode 100644 index 0000000..4b50f8c --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1d.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -E -melf_i386 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1e.d b/ld/testsuite/ld-i386/pr19609-1e.d new file mode 100644 index 0000000..a515ad6 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1e.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -shared -E -Bsymbolic -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 3b 82 fc ff ff ff cmp -0x4\(%edx\),%eax +[ ]*[a-f0-9]+: 3b 8a fc ff ff ff cmp -0x4\(%edx\),%ecx +[ ]*[a-f0-9]+: 8b 82 fc ff ff ff mov -0x4\(%edx\),%eax +[ ]*[a-f0-9]+: 8b 8a fc ff ff ff mov -0x4\(%edx\),%ecx +[ ]*[a-f0-9]+: 85 82 fc ff ff ff test %eax,-0x4\(%edx\) +[ ]*[a-f0-9]+: 85 8a fc ff ff ff test %ecx,-0x4\(%edx\) diff --git a/ld/testsuite/ld-i386/pr19609-1f.d b/ld/testsuite/ld-i386/pr19609-1f.d new file mode 100644 index 0000000..99ed5bb --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1f.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -pie --dynamic-list-data -melf_i386 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1g.d b/ld/testsuite/ld-i386/pr19609-1g.d new file mode 100644 index 0000000..2fc9731 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1g.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -pie -E -melf_i386 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1h.d b/ld/testsuite/ld-i386/pr19609-1h.d new file mode 100644 index 0000000..79fe5d5 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1h.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=yes +#ld: -pie -E -Bsymbolic-functions -melf_i386 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 00 cmp \$0x0,%eax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: f7 c0 00 00 00 00 test \$0x0,%eax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx diff --git a/ld/testsuite/ld-i386/pr19609-1i.d b/ld/testsuite/ld-i386/pr19609-1i.d new file mode 100644 index 0000000..ce15bc9 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-1i.d @@ -0,0 +1,17 @@ +#source: pr19609-1.s +#as: --32 -mrelax-relocations=no +#ld: -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 3b 82 fc ff ff ff cmp -0x4\(%edx\),%eax +[ ]*[a-f0-9]+: 3b 8a fc ff ff ff cmp -0x4\(%edx\),%ecx +[ ]*[a-f0-9]+: c7 c0 00 00 00 00 mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 85 82 fc ff ff ff test %eax,-0x4\(%edx\) +[ ]*[a-f0-9]+: 85 8a fc ff ff ff test %ecx,-0x4\(%edx\) diff --git a/ld/testsuite/ld-i386/pr19609-2.s b/ld/testsuite/ld-i386/pr19609-2.s new file mode 100644 index 0000000..622dbd4 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-2.s @@ -0,0 +1,6 @@ + .text + .weak bar + .globl _start + .type _start, @function +_start: + call *bar@GOT(%edx) diff --git a/ld/testsuite/ld-i386/pr19609-2a.d b/ld/testsuite/ld-i386/pr19609-2a.d new file mode 100644 index 0000000..ea1e461 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-2a.d @@ -0,0 +1,12 @@ +#source: pr19609-2.s +#as: --32 -mrelax-relocations=yes +#ld: -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: 67 e8 ([0-9a-f]{2} ){4}[ ]+addr16 call 0 <_start-0x[0-9a-f]+> diff --git a/ld/testsuite/ld-i386/pr19609-2b.d b/ld/testsuite/ld-i386/pr19609-2b.d new file mode 100644 index 0000000..a4bf598 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-2b.d @@ -0,0 +1,12 @@ +#source: pr19609-2.s +#as: --32 -mrelax-relocations=yes +#ld: -pie -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 92 fc ff ff ff call \*-0x4\(%edx\) diff --git a/ld/testsuite/ld-i386/pr19609-2c.d b/ld/testsuite/ld-i386/pr19609-2c.d new file mode 100644 index 0000000..2553f8a --- /dev/null +++ b/ld/testsuite/ld-i386/pr19609-2c.d @@ -0,0 +1,12 @@ +#source: pr19609-2.s +#as: --32 -mrelax-relocations=yes +#ld: -shared -melf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 92 fc ff ff ff call \*-0x4\(%edx\) diff --git a/ld/testsuite/ld-i386/undefweak.s b/ld/testsuite/ld-i386/undefweak.s new file mode 100644 index 0000000..f34c917 --- /dev/null +++ b/ld/testsuite/ld-i386/undefweak.s @@ -0,0 +1,10 @@ + .text + .globl _start +_start: + mov .Ljmp(%eax), %eax + jmp *(%eax) + .section .data.rel.ro.local,"aw",@progbits + .weak func + .align 8 +.Ljmp: + .long func diff --git a/ld/testsuite/ld-i386/undefweaka.d b/ld/testsuite/ld-i386/undefweaka.d new file mode 100644 index 0000000..c106ebf --- /dev/null +++ b/ld/testsuite/ld-i386/undefweaka.d @@ -0,0 +1,9 @@ +#source: undefweak.s +#as: --32 +#ld: -shared -melf_i386 +#readelf: -r --wide + +Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 2 entries: + Offset Info Type Sym. Value Symbol's Name +[0-9a-f]+ +[0-9a-f]+ +R_386_RELATIVE + +[0-9a-f]+ +[0-9a-f]+ +R_386_32 +[0-9a-f]+ +func diff --git a/ld/testsuite/ld-i386/undefweakb.d b/ld/testsuite/ld-i386/undefweakb.d new file mode 100644 index 0000000..48ebad8 --- /dev/null +++ b/ld/testsuite/ld-i386/undefweakb.d @@ -0,0 +1,11 @@ +#source: undefweak.s +#as: --32 +#ld: -pie -melf_i386 +#readelf: -r --wide -x .data.rel.ro + +Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name +[0-9a-f]+ +[0-9a-f]+ +R_386_RELATIVE + + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ 00000000 .... diff --git a/ld/testsuite/ld-ifunc/ifunc-21-i386.d b/ld/testsuite/ld-ifunc/ifunc-21-i386.d index c7ca811..36fcfc0 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-i386.d +++ b/ld/testsuite/ld-ifunc/ifunc-21-i386.d @@ -12,5 +12,11 @@ [ ]*[a-f0-9]+: 03 83 0c 00 00 00 add 0xc\(%ebx\),%eax [ ]*[a-f0-9]+: 8b 83 0c 00 00 00 mov 0xc\(%ebx\),%eax [ ]*[a-f0-9]+: 85 83 0c 00 00 00 test %eax,0xc\(%ebx\) -[ ]*[a-f0-9]+: 8d ([0-9a-f]{2} ){5}[ ]+lea[ ]+.* +[ ]*[a-f0-9]+: c7 c0 b5 80 04 08 mov \$0x80480b5,%eax + +0+80480b4 <foo>: +[ ]*[a-f0-9]+: c3 ret + +0+80480b5 <bar>: +[ ]*[a-f0-9]+: c3 ret #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d index ae75487..e28734e 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d +++ b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d @@ -12,5 +12,11 @@ [ ]*[a-f0-9]+: 48 03 05 35 00 20 00 add 0x200035\(%rip\),%rax # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> [ ]*[a-f0-9]+: 48 8b 05 2e 00 20 00 mov 0x20002e\(%rip\),%rax # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> [ ]*[a-f0-9]+: 48 85 05 27 00 20 00 test %rax,0x200027\(%rip\) # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> -[ ]*[a-f0-9]+: 48 8d ([0-9a-f]{2} ){5}[ ]+lea[ ]+.* +[ ]*[a-f0-9]+: 48 c7 c0 09 01 40 00 mov \$0x400109,%rax + +0+400108 <foo>: +[ ]*[a-f0-9]+: c3 retq + +0+400109 <bar>: +[ ]*[a-f0-9]+: c3 retq #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-22-i386.d b/ld/testsuite/ld-ifunc/ifunc-22-i386.d index c7ca811..36fcfc0 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-i386.d +++ b/ld/testsuite/ld-ifunc/ifunc-22-i386.d @@ -12,5 +12,11 @@ [ ]*[a-f0-9]+: 03 83 0c 00 00 00 add 0xc\(%ebx\),%eax [ ]*[a-f0-9]+: 8b 83 0c 00 00 00 mov 0xc\(%ebx\),%eax [ ]*[a-f0-9]+: 85 83 0c 00 00 00 test %eax,0xc\(%ebx\) -[ ]*[a-f0-9]+: 8d ([0-9a-f]{2} ){5}[ ]+lea[ ]+.* +[ ]*[a-f0-9]+: c7 c0 b5 80 04 08 mov \$0x80480b5,%eax + +0+80480b4 <foo>: +[ ]*[a-f0-9]+: c3 ret + +0+80480b5 <bar>: +[ ]*[a-f0-9]+: c3 ret #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d index ae75487..e28734e 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d +++ b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d @@ -12,5 +12,11 @@ [ ]*[a-f0-9]+: 48 03 05 35 00 20 00 add 0x200035\(%rip\),%rax # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> [ ]*[a-f0-9]+: 48 8b 05 2e 00 20 00 mov 0x20002e\(%rip\),%rax # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> [ ]*[a-f0-9]+: 48 85 05 27 00 20 00 test %rax,0x200027\(%rip\) # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18> -[ ]*[a-f0-9]+: 48 8d ([0-9a-f]{2} ){5}[ ]+lea[ ]+.* +[ ]*[a-f0-9]+: 48 c7 c0 09 01 40 00 mov \$0x400109,%rax + +0+400108 <foo>: +[ ]*[a-f0-9]+: c3 retq + +0+400109 <bar>: +[ ]*[a-f0-9]+: c3 retq #pass diff --git a/ld/testsuite/ld-x86-64/gotpcrel1.dd b/ld/testsuite/ld-x86-64/gotpcrel1.dd index 187a1a5..46321db 100644 --- a/ld/testsuite/ld-x86-64/gotpcrel1.dd +++ b/ld/testsuite/ld-x86-64/gotpcrel1.dd @@ -4,7 +4,7 @@ [ ]*[a-f0-9]+: [ a-f0-9]+ addr32 callq [a-f0-9]+ <foo> [ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> [ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> -[ ]*[a-f0-9]+: [ a-f0-9]+ lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> +[ ]*[a-f0-9]+: [ a-f0-9]+ (rex mov|mov ) \$0x[a-f0-9]+,%(r|e)ax [ ]*[a-f0-9]+: ff d0 callq \*%rax [ ]*[a-f0-9]+: [ a-f0-9]+ mov 0x[a-f0-9]+\(%rip\),%rcx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> [ ]*[a-f0-9]+: ff d1 callq \*%rcx diff --git a/ld/testsuite/ld-x86-64/lea1.s b/ld/testsuite/ld-x86-64/lea1.s index 07a2e35..2c9982e 100644 --- a/ld/testsuite/ld-x86-64/lea1.s +++ b/ld/testsuite/ld-x86-64/lea1.s @@ -9,10 +9,12 @@ foo: .globl _start .type _start, @function _start: + movl foo@GOTPCREL(%rip), %eax + movl bar@GOTPCREL(%rip), %r11d movq foo@GOTPCREL(%rip), %rax - movq bar@GOTPCREL(%rip), %rax + movq bar@GOTPCREL(%rip), %r11 movq __start_my_section@GOTPCREL(%rip), %rax - movq __stop_my_section@GOTPCREL(%rip), %rax + movq __stop_my_section@GOTPCREL(%rip), %r11 .size _start, .-_start .comm pad,4,4 .comm bar,4,4 diff --git a/ld/testsuite/ld-x86-64/lea1a.d b/ld/testsuite/ld-x86-64/lea1a.d index 36e9f54..9b662cb 100644 --- a/ld/testsuite/ld-x86-64/lea1a.d +++ b/ld/testsuite/ld-x86-64/lea1a.d @@ -9,8 +9,11 @@ Disassembly of section .text: #... +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo> +[ ]*[a-f0-9]+: 44 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <__stop_my_section> #pass diff --git a/ld/testsuite/ld-x86-64/lea1b.d b/ld/testsuite/ld-x86-64/lea1b.d index a92acd7..9108149 100644 --- a/ld/testsuite/ld-x86-64/lea1b.d +++ b/ld/testsuite/ld-x86-64/lea1b.d @@ -9,8 +9,11 @@ Disassembly of section .text: #... +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo> +[ ]*[a-f0-9]+: 44 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <__stop_my_section> #pass diff --git a/ld/testsuite/ld-x86-64/lea1c.d b/ld/testsuite/ld-x86-64/lea1c.d index 072b1ee..68fec03 100644 --- a/ld/testsuite/ld-x86-64/lea1c.d +++ b/ld/testsuite/ld-x86-64/lea1c.d @@ -1,5 +1,5 @@ #source: lea1.s -#as: --64 +#as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 #objdump: -dw @@ -9,8 +9,11 @@ Disassembly of section .text: #... -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: 41 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11d +[ ]*[a-f0-9]+: 48 c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%rax +[ ]*[a-f0-9]+: 49 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11 +[ ]*[a-f0-9]+: 48 c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%rax +[ ]*[a-f0-9]+: 49 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11 #pass diff --git a/ld/testsuite/ld-x86-64/lea1d.d b/ld/testsuite/ld-x86-64/lea1d.d index 2613061..4d708d2 100644 --- a/ld/testsuite/ld-x86-64/lea1d.d +++ b/ld/testsuite/ld-x86-64/lea1d.d @@ -9,8 +9,11 @@ Disassembly of section .text: #... +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo> +[ ]*[a-f0-9]+: 44 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <__stop_my_section> #pass diff --git a/ld/testsuite/ld-x86-64/lea1e.d b/ld/testsuite/ld-x86-64/lea1e.d index 109c1cd..da60137 100644 --- a/ld/testsuite/ld-x86-64/lea1e.d +++ b/ld/testsuite/ld-x86-64/lea1e.d @@ -9,8 +9,11 @@ Disassembly of section .text: #... +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo> +[ ]*[a-f0-9]+: 44 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <bar> [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <__stop_my_section> #pass diff --git a/ld/testsuite/ld-x86-64/lea1f.d b/ld/testsuite/ld-x86-64/lea1f.d index 8d6cd78..b7abeb3 100644 --- a/ld/testsuite/ld-x86-64/lea1f.d +++ b/ld/testsuite/ld-x86-64/lea1f.d @@ -1,5 +1,5 @@ #source: lea1.s -#as: --x32 +#as: --x32 -mrelax-relocations=yes #ld: -melf32_x86_64 #objdump: -dw @@ -9,8 +9,11 @@ Disassembly of section .text: #... -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <bar> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__stop_my_section> +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: 41 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11d +[ ]*[a-f0-9]+: 40 c7 c0 ([0-9a-f]{2} ){4} * rex mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: 41 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11d +[ ]*[a-f0-9]+: 40 c7 c0 ([0-9a-f]{2} ){4} * rex mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: 41 c7 c3 ([0-9a-f]{2} ){4} * mov \$0x[a-f0-9]+,%r11d #pass diff --git a/ld/testsuite/ld-x86-64/mov1b.d b/ld/testsuite/ld-x86-64/mov1b.d index f112c1c..7421853 100644 --- a/ld/testsuite/ld-x86-64/mov1b.d +++ b/ld/testsuite/ld-x86-64/mov1b.d @@ -1,6 +1,6 @@ #source: mov1.s -#as: --64 -#ld: -pie -melf_x86_64 +#as: --64 -mrelax-relocations=yes +#ld: -pie -melf_x86_64 --no-dynamic-linker #objdump: -dw .*: +file format .* @@ -10,6 +10,6 @@ Disassembly of section .text: #... [ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> -[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> -[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 * mov \$0x0,%rax +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 * mov \$0x0,%rax #pass diff --git a/ld/testsuite/ld-x86-64/mov1d.d b/ld/testsuite/ld-x86-64/mov1d.d index 794a546..7cdab0c 100644 --- a/ld/testsuite/ld-x86-64/mov1d.d +++ b/ld/testsuite/ld-x86-64/mov1d.d @@ -1,6 +1,6 @@ #source: mov1.s -#as: --x32 -#ld: -pie -melf32_x86_64 +#as: --x32 -mrelax-relocations=yes +#ld: -pie -melf32_x86_64 --no-dynamic-linker #objdump: -dw .*: +file format .* @@ -10,6 +10,6 @@ Disassembly of section .text: #... [ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> -[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> -[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 * rex mov \$0x0,%eax +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 * rex mov \$0x0,%eax #pass diff --git a/ld/testsuite/ld-x86-64/pr13082-3b.d b/ld/testsuite/ld-x86-64/pr13082-3b.d index 766dd74..c3c3f86 100644 --- a/ld/testsuite/ld-x86-64/pr13082-3b.d +++ b/ld/testsuite/ld-x86-64/pr13082-3b.d @@ -2,6 +2,9 @@ #name: PR ld/13082-3 (b) #as: --x32 #ld: -pie -melf32_x86_64 -#readelf: -r --wide +#readelf: -r -x .data.rel.ro There are no relocations in this file. + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ 00000000 00000000 ........ diff --git a/ld/testsuite/ld-x86-64/pr13082-3c.d b/ld/testsuite/ld-x86-64/pr13082-3c.d new file mode 100644 index 0000000..9947425 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr13082-3c.d @@ -0,0 +1,9 @@ +#source: pr13082-3.s +#name: PR ld/13082-3 (c) +#as: --64 +#ld: -shared -melf_x86_64 +#readelf: -r --wide + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +[0-9a-f]+ +func \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr13082-3d.d b/ld/testsuite/ld-x86-64/pr13082-3d.d new file mode 100644 index 0000000..8385d50 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr13082-3d.d @@ -0,0 +1,10 @@ +#source: pr13082-3.s +#name: PR ld/13082-3 (d) +#as: --64 +#ld: -pie -melf_x86_64 +#readelf: -r -x .data.rel.ro + +There are no relocations in this file. + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ 00000000 00000000 ........ diff --git a/ld/testsuite/ld-x86-64/pr13082-4b.d b/ld/testsuite/ld-x86-64/pr13082-4b.d index 6d4a35b..2b7584c 100644 --- a/ld/testsuite/ld-x86-64/pr13082-4b.d +++ b/ld/testsuite/ld-x86-64/pr13082-4b.d @@ -2,6 +2,9 @@ #name: PR ld/13082-4 (b) #as: --x32 #ld: -pie -melf32_x86_64 -#readelf: -r --wide +#readelf: -r -x .data.rel.ro There are no relocations in this file. + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ 01000000 00000000 ........ diff --git a/ld/testsuite/ld-x86-64/pr19609-1.s b/ld/testsuite/ld-x86-64/pr19609-1.s new file mode 100644 index 0000000..91cc130 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1.s @@ -0,0 +1,20 @@ + .text + .weak bar + .globl _start + .type _start, @function +_start: + cmp bar@GOTPCREL(%rip), %rax + cmp bar@GOTPCREL(%rip), %ecx + cmp bar@GOTPCREL(%rip), %r11 + cmp bar@GOTPCREL(%rip), %r12d + + mov bar@GOTPCREL(%rip), %rax + mov bar@GOTPCREL(%rip), %ecx + mov bar@GOTPCREL(%rip), %r11 + mov bar@GOTPCREL(%rip), %r12d + + test %rax, bar@GOTPCREL(%rip) + test %ecx, bar@GOTPCREL(%rip) + test %r11, bar@GOTPCREL(%rip) + test %r12d, bar@GOTPCREL(%rip) + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-1a.d b/ld/testsuite/ld-x86-64/pr19609-1a.d new file mode 100644 index 0000000..a908e39 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1a.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1b.d b/ld/testsuite/ld-x86-64/pr19609-1b.d new file mode 100644 index 0000000..d5e2e85 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1b.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -pie -melf_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1c.d b/ld/testsuite/ld-x86-64/pr19609-1c.d new file mode 100644 index 0000000..3b1e98d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1c.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -shared -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-1d.d b/ld/testsuite/ld-x86-64/pr19609-1d.d new file mode 100644 index 0000000..980d8dc --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1d.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -E -melf_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1e.d b/ld/testsuite/ld-x86-64/pr19609-1e.d new file mode 100644 index 0000000..dac5fef --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1e.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -shared -E -Bsymbolic -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-1f.d b/ld/testsuite/ld-x86-64/pr19609-1f.d new file mode 100644 index 0000000..93a7f2c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1f.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -pie --dynamic-list-data -melf_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1g.d b/ld/testsuite/ld-x86-64/pr19609-1g.d new file mode 100644 index 0000000..05a4964 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1g.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -pie -E -melf_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1h.d b/ld/testsuite/ld-x86-64/pr19609-1h.d new file mode 100644 index 0000000..5675076 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1h.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 rex mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 41 c7 c3 00 00 00 00 mov \$0x0,%r11d +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1i.d b/ld/testsuite/ld-x86-64/pr19609-1i.d new file mode 100644 index 0000000..8ef42ad --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1i.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -pie -melf32_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 rex mov \$0x0,%eax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 41 c7 c3 00 00 00 00 mov \$0x0,%r11d +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1j.d b/ld/testsuite/ld-x86-64/pr19609-1j.d new file mode 100644 index 0000000..4a36a70 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1j.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --x32 +#ld: -shared -melf32_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-1k.d b/ld/testsuite/ld-x86-64/pr19609-1k.d new file mode 100644 index 0000000..faab0df --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1k.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=yes +#ld: -pie -E -Bsymbolic-functions -melf_x86_64 --no-dynamic-linker +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 81 f8 00 00 00 00 cmp \$0x0,%rax +[ ]*[a-f0-9]+: 81 f9 00 00 00 00 cmp \$0x0,%ecx +[ ]*[a-f0-9]+: 49 81 fb 00 00 00 00 cmp \$0x0,%r11 +[ ]*[a-f0-9]+: 41 81 fc 00 00 00 00 cmp \$0x0,%r12d +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 mov \$0x0,%rax +[ ]*[a-f0-9]+: c7 c1 00 00 00 00 mov \$0x0,%ecx +[ ]*[a-f0-9]+: 49 c7 c3 00 00 00 00 mov \$0x0,%r11 +[ ]*[a-f0-9]+: 41 c7 c4 00 00 00 00 mov \$0x0,%r12d +[ ]*[a-f0-9]+: 48 f7 c0 00 00 00 00 test \$0x0,%rax +[ ]*[a-f0-9]+: f7 c1 00 00 00 00 test \$0x0,%ecx +[ ]*[a-f0-9]+: 49 f7 c3 00 00 00 00 test \$0x0,%r11 +[ ]*[a-f0-9]+: 41 f7 c4 00 00 00 00 test \$0x0,%r12d diff --git a/ld/testsuite/ld-x86-64/pr19609-1l.d b/ld/testsuite/ld-x86-64/pr19609-1l.d new file mode 100644 index 0000000..aedf5d8 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1l.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=no +#ld: -melf_x86_64 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # 0 <_start-0x[a-f0-9]+> +[ ]*[a-f0-9]+: 8d 0d ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%ecx # 0 <_start-0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%r11 # 0 <_start-0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 8d 25 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%r12d # 0 <_start-0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-1m.d b/ld/testsuite/ld-x86-64/pr19609-1m.d new file mode 100644 index 0000000..8e80cbb --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-1m.d @@ -0,0 +1,23 @@ +#source: pr19609-1.s +#as: --64 -mrelax-relocations=no +#ld: -pie -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-2.s b/ld/testsuite/ld-x86-64/pr19609-2.s new file mode 100644 index 0000000..d52ec9d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-2.s @@ -0,0 +1,9 @@ + .data +foo: + .quad 0 + .text + .globl _start + .type _start, @function +_start: + cmpq foo@GOTPCREL(%rip), %rax + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-2a.d b/ld/testsuite/ld-x86-64/pr19609-2a.d new file mode 100644 index 0000000..e2c6c89 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-2a.d @@ -0,0 +1,4 @@ +#source: pr19609-2.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#error: .*relocation truncated to fit: R_X86_64_32S .* diff --git a/ld/testsuite/ld-x86-64/pr19609-2b.d b/ld/testsuite/ld-x86-64/pr19609-2b.d new file mode 100644 index 0000000..ead4987 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-2b.d @@ -0,0 +1,4 @@ +#source: pr19609-2.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#error: .*relocation truncated to fit: R_X86_64_32S .* diff --git a/ld/testsuite/ld-x86-64/pr19609-2c.d b/ld/testsuite/ld-x86-64/pr19609-2c.d new file mode 100644 index 0000000..458b08a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-2c.d @@ -0,0 +1,13 @@ +#source: pr19609-2.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+70000000 <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} cmp -?0x[a-f0-9]+\(%rip\),%rax # .* +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-2d.d b/ld/testsuite/ld-x86-64/pr19609-2d.d new file mode 100644 index 0000000..32c4c8f --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-2d.d @@ -0,0 +1,13 @@ +#source: pr19609-2.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +70000000 <_start>: +#pass +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} cmp -?0x[a-f0-9]+\(%rip\),%rax # .* diff --git a/ld/testsuite/ld-x86-64/pr19609-3.s b/ld/testsuite/ld-x86-64/pr19609-3.s new file mode 100644 index 0000000..b152946 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-3.s @@ -0,0 +1,10 @@ + .data +foo: + .quad 0 + .text + .globl _start + .type _start, @function +_start: + cmpl foo@GOTPCREL(%rip), %eax + cmpl foo@GOTPCREL(%rip), %r11d + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-3a.d b/ld/testsuite/ld-x86-64/pr19609-3a.d new file mode 100644 index 0000000..3248bb2 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-3a.d @@ -0,0 +1,14 @@ +#source: pr19609-3.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+70000000 <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 a0 cmp \$0xa0000000,%eax +[ ]*[a-f0-9]+: 41 81 fb 00 00 00 a0 cmp \$0xa0000000,%r11d +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-3b.d b/ld/testsuite/ld-x86-64/pr19609-3b.d new file mode 100644 index 0000000..52ca5b7 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-3b.d @@ -0,0 +1,14 @@ +#source: pr19609-3.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +70000000 <_start>: +[ ]*[a-f0-9]+: 81 f8 00 00 00 a0 cmp \$0xa0000000,%eax +[ ]*[a-f0-9]+: 41 81 fb 00 00 00 a0 cmp \$0xa0000000,%r11d +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-4.s b/ld/testsuite/ld-x86-64/pr19609-4.s new file mode 100644 index 0000000..3db3ebb --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4.s @@ -0,0 +1,10 @@ + .data +foo: + .quad 0 + .text + .globl _start + .type _start, @function +_start: + movq foo@GOTPCREL(%rip), %rax + movq foo@GOTPCREL(%rip), %r11 + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-4a.d b/ld/testsuite/ld-x86-64/pr19609-4a.d new file mode 100644 index 0000000..ce952ed --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4a.d @@ -0,0 +1,5 @@ +#source: pr19609-4.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#error: .*relocation truncated to fit: R_X86_64_32S .* +#error: .*relocation truncated to fit: R_X86_64_32S .* diff --git a/ld/testsuite/ld-x86-64/pr19609-4b.d b/ld/testsuite/ld-x86-64/pr19609-4b.d new file mode 100644 index 0000000..cb92aa6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4b.d @@ -0,0 +1,13 @@ +#source: pr19609-4.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +70000000 <_start>: +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 a0 rex mov \$0xa0000000,%eax +[ ]*[a-f0-9]+: 41 c7 c3 00 00 00 a0 mov \$0xa0000000,%r11d diff --git a/ld/testsuite/ld-x86-64/pr19609-4c.d b/ld/testsuite/ld-x86-64/pr19609-4c.d new file mode 100644 index 0000000..ce952ed --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4c.d @@ -0,0 +1,5 @@ +#source: pr19609-4.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#error: .*relocation truncated to fit: R_X86_64_32S .* +#error: .*relocation truncated to fit: R_X86_64_32S .* diff --git a/ld/testsuite/ld-x86-64/pr19609-4d.d b/ld/testsuite/ld-x86-64/pr19609-4d.d new file mode 100644 index 0000000..cb92aa6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4d.d @@ -0,0 +1,13 @@ +#source: pr19609-4.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +70000000 <_start>: +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 a0 rex mov \$0xa0000000,%eax +[ ]*[a-f0-9]+: 41 c7 c3 00 00 00 a0 mov \$0xa0000000,%r11d diff --git a/ld/testsuite/ld-x86-64/pr19609-4e.d b/ld/testsuite/ld-x86-64/pr19609-4e.d new file mode 100644 index 0000000..527fe5d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-4e.d @@ -0,0 +1,13 @@ +#source: pr19609-4.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+70000000 <_start>: +[ ]*[a-f0-9]+: 48 8d 05 f9 ff ff 2f lea 0x2ffffff9\(%rip\),%rax # a0000000 <foo> +[ ]*[a-f0-9]+: 4c 8d 1d f2 ff ff 2f lea 0x2ffffff2\(%rip\),%r11 # a0000000 <foo> diff --git a/ld/testsuite/ld-x86-64/pr19609-5.s b/ld/testsuite/ld-x86-64/pr19609-5.s new file mode 100644 index 0000000..85106bb --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5.s @@ -0,0 +1,6 @@ + .text + .weak bar + .globl _start + .type _start, @function +_start: + call *bar@GOTPCREL(%rip) diff --git a/ld/testsuite/ld-x86-64/pr19609-5a.d b/ld/testsuite/ld-x86-64/pr19609-5a.d new file mode 100644 index 0000000..39948e0 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5a.d @@ -0,0 +1,12 @@ +#source: pr19609-5.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: 67 e8 ([0-9a-f]{2} ){4}[ ]+addr32 callq 0 <_start-0x[0-9a-f]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-5b.d b/ld/testsuite/ld-x86-64/pr19609-5b.d new file mode 100644 index 0000000..4183d56 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5b.d @@ -0,0 +1,12 @@ +#source: pr19609-5.s +#as: --64 -mrelax-relocations=yes +#ld: -pie -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-5c.d b/ld/testsuite/ld-x86-64/pr19609-5c.d new file mode 100644 index 0000000..4eaeb2b --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5c.d @@ -0,0 +1,12 @@ +#source: pr19609-5.s +#as: --64 -mrelax-relocations=yes +#ld: -shared -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-5d.d b/ld/testsuite/ld-x86-64/pr19609-5d.d new file mode 100644 index 0000000..959c63e --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5d.d @@ -0,0 +1,4 @@ +#source: pr19609-5.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x80000000 +#error: .*relocation truncated to fit: R_X86_64_PC32 .* diff --git a/ld/testsuite/ld-x86-64/pr19609-5e.d b/ld/testsuite/ld-x86-64/pr19609-5e.d new file mode 100644 index 0000000..b6b6c65 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-5e.d @@ -0,0 +1,12 @@ +#source: pr19609-5.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x80000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <[0-9a-zA-Z_]+[\+\-]+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr19609-6.s b/ld/testsuite/ld-x86-64/pr19609-6.s new file mode 100644 index 0000000..4e3fc23f --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-6.s @@ -0,0 +1,6 @@ + .text + .globl _start + .type _start, @function +_start: + movq foobar@GOTPCREL(%rip), %rax + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-6a.d b/ld/testsuite/ld-x86-64/pr19609-6a.d new file mode 100644 index 0000000..4802ffe --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-6a.d @@ -0,0 +1,4 @@ +#source: pr19609-6.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 --defsym foobar=0x80000000 +#error: .*relocation truncated to fit: R_X86_64_32S .* diff --git a/ld/testsuite/ld-x86-64/pr19609-6b.d b/ld/testsuite/ld-x86-64/pr19609-6b.d new file mode 100644 index 0000000..64e1f5b --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-6b.d @@ -0,0 +1,13 @@ +#source: pr19609-6.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 --defsym foobar=0x80000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x[a-f0-9]+> +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-6c.d b/ld/testsuite/ld-x86-64/pr19609-6c.d new file mode 100644 index 0000000..19ba1d8 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-6c.d @@ -0,0 +1,13 @@ +#source: pr19609-6.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 --defsym foobar=0x70000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 c7 c0 00 00 00 70 mov \$0x70000000,%rax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-6d.d b/ld/testsuite/ld-x86-64/pr19609-6d.d new file mode 100644 index 0000000..3ef614d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-6d.d @@ -0,0 +1,13 @@ +#source: pr19609-6.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 --defsym foobar=0x80000000 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 40 c7 c0 00 00 00 80 rex mov \$0x80000000,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-7.s b/ld/testsuite/ld-x86-64/pr19609-7.s new file mode 100644 index 0000000..bc654f5 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-7.s @@ -0,0 +1,7 @@ + .text + .weak foobar + .globl _start + .type _start, @function +_start: + call *foobar@GOTPCREL(%rip) + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr19609-7a.d b/ld/testsuite/ld-x86-64/pr19609-7a.d new file mode 100644 index 0000000..d960572 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-7a.d @@ -0,0 +1,4 @@ +#source: pr19609-7.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x80000000 +#error: .*relocation truncated to fit: R_X86_64_PC32 .* diff --git a/ld/testsuite/ld-x86-64/pr19609-7b.d b/ld/testsuite/ld-x86-64/pr19609-7b.d new file mode 100644 index 0000000..2e8fd35 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-7b.d @@ -0,0 +1,13 @@ +#source: pr19609-7.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext=0x80000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*0x[a-f0-9]+> +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-7c.d b/ld/testsuite/ld-x86-64/pr19609-7c.d new file mode 100644 index 0000000..8bd919a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-7c.d @@ -0,0 +1,4 @@ +#source: pr19609-7.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x80000000 +#error: .*relocation truncated to fit: R_X86_64_PC32 .* diff --git a/ld/testsuite/ld-x86-64/pr19609-7d.d b/ld/testsuite/ld-x86-64/pr19609-7d.d new file mode 100644 index 0000000..ba28828 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19609-7d.d @@ -0,0 +1,13 @@ +#source: pr19609-7.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext=0x80000000 --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*0x[a-f0-9]+> +#pass diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 5a3b24f..4b4cf12 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -305,6 +305,8 @@ run_dump_test "pr13082-2a" run_dump_test "pr13082-2b" run_dump_test "pr13082-3a" run_dump_test "pr13082-3b" +run_dump_test "pr13082-3c" +run_dump_test "pr13082-3d" run_dump_test "pr13082-4a" run_dump_test "pr13082-4b" run_dump_test "pr13082-5a" @@ -382,6 +384,43 @@ run_dump_test "pr19636-3a" run_dump_test "pr19636-3b" run_dump_test "pr19636-3c" run_dump_test "pr19645" +run_dump_test "pr19609-1a" +run_dump_test "pr19609-1b" +run_dump_test "pr19609-1c" +run_dump_test "pr19609-1d" +run_dump_test "pr19609-1e" +run_dump_test "pr19609-1f" +run_dump_test "pr19609-1g" +run_dump_test "pr19609-1h" +run_dump_test "pr19609-1i" +run_dump_test "pr19609-1j" +run_dump_test "pr19609-1k" +run_dump_test "pr19609-1l" +run_dump_test "pr19609-1m" +run_dump_test "pr19609-2a" +run_dump_test "pr19609-2b" +run_dump_test "pr19609-2c" +run_dump_test "pr19609-2d" +run_dump_test "pr19609-3a" +run_dump_test "pr19609-3b" +run_dump_test "pr19609-4a" +run_dump_test "pr19609-4b" +run_dump_test "pr19609-4c" +run_dump_test "pr19609-4d" +run_dump_test "pr19609-4e" +run_dump_test "pr19609-5a" +run_dump_test "pr19609-5b" +run_dump_test "pr19609-5c" +run_dump_test "pr19609-5d" +run_dump_test "pr19609-5e" +run_dump_test "pr19609-6a" +run_dump_test "pr19609-6b" +run_dump_test "pr19609-6c" +run_dump_test "pr19609-6d" +run_dump_test "pr19609-7a" +run_dump_test "pr19609-7b" +run_dump_test "pr19609-7c" +run_dump_test "pr19609-7d" proc undefined_weak {cflags ldflags} { set testname "Undefined weak symbol" |