elf: Set rel_from_abs to 1 for __ehdr_start
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 13 Nov 2020 23:44:35 +0000 (15:44 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 13 Nov 2020 23:44:47 +0000 (15:44 -0800)
commitcbd5b99cce073273f668b154d4514e8e7e7ccc51
treeed448b47d23eaaa211ed2e56fde87c3f8be6a011
parent25f4c26276594b0afdb7709df668a90858e399fa
elf: Set rel_from_abs to 1 for __ehdr_start

bfdlink.h has

  /* Symbol will be converted from absolute to section-relative.  Set for
     symbols defined by a script from "dot" (also SEGMENT_START or ORIGIN)
     outside of an output section statement.  */
  unsigned int rel_from_abs : 1;

linker.c has

.{* Return TRUE if the symbol described by a linker hash entry H
.   is going to be absolute.  Linker-script defined symbols can be
.   converted from absolute to section-relative ones late in the
.   link.  Use this macro to correctly determine whether the symbol
.   will actually end up absolute in output.  *}
.#define bfd_is_abs_symbol(H) \
.  (((H)->type == bfd_link_hash_defined \
.    || (H)->type == bfd_link_hash_defweak) \
.   && bfd_is_abs_section ((H)->u.def.section) \
.   && !(H)->rel_from_abs)
.

Set rel_from_abs to 1 for __ehdr_start which will be converted from
absolute to section-relative in assign_file_positions_for_load_sections.

PR ld/26869
* ldelf.c (ldelf_before_allocation): Set rel_from_abs to 1 for
__ehdr_start.
* testsuite/ld-i386/i386.exp: Run pr26869.
* testsuite/ld-i386/pr26869.d: New file.
* testsuite/ld-i386/pr26869.s: Likewise.
ld/ChangeLog
ld/ldelf.c
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/pr26869.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr26869.s [new file with mode: 0644]