ELF DWARF in PE output
* elf.c (bfd_elf_generic_reloc): Make references between debug sections use section relative values.
This commit is contained in:
parent
ccdc02ed07
commit
2dfa8341e0
@ -1,3 +1,9 @@
|
|||||||
|
2021-03-10 Alan Modra <amodra@gmail.com>
|
||||||
|
Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* elf.c (bfd_elf_generic_reloc): Make references between debug
|
||||||
|
sections use section relative values.
|
||||||
|
|
||||||
2021-03-09 Jan Beulich <jbeulich@suse.com>
|
2021-03-09 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Diagnose out of range RVA.
|
* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Diagnose out of range RVA.
|
||||||
|
17
bfd/elf.c
17
bfd/elf.c
@ -1302,8 +1302,7 @@ const char *const bfd_elf_section_type_names[] =
|
|||||||
change anything about the way the reloc is handled, since it will
|
change anything about the way the reloc is handled, since it will
|
||||||
all be done at final link time. Rather than put special case code
|
all be done at final link time. Rather than put special case code
|
||||||
into bfd_perform_relocation, all the reloc types use this howto
|
into bfd_perform_relocation, all the reloc types use this howto
|
||||||
function. It just short circuits the reloc if producing
|
function, or should call this function for relocatable output. */
|
||||||
relocatable output against an external symbol. */
|
|
||||||
|
|
||||||
bfd_reloc_status_type
|
bfd_reloc_status_type
|
||||||
bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
||||||
@ -1323,6 +1322,20 @@ bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
|||||||
return bfd_reloc_ok;
|
return bfd_reloc_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* In some cases the relocation should be treated as output section
|
||||||
|
relative, as when linking ELF DWARF into PE COFF. Many ELF
|
||||||
|
targets lack section relative relocations and instead use
|
||||||
|
ordinary absolute relocations for references between DWARF
|
||||||
|
sections. That is arguably a bug in those targets but it happens
|
||||||
|
to work for the usual case of linking to non-loaded ELF debug
|
||||||
|
sections with VMAs forced to zero. PE COFF on the other hand
|
||||||
|
doesn't allow a section VMA of zero. */
|
||||||
|
if (output_bfd == NULL
|
||||||
|
&& !reloc_entry->howto->pc_relative
|
||||||
|
&& (symbol->section->flags & SEC_DEBUGGING) != 0
|
||||||
|
&& (input_section->flags & SEC_DEBUGGING) != 0)
|
||||||
|
reloc_entry->addend -= symbol->section->output_section->vma;
|
||||||
|
|
||||||
return bfd_reloc_continue;
|
return bfd_reloc_continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user