forked from Imagelibrary/binutils-gdb
x86-64: Estimate output section layout before sizing dynamic sections
When sizing dynamic sections, elf_x86_64_scan_relocs converts GOTPCREL relocations to R_X86_64_PC32, R_X86_64_32S or R_X86_64_32 for local symbols. But at that time, since the output section layout is unknown, the local symbol values can't be determined. Later linker issues an error if the converted relocation overflows when resolving relocations against these local symbols. Update the x86-64 ELF linker to estimate output section layout before sizing dynamic sections and use the preliminary output section layout info to skip the GOTPCREL relocation conversion if the converted relocation overflows. bfd/ PR ld/32591 * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Add an input section argument. Use the lowest-addressed section to estimate the __ehdr_start symbol value. Don't convert relocation if the converted relocation will overflow. ld/ PR ld/32591 * emultempl/elf-x86.em (elf_x86_64_before_allocation): New. Defined for x86-64. (LDEMUL_BEFORE_ALLOCATION): Likewise. * testsuite/ld-x86-64/pr19609-2a.d: Don't fail. * testsuite/ld-x86-64/pr19609-2b.d: Likewise. * testsuite/ld-x86-64/pr19609-4a.d: Likewise. * testsuite/ld-x86-64/pr19609-5d.d: Likewise. * testsuite/ld-x86-64/pr19609-7a.d: Likewise. * testsuite/ld-x86-64/pr19609-7c.d: Likewise. * testsuite/ld-x86-64/pr32591-1.s: New file. * testsuite/ld-x86-64/pr32591-1a-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-1a.d: Likewise. * testsuite/ld-x86-64/pr32591-1a.t: Likewise. * testsuite/ld-x86-64/pr32591-1b-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-1b.d: Likewise. * testsuite/ld-x86-64/pr32591-1b.t: Likewise. * testsuite/ld-x86-64/pr32591-1c-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-1c.d: Likewise. * testsuite/ld-x86-64/pr32591-1c.t: Likewise. * testsuite/ld-x86-64/pr32591-1d-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-1d.d: Likewise. * testsuite/ld-x86-64/pr32591-1d.t: Likewise. * testsuite/ld-x86-64/pr32591-2.s: Likewise. * testsuite/ld-x86-64/pr32591-2-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-2.d: Likewise. * testsuite/ld-x86-64/pr32591-2.t: Likewise. * testsuite/ld-x86-64/pr32591-3.s: Likewise. * testsuite/ld-x86-64/pr32591-3-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-3.d: Likewise. * testsuite/ld-x86-64/pr32591-3.t: Likewise. * testsuite/ld-x86-64/pr32591-4.s: Likewise. * testsuite/ld-x86-64/pr32591-4-x32.d: Likewise. * testsuite/ld-x86-64/pr32591-4.d: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run PR ld/32591 tests. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
@@ -1770,6 +1770,7 @@ static unsigned int evex_move_r_to_b (unsigned int byte1)
|
|||||||
|
|
||||||
static bool
|
static bool
|
||||||
elf_x86_64_convert_load_reloc (bfd *abfd,
|
elf_x86_64_convert_load_reloc (bfd *abfd,
|
||||||
|
asection *input_section,
|
||||||
bfd_byte *contents,
|
bfd_byte *contents,
|
||||||
unsigned int *r_type_p,
|
unsigned int *r_type_p,
|
||||||
Elf_Internal_Rela *irel,
|
Elf_Internal_Rela *irel,
|
||||||
@@ -1793,6 +1794,10 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
unsigned int r_symndx;
|
unsigned int r_symndx;
|
||||||
bfd_vma roff = irel->r_offset;
|
bfd_vma roff = irel->r_offset;
|
||||||
bfd_vma abs_relocation;
|
bfd_vma abs_relocation;
|
||||||
|
reloc_howto_type *howto;
|
||||||
|
bfd_reloc_status_type r;
|
||||||
|
Elf_Internal_Sym *isym;
|
||||||
|
bfd_vma relocation;
|
||||||
|
|
||||||
switch (r_type)
|
switch (r_type)
|
||||||
{
|
{
|
||||||
@@ -1901,8 +1906,8 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
/* Get the symbol referred to by the reloc. */
|
/* Get the symbol referred to by the reloc. */
|
||||||
if (h == NULL)
|
if (h == NULL)
|
||||||
{
|
{
|
||||||
Elf_Internal_Sym *isym
|
isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
|
||||||
= bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
|
r_symndx);
|
||||||
|
|
||||||
/* Skip relocation against undefined symbols. */
|
/* Skip relocation against undefined symbols. */
|
||||||
if (isym->st_shndx == SHN_UNDEF)
|
if (isym->st_shndx == SHN_UNDEF)
|
||||||
@@ -1932,6 +1937,9 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
R_X86_64_PC32. */
|
R_X86_64_PC32. */
|
||||||
struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h);
|
struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h);
|
||||||
|
|
||||||
|
isym = NULL;
|
||||||
|
tsec = NULL;
|
||||||
|
|
||||||
abs_symbol = ABS_SYMBOL_P (h);
|
abs_symbol = ABS_SYMBOL_P (h);
|
||||||
abs_relocation = h->root.u.def.value;
|
abs_relocation = h->root.u.def.value;
|
||||||
|
|
||||||
@@ -1991,6 +1999,22 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
/* Skip since R_X86_64_32/R_X86_64_32S may overflow. */
|
/* Skip since R_X86_64_32/R_X86_64_32S may overflow. */
|
||||||
if (no_overflow)
|
if (no_overflow)
|
||||||
return true;
|
return true;
|
||||||
|
if (h->start_stop)
|
||||||
|
tsec = h->root.u.def.section;
|
||||||
|
else if (h == htab->elf.hehdr_start)
|
||||||
|
{
|
||||||
|
/* Use the lowest-addressed section to estimate the
|
||||||
|
__ehdr_start symbol value. */
|
||||||
|
asection *sec;
|
||||||
|
tsec = NULL;
|
||||||
|
for (sec = link_info->output_bfd->sections;
|
||||||
|
sec != NULL;
|
||||||
|
sec = sec->next)
|
||||||
|
if ((sec->flags & SEC_LOAD) != 0
|
||||||
|
&& (tsec == NULL || tsec->vma > sec->vma))
|
||||||
|
tsec = sec;
|
||||||
|
|
||||||
|
}
|
||||||
goto convert;
|
goto convert;
|
||||||
}
|
}
|
||||||
tsec = h->root.u.def.section;
|
tsec = h->root.u.def.section;
|
||||||
@@ -2012,6 +2036,25 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
convert:
|
convert:
|
||||||
|
/* Compute relocation value so that it can be used later to check for
|
||||||
|
overflow against the converted relocation. */
|
||||||
|
if (h == NULL)
|
||||||
|
{
|
||||||
|
/* Make a copy of IREL so that _bfd_elf_rela_local_sym won't
|
||||||
|
change IREL. */
|
||||||
|
Elf_Internal_Rela rel = *irel;
|
||||||
|
relocation = _bfd_elf_rela_local_sym (link_info->output_bfd, isym,
|
||||||
|
&tsec, &rel);
|
||||||
|
/* Use the updated r_addend. */
|
||||||
|
raddend = rel.r_addend;
|
||||||
|
}
|
||||||
|
else if (tsec != NULL)
|
||||||
|
relocation = (h->root.u.def.value
|
||||||
|
+ tsec->output_section->vma
|
||||||
|
+ tsec->output_offset);
|
||||||
|
else
|
||||||
|
relocation = 0;
|
||||||
|
|
||||||
if (opcode == 0xff)
|
if (opcode == 0xff)
|
||||||
{
|
{
|
||||||
/* We have "call/jmp *foo@GOTPCREL(%rip)". */
|
/* We have "call/jmp *foo@GOTPCREL(%rip)". */
|
||||||
@@ -2019,6 +2062,16 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
unsigned int disp;
|
unsigned int disp;
|
||||||
bfd_vma nop_offset;
|
bfd_vma nop_offset;
|
||||||
|
|
||||||
|
r_type = R_X86_64_PC32;
|
||||||
|
|
||||||
|
/* Skip if the converted relocation will overflow. */
|
||||||
|
howto = elf_x86_64_rtype_to_howto (abfd, r_type);
|
||||||
|
r = _bfd_final_link_relocate (howto, abfd, input_section,
|
||||||
|
contents, irel->r_offset,
|
||||||
|
relocation, raddend);
|
||||||
|
if (r == bfd_reloc_overflow)
|
||||||
|
return true;
|
||||||
|
|
||||||
/* Convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX to
|
/* Convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX to
|
||||||
R_X86_64_PC32. */
|
R_X86_64_PC32. */
|
||||||
modrm = bfd_get_8 (abfd, contents + roff - 1);
|
modrm = bfd_get_8 (abfd, contents + roff - 1);
|
||||||
@@ -2063,7 +2116,6 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
}
|
}
|
||||||
bfd_put_8 (abfd, nop, contents + nop_offset);
|
bfd_put_8 (abfd, nop, contents + nop_offset);
|
||||||
bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1);
|
bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1);
|
||||||
r_type = R_X86_64_PC32;
|
|
||||||
}
|
}
|
||||||
else if (r_type == R_X86_64_CODE_6_GOTPCRELX && opcode != 0x8b)
|
else if (r_type == R_X86_64_CODE_6_GOTPCRELX && opcode != 0x8b)
|
||||||
{
|
{
|
||||||
@@ -2104,6 +2156,14 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
overflow when sign-extending imm32 to 64 bits. */
|
overflow when sign-extending imm32 to 64 bits. */
|
||||||
r_type = evex[1] & 0x80 ? R_X86_64_32S : R_X86_64_32;
|
r_type = evex[1] & 0x80 ? R_X86_64_32S : R_X86_64_32;
|
||||||
|
|
||||||
|
/* Skip if the converted relocation will overflow. */
|
||||||
|
howto = elf_x86_64_rtype_to_howto (abfd, r_type);
|
||||||
|
r = _bfd_final_link_relocate (howto, abfd, input_section,
|
||||||
|
contents, irel->r_offset,
|
||||||
|
relocation, 0);
|
||||||
|
if (r == bfd_reloc_overflow)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (abs_relocation) /* Bogus; should be abs_symbol. */
|
if (abs_relocation) /* Bogus; should be abs_symbol. */
|
||||||
{
|
{
|
||||||
/* Check if R_X86_64_32S/R_X86_64_32 fits. */
|
/* Check if R_X86_64_32S/R_X86_64_32 fits. */
|
||||||
@@ -2189,6 +2249,15 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
opcode = 0x8d;
|
opcode = 0x8d;
|
||||||
r_type = R_X86_64_PC32;
|
r_type = R_X86_64_PC32;
|
||||||
|
|
||||||
|
/* Skip if the converted relocation will overflow. */
|
||||||
|
howto = elf_x86_64_rtype_to_howto (abfd, r_type);
|
||||||
|
r = _bfd_final_link_relocate (howto, abfd, input_section,
|
||||||
|
contents, irel->r_offset,
|
||||||
|
relocation,
|
||||||
|
raddend);
|
||||||
|
if (r == bfd_reloc_overflow)
|
||||||
|
return true;
|
||||||
|
|
||||||
/* For MOVRS move a possible REX prefix as necessary. */
|
/* For MOVRS move a possible REX prefix as necessary. */
|
||||||
if (movrs == 5)
|
if (movrs == 5)
|
||||||
bfd_put_8 (abfd, rex, contents + roff - 3);
|
bfd_put_8 (abfd, rex, contents + roff - 3);
|
||||||
@@ -2248,6 +2317,14 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|||||||
r_type = rex_w ? R_X86_64_32S : R_X86_64_32;
|
r_type = rex_w ? R_X86_64_32S : R_X86_64_32;
|
||||||
|
|
||||||
rewrite_modrm_rex:
|
rewrite_modrm_rex:
|
||||||
|
/* Skip if the converted relocation will overflow. */
|
||||||
|
howto = elf_x86_64_rtype_to_howto (abfd, r_type);
|
||||||
|
r = _bfd_final_link_relocate (howto, abfd, input_section,
|
||||||
|
contents, irel->r_offset,
|
||||||
|
relocation, 0);
|
||||||
|
if (r == bfd_reloc_overflow)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (abs_relocation)
|
if (abs_relocation)
|
||||||
{
|
{
|
||||||
/* Check if R_X86_64_32S/R_X86_64_32 fits. */
|
/* Check if R_X86_64_32S/R_X86_64_32 fits. */
|
||||||
@@ -2465,9 +2542,9 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||||||
&& (h == NULL || h->type != STT_GNU_IFUNC))
|
&& (h == NULL || h->type != STT_GNU_IFUNC))
|
||||||
{
|
{
|
||||||
Elf_Internal_Rela *irel = (Elf_Internal_Rela *) rel;
|
Elf_Internal_Rela *irel = (Elf_Internal_Rela *) rel;
|
||||||
if (!elf_x86_64_convert_load_reloc (abfd, contents, &r_type,
|
if (!elf_x86_64_convert_load_reloc (abfd, sec, contents,
|
||||||
irel, h, &converted_reloc,
|
&r_type, irel, h,
|
||||||
info))
|
&converted_reloc, info))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
if (converted_reloc)
|
if (converted_reloc)
|
||||||
|
|||||||
@@ -73,3 +73,44 @@ EOF
|
|||||||
LDEMUL_BEFORE_PARSE=elf_x86_64_before_parse
|
LDEMUL_BEFORE_PARSE=elf_x86_64_before_parse
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case x${OUTPUT_FORMAT} in
|
||||||
|
x*x86-64*)
|
||||||
|
fragment <<EOF
|
||||||
|
|
||||||
|
static void
|
||||||
|
elf_x86_64_before_allocation (void)
|
||||||
|
{
|
||||||
|
if (!bfd_link_relocatable (&link_info)
|
||||||
|
&& is_elf_hash_table (link_info.hash)
|
||||||
|
&& expld.phase != lang_mark_phase_enum)
|
||||||
|
{
|
||||||
|
struct elf_link_hash_table *htab = elf_hash_table (&link_info);
|
||||||
|
/* Run one_lang_size_sections_pass to estimate the output section
|
||||||
|
layout before sizing dynamic sections. */
|
||||||
|
expld.dataseg.phase = exp_seg_none;
|
||||||
|
expld.phase = lang_mark_phase_enum;
|
||||||
|
/* NB: Exclude linker created GOT setions when estimating output
|
||||||
|
section layout as sizing dynamic sections may change linker
|
||||||
|
created GOT sections. */
|
||||||
|
if (htab->sgot != NULL)
|
||||||
|
htab->sgot->flags |= SEC_EXCLUDE;
|
||||||
|
if (htab->sgotplt != NULL)
|
||||||
|
htab->sgotplt->flags |= SEC_EXCLUDE;
|
||||||
|
one_lang_size_sections_pass (NULL, false);
|
||||||
|
/* Restore linker created GOT setions. */
|
||||||
|
if (htab->sgot != NULL)
|
||||||
|
htab->sgot->flags &= ~SEC_EXCLUDE;
|
||||||
|
if (htab->sgotplt != NULL)
|
||||||
|
htab->sgotplt->flags &= ~SEC_EXCLUDE;
|
||||||
|
lang_reset_memory_regions ();
|
||||||
|
}
|
||||||
|
|
||||||
|
gld${EMULATION_NAME}_before_allocation ();
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
LDEMUL_BEFORE_ALLOCATION=elf_x86_64_before_allocation
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
#source: pr19609-2.s
|
#source: pr19609-2.s
|
||||||
#as: --64 -mrelax-relocations=yes
|
#as: --64 -mrelax-relocations=yes
|
||||||
#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --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
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
#source: pr19609-2.s
|
#source: pr19609-2.s
|
||||||
#as: --x32 -mrelax-relocations=yes
|
#as: --x32 -mrelax-relocations=yes
|
||||||
#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
#ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
70000000 <_start>:
|
||||||
|
[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} cmp -?0x[a-f0-9]+\(%rip\),%rax # .*
|
||||||
|
#pass
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
#source: pr19609-4.s
|
#source: pr19609-4.s
|
||||||
#as: --64 -mrelax-relocations=yes
|
#as: --64 -mrelax-relocations=yes
|
||||||
#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
#ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+70000000 <_start>:
|
||||||
|
[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov [-]?0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x1000>
|
||||||
|
[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov [-]?0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_start\+0x1000>
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
#source: pr19609-5.s
|
#source: pr19609-5.s
|
||||||
#as: --64 -mrelax-relocations=yes
|
#as: --64 -mrelax-relocations=yes
|
||||||
#ld: -melf_x86_64 -Ttext=0x80000000
|
#ld: -melf_x86_64 -Ttext=0x80000000
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'bar'; relink with --no-relax
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
[a-f0-9]+ <_start>:
|
||||||
|
[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*>
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
#source: pr19609-7.s
|
#source: pr19609-7.s
|
||||||
#as: --64 -mrelax-relocations=yes
|
#as: --64 -mrelax-relocations=yes
|
||||||
#ld: -melf_x86_64 -Ttext=0x80000000
|
#ld: -melf_x86_64 -Ttext=0x80000000 -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
[a-f0-9]+ <_start>:
|
||||||
|
[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x1000>
|
||||||
|
#pass
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
#source: pr19609-7.s
|
#source: pr19609-7.s
|
||||||
#as: --x32 -mrelax-relocations=yes
|
#as: --x32 -mrelax-relocations=yes
|
||||||
#ld: -melf32_x86_64 -Ttext=0x80000000
|
#ld: -melf32_x86_64 -Ttext=0x80000000 -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
[a-f0-9]+ <_start>:
|
||||||
|
[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x1000>
|
||||||
|
#pass
|
||||||
|
|||||||
24
ld/testsuite/ld-x86-64/pr32591-1.s
Normal file
24
ld/testsuite/ld-x86-64/pr32591-1.s
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
.section .text.foo,"ax"
|
||||||
|
.globl _foo
|
||||||
|
.type _foo, @function
|
||||||
|
_foo:
|
||||||
|
movl __start_data@GOTPCREL(%rip), %eax
|
||||||
|
addq foo_1@GOTPCREL(%rip), %rax
|
||||||
|
addq foo@GOTPCREL(%rip), %rax
|
||||||
|
|
||||||
|
.section .text,"ax"
|
||||||
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
|
_start:
|
||||||
|
movl __stop_data@GOTPCREL(%rip), %eax
|
||||||
|
movq __stop_data@GOTPCREL(%rip), %rax
|
||||||
|
movq __stop_data@GOTPCREL(%rip), %rax
|
||||||
|
movl __stop_data@GOTPCREL(%rip), %eax
|
||||||
|
|
||||||
|
.section foo,"aw",@progbits
|
||||||
|
.space 1
|
||||||
|
foo_1:
|
||||||
|
.space 1
|
||||||
|
|
||||||
|
.section data,"aw",@progbits
|
||||||
|
.space 13
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1a-x32.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1a-x32.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-1a.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
00100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax
|
||||||
|
100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000>
|
||||||
|
10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
|
200006: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax
|
||||||
|
20000d: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax
|
||||||
|
200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1a.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1a.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-1a.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
0000000000100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax
|
||||||
|
100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000>
|
||||||
|
10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0000000000200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
|
200006: 48 8b 05 fb ff 0f 00 mov 0xffffb\(%rip\),%rax # 300008 <_start\+0x100008>
|
||||||
|
20000d: 48 8b 05 f4 ff 0f 00 mov 0xffff4\(%rip\),%rax # 300008 <_start\+0x100008>
|
||||||
|
200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
7
ld/testsuite/ld-x86-64/pr32591-1a.t
Normal file
7
ld/testsuite/ld-x86-64/pr32591-1a.t
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text.foo 0x100000 : { *(.text.foo) }
|
||||||
|
.text 0x200000 : { *(.text) }
|
||||||
|
.got 0x300000 : { *(.got) }
|
||||||
|
foo 0x7fffffff : { *(foo) }
|
||||||
|
data 0x80200000 : { *(data) }
|
||||||
|
}
|
||||||
27
ld/testsuite/ld-x86-64/pr32591-1b-x32.d
Normal file
27
ld/testsuite/ld-x86-64/pr32591-1b-x32.d
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-1b.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
00100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax
|
||||||
|
100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000>
|
||||||
|
10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
001ff000 <_start-0x1000>:
|
||||||
|
1ff000: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\)
|
||||||
|
#...
|
||||||
|
1ffffa: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\)
|
||||||
|
|
||||||
|
00200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
|
200006: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax
|
||||||
|
20000d: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax
|
||||||
|
200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
27
ld/testsuite/ld-x86-64/pr32591-1b.d
Normal file
27
ld/testsuite/ld-x86-64/pr32591-1b.d
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-1b.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
0000000000100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax
|
||||||
|
100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000>
|
||||||
|
10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000001ff000 <_start-0x1000>:
|
||||||
|
1ff000: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\)
|
||||||
|
#...
|
||||||
|
1ffffa: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\)
|
||||||
|
|
||||||
|
0000000000200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
|
200006: 48 8b 05 fb ff 0f 00 mov 0xffffb\(%rip\),%rax # 300008 <_start\+0x100008>
|
||||||
|
20000d: 48 8b 05 f4 ff 0f 00 mov 0xffff4\(%rip\),%rax # 300008 <_start\+0x100008>
|
||||||
|
200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax
|
||||||
7
ld/testsuite/ld-x86-64/pr32591-1b.t
Normal file
7
ld/testsuite/ld-x86-64/pr32591-1b.t
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text.foo 0x100000 : { *(.text.foo) }
|
||||||
|
.text 0x1ff000 : { . = . + 0x1000 ; *(.text) }
|
||||||
|
.got 0x300000 : { *(.got) }
|
||||||
|
foo 0x7fffffff : { *(foo) }
|
||||||
|
data 0x80200000 : { *(data) }
|
||||||
|
}
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1c-x32.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1c-x32.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-1c.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
00100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 40 00 mov \$0x400000,%eax
|
||||||
|
100006: 48 81 c0 0e 00 40 00 add \$0x40000e,%rax
|
||||||
|
10000d: 48 81 c0 0d 00 40 00 add \$0x40000d,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 40 00 mov \$0x40000d,%eax
|
||||||
|
200006: 40 c7 c0 0d 00 40 00 rex mov \$0x40000d,%eax
|
||||||
|
20000d: 40 c7 c0 0d 00 40 00 rex mov \$0x40000d,%eax
|
||||||
|
200014: c7 c0 0d 00 40 00 mov \$0x40000d,%eax
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1c.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1c.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-1c.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
0000000000100000 <_foo>:
|
||||||
|
100000: c7 c0 00 00 40 00 mov \$0x400000,%eax
|
||||||
|
100006: 48 81 c0 0e 00 40 00 add \$0x40000e,%rax
|
||||||
|
10000d: 48 81 c0 0d 00 40 00 add \$0x40000d,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0000000000200000 <_start>:
|
||||||
|
200000: c7 c0 0d 00 40 00 mov \$0x40000d,%eax
|
||||||
|
200006: 48 c7 c0 0d 00 40 00 mov \$0x40000d,%rax
|
||||||
|
20000d: 48 c7 c0 0d 00 40 00 mov \$0x40000d,%rax
|
||||||
|
200014: c7 c0 0d 00 40 00 mov \$0x40000d,%eax
|
||||||
6
ld/testsuite/ld-x86-64/pr32591-1c.t
Normal file
6
ld/testsuite/ld-x86-64/pr32591-1c.t
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text.foo 0x100000 : { *(.text.foo) }
|
||||||
|
.text 0x200000 : { *(.text) }
|
||||||
|
.got 0x300000 : { *(.got) }
|
||||||
|
data 0x400000 : { *(data) }
|
||||||
|
}
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1d-x32.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1d-x32.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-1d.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
00002000 <_foo>:
|
||||||
|
2000: c7 c0 00 10 00 80 mov \$0x80001000,%eax
|
||||||
|
2006: 48 03 05 f3 1f 00 00 add 0x1ff3\(%rip\),%rax # 4000 <_start\+0x1000>
|
||||||
|
200d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00003000 <_start>:
|
||||||
|
3000: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax
|
||||||
|
3006: 40 c7 c0 0d 10 00 80 rex mov \$0x8000100d,%eax
|
||||||
|
300d: 40 c7 c0 0d 10 00 80 rex mov \$0x8000100d,%eax
|
||||||
|
3014: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax
|
||||||
22
ld/testsuite/ld-x86-64/pr32591-1d.d
Normal file
22
ld/testsuite/ld-x86-64/pr32591-1d.d
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#source: pr32591-1.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-1d.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text.foo:
|
||||||
|
|
||||||
|
0000000000002000 <_foo>:
|
||||||
|
2000: c7 c0 00 10 00 80 mov \$0x80001000,%eax
|
||||||
|
2006: 48 03 05 f3 1f 00 00 add 0x1ff3\(%rip\),%rax # 4000 <_start\+0x1000>
|
||||||
|
200d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0000000000003000 <_start>:
|
||||||
|
3000: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax
|
||||||
|
3006: 48 8b 05 fb 0f 00 00 mov 0xffb\(%rip\),%rax # 4008 <_start\+0x1008>
|
||||||
|
300d: 48 8b 05 f4 0f 00 00 mov 0xff4\(%rip\),%rax # 4008 <_start\+0x1008>
|
||||||
|
3014: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax
|
||||||
7
ld/testsuite/ld-x86-64/pr32591-1d.t
Normal file
7
ld/testsuite/ld-x86-64/pr32591-1d.t
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text.foo 0x02000 : { *(.text.foo) }
|
||||||
|
.text 0x3000 : { *(.text) }
|
||||||
|
.got 0x4000 : { *(.got) }
|
||||||
|
foo 0x7fffffff : { *(foo) }
|
||||||
|
data 0x80001000 : { *(data) }
|
||||||
|
}
|
||||||
12
ld/testsuite/ld-x86-64/pr32591-2-x32.d
Normal file
12
ld/testsuite/ld-x86-64/pr32591-2-x32.d
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#source: pr32591-2.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-2.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
ffff0000 <_start>:
|
||||||
|
ffff0000: 40 c7 c0 08 00 ff ff rex mov \$0xffff0008,%eax
|
||||||
12
ld/testsuite/ld-x86-64/pr32591-2.d
Normal file
12
ld/testsuite/ld-x86-64/pr32591-2.d
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#source: pr32591-2.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-2.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000ffff0000 <_start>:
|
||||||
|
ffff0000: 48 8b 05 09 00 00 00 mov 0x9\(%rip\),%rax # ffff0010 <__stack_chk_guard\+0x8>
|
||||||
13
ld/testsuite/ld-x86-64/pr32591-2.s
Normal file
13
ld/testsuite/ld-x86-64/pr32591-2.s
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
.text
|
||||||
|
.p2align 4
|
||||||
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
|
_start:
|
||||||
|
movq __stack_chk_guard@GOTPCREL(%rip), %rax
|
||||||
|
.globl __stack_chk_guard
|
||||||
|
.section .rodata
|
||||||
|
.align 8
|
||||||
|
.type __stack_chk_guard, @object
|
||||||
|
__stack_chk_guard:
|
||||||
|
.quad -1
|
||||||
|
.section .note.GNU-stack,"",@progbits
|
||||||
4
ld/testsuite/ld-x86-64/pr32591-2.t
Normal file
4
ld/testsuite/ld-x86-64/pr32591-2.t
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text 0xffff0000 : { *(.text*) }
|
||||||
|
.rodata : AT(ADDR(".rodata") - 0xffff0000) { *(.rodata*) }
|
||||||
|
}
|
||||||
13
ld/testsuite/ld-x86-64/pr32591-3-x32.d
Normal file
13
ld/testsuite/ld-x86-64/pr32591-3-x32.d
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#source: pr32591-3.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -T pr32591-3.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
f0000000 <_start>:
|
||||||
|
f0000000: 40 c7 c0 08 00 30 ff rex mov \$0xff300008,%eax
|
||||||
|
f0000007: 48 03 1d f2 ff 2f 0f add 0xf2ffff2\(%rip\),%rbx # ff300000 <_start\+0xf300000>
|
||||||
13
ld/testsuite/ld-x86-64/pr32591-3.d
Normal file
13
ld/testsuite/ld-x86-64/pr32591-3.d
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#source: pr32591-3.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -T pr32591-3.t -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000f0000000 <_start>:
|
||||||
|
f0000000: 48 8b 05 f9 ff 2f 0f mov 0xf2ffff9\(%rip\),%rax # ff300000 <_start\+0xf300000>
|
||||||
|
f0000007: 48 03 1d f2 ff 2f 0f add 0xf2ffff2\(%rip\),%rbx # ff300000 <_start\+0xf300000>
|
||||||
7
ld/testsuite/ld-x86-64/pr32591-3.s
Normal file
7
ld/testsuite/ld-x86-64/pr32591-3.s
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
|
_start:
|
||||||
|
movq foo@GOTPCREL(%rip), %rax
|
||||||
|
addq foo@GOTPCREL(%rip), %rbx
|
||||||
|
.size _start, .-_start
|
||||||
5
ld/testsuite/ld-x86-64/pr32591-3.t
Normal file
5
ld/testsuite/ld-x86-64/pr32591-3.t
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SECTIONS {
|
||||||
|
.text 0xf0000000 : { *(.text) }
|
||||||
|
.got 0xff300000 : { *(.got) }
|
||||||
|
foo = .;
|
||||||
|
}
|
||||||
13
ld/testsuite/ld-x86-64/pr32591-4-x32.d
Normal file
13
ld/testsuite/ld-x86-64/pr32591-4-x32.d
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#source: pr32591-4.s
|
||||||
|
#as: --x32 -mrelax-relocations=yes
|
||||||
|
#ld: -melf32_x86_64 -Ttext-segment=0xf0000000 -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
f0001000 <_start>:
|
||||||
|
f0001000: 40 c7 c0 00 00 00 f0 rex mov \$0xf0000000,%eax
|
||||||
|
f0001007: 48 03 1d f2 0f 00 00 add 0xff2\(%rip\),%rbx # f0002000 <_start\+0x1000>
|
||||||
13
ld/testsuite/ld-x86-64/pr32591-4.d
Normal file
13
ld/testsuite/ld-x86-64/pr32591-4.d
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#source: pr32591-4.s
|
||||||
|
#as: --64 -mrelax-relocations=yes
|
||||||
|
#ld: -melf_x86_64 -Ttext-segment=0xf0000000 -z max-page-size=0x1000 -z separate-code --no-rosegment
|
||||||
|
#objdump: -dw
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000f0001000 <_start>:
|
||||||
|
f0001000: 48 8b 05 f9 0f 00 00 mov 0xff9\(%rip\),%rax # f0002000 <_start\+0x1000>
|
||||||
|
f0001007: 48 03 1d f2 0f 00 00 add 0xff2\(%rip\),%rbx # f0002000 <_start\+0x1000>
|
||||||
7
ld/testsuite/ld-x86-64/pr32591-4.s
Normal file
7
ld/testsuite/ld-x86-64/pr32591-4.s
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
|
_start:
|
||||||
|
movq __ehdr_start@GOTPCREL(%rip), %rax
|
||||||
|
addq __ehdr_start@GOTPCREL(%rip), %rbx
|
||||||
|
.size _start, .-_start
|
||||||
@@ -544,6 +544,20 @@ run_dump_test "tlsdesc4"
|
|||||||
run_dump_test "tlsdesc5"
|
run_dump_test "tlsdesc5"
|
||||||
run_dump_test "pr32191"
|
run_dump_test "pr32191"
|
||||||
run_dump_test "pr32191-x32"
|
run_dump_test "pr32191-x32"
|
||||||
|
run_dump_test "pr32591-1a"
|
||||||
|
run_dump_test "pr32591-1a-x32"
|
||||||
|
run_dump_test "pr32591-1b"
|
||||||
|
run_dump_test "pr32591-1b-x32"
|
||||||
|
run_dump_test "pr32591-1c"
|
||||||
|
run_dump_test "pr32591-1c-x32"
|
||||||
|
run_dump_test "pr32591-1d"
|
||||||
|
run_dump_test "pr32591-1d-x32"
|
||||||
|
run_dump_test "pr32591-2"
|
||||||
|
run_dump_test "pr32591-2-x32"
|
||||||
|
run_dump_test "pr32591-3"
|
||||||
|
run_dump_test "pr32591-3-x32"
|
||||||
|
run_dump_test "pr32591-4"
|
||||||
|
run_dump_test "pr32591-4-x32"
|
||||||
|
|
||||||
if { ![skip_sframe_tests] } {
|
if { ![skip_sframe_tests] } {
|
||||||
run_dump_test "sframe-simple-1"
|
run_dump_test "sframe-simple-1"
|
||||||
|
|||||||
Reference in New Issue
Block a user