[PATCH] D37561: [ELF] - Don't crash when --emit-relocs is used with --gc-sections

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 15 14:01:05 PDT 2017


ruiu added inline comments.


================
Comment at: ELF/InputSection.cpp:86-88
+  Live = !Config->GcSections;
+  if (!(Flags & SHF_ALLOC))
+    Live = Type != SHT_REL && Type != SHT_RELA;
----------------
grimar wrote:
> ruiu wrote:
> > This is too magical that it needs comment.
> Oh, I am sorry, looks I put `=` instead of `|=` at last minute by mistake.
> Fixed, added comment.
It is better to define a helper function. You can use this.

  // Return true if a section with given section flags is live (will never be
  // GCed) by default. If a section can be GCed, this function returns false.
  static bool isLiveByDefault(uint64_t Flags, uint32_t Type) {
    // If GC is enabled, all memory-mapped sections are subject of GC.
    if (!Config->GcSections)
      return true;
    if (Flags & SHF_ALLOC)
      return false;
  
    // Besides that, relocation sections can also be GCed because their
    // relocation target sections may be GCed. This doesn't really matter
    // in most cases because the linker usually consumes relocation
    // sections instead of emitting them, but -emit-reloc needs this.
    return Type != SHT_REL && Type != SHT_RELA;
  }


https://reviews.llvm.org/D37561





More information about the llvm-commits mailing list