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

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 20 06:50:01 PDT 2018


grimar created this revision.
grimar added reviewers: JDevlieghere, dblaikie, aprantl, echristo.
Herald added subscribers: kristof.beyls, arichardson, emaste.
Herald added a reviewer: javed.absar.
Herald added a reviewer: espindola.

Currently .dwo sections are usually emitted to .dwo file.
I am working on a single file split case, which is mentioned in
the DWARF5 spec. It says that

"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.
I believe it is not harmful to always set it for .dwo sections.
That is what this patch does.


https://reviews.llvm.org/D52303

Files:
  lib/MC/MCObjectFileInfo.cpp
  test/MC/ELF/exclude-debug-dwo.s


Index: test/MC/ELF/exclude-debug-dwo.s
===================================================================
--- test/MC/ELF/exclude-debug-dwo.s
+++ test/MC/ELF/exclude-debug-dwo.s
@@ -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
Index: lib/MC/MCObjectFileInfo.cpp
===================================================================
--- lib/MC/MCObjectFileInfo.cpp
+++ lib/MC/MCObjectFileInfo.cpp
@@ -435,22 +435,22 @@
 
   // 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 =


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52303.166284.patch
Type: text/x-patch
Size: 2753 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180920/e9cf87bb/attachment.bin>


More information about the llvm-commits mailing list