[lib/MC] - Set SHF_EXCLUDE flag for .dwo sections.

DWARF5 spec says about single file split case:

"The sections that do not require relocation, however, can be written
to the relocatable object (.o) file but ignored by the
the linker or they can be written to a separate DWARF object (.dwo) file
that need not be accessed by the linker."

Nice way to make linker to ignore them is to set SHF_EXCLUDE flag.
It seems to be not harmful to always set it for .dwo sections.
That is what this patch does.

Differential revision: https://reviews.llvm.org/D52303

llvm-svn: 342800
This commit is contained in:
George Rimar 2018-09-22 07:36:20 +00:00
parent 7c9648ff89
commit ce95ac6490
2 changed files with 43 additions and 11 deletions

View File

@ -435,22 +435,22 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
// Fission Sections
DwarfInfoDWOSection =
Ctx->getELFSection(".debug_info.dwo", DebugSecType, 0);
Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
DwarfTypesDWOSection =
Ctx->getELFSection(".debug_types.dwo", DebugSecType, 0);
Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
DwarfAbbrevDWOSection =
Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, 0);
DwarfStrDWOSection =
Ctx->getELFSection(".debug_str.dwo", DebugSecType,
ELF::SHF_MERGE | ELF::SHF_STRINGS, 1, "");
Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
DwarfStrDWOSection = Ctx->getELFSection(
".debug_str.dwo", DebugSecType,
ELF::SHF_MERGE | ELF::SHF_STRINGS | ELF::SHF_EXCLUDE, 1, "");
DwarfLineDWOSection =
Ctx->getELFSection(".debug_line.dwo", DebugSecType, 0);
Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
DwarfLocDWOSection =
Ctx->getELFSection(".debug_loc.dwo", DebugSecType, 0);
DwarfStrOffDWOSection =
Ctx->getELFSection(".debug_str_offsets.dwo", DebugSecType, 0);
Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
DebugSecType, ELF::SHF_EXCLUDE);
DwarfRnglistsDWOSection =
Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, 0);
Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
// DWP Sections
DwarfCUIndexSection =

View File

@ -0,0 +1,32 @@
# RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o %t.o
# RUN: llvm-readobj -s --elf-output-style=GNU %t.o | FileCheck %s
## Check we add SHF_EXCLUDE flag for .dwo debug sections.
# CHECK: .debug_info.dwo {{.*}} E
# CHECK: .debug_types.dwo {{.*}} E
# CHECK: .debug_abbrev.dwo {{.*}} E
# CHECK: .debug_str.dwo {{.*}} EMS
# CHECK: .debug_line.dwo {{.*}} E
# CHECK: .debug_loc.dwo {{.*}} E
# CHECK: .debug_str_offsets.dwo {{.*}} E
.section .debug_info.dwo
nop
.section .debug_types.dwo
nop
.section .debug_abbrev.dwo
nop
.section .debug_str.dwo
nop
.section .debug_line.dwo
nop
.section .debug_loc.dwo
nop
.section .debug_str_offsets.dwo
nop