diff options
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 6 | ||||
| -rw-r--r-- | llvm/tools/llvm-objcopy/ObjcopyOpts.td | 19 | ||||
| -rw-r--r-- | llvm/tools/llvm-objcopy/StripOpts.td | 7 |
3 files changed, 17 insertions, 15 deletions
diff --git a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp index cbf6a3d2777..250eeea1c81 100644 --- a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp @@ -403,7 +403,7 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj, if (Config.StripSections) { RemovePred = [RemovePred](const SectionBase &Sec) { - return RemovePred(Sec) || (Sec.Flags & SHF_ALLOC) == 0; + return RemovePred(Sec) || Sec.ParentSegment == nullptr; }; } @@ -419,7 +419,7 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj, return true; if (&Sec == Obj.SectionNames) return false; - return (Sec.Flags & SHF_ALLOC) == 0; + return (Sec.Flags & SHF_ALLOC) == 0 && Sec.ParentSegment == nullptr; }; if (Config.StripAll) @@ -430,6 +430,8 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj, return false; if (StringRef(Sec.Name).startswith(".gnu.warning")) return false; + if (Sec.ParentSegment != nullptr) + return false; return (Sec.Flags & SHF_ALLOC) == 0; }; diff --git a/llvm/tools/llvm-objcopy/ObjcopyOpts.td b/llvm/tools/llvm-objcopy/ObjcopyOpts.td index 44fd01cf4ab..a5f7119e328 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOpts.td +++ b/llvm/tools/llvm-objcopy/ObjcopyOpts.td @@ -103,10 +103,9 @@ defm set_section_flags "rom, share, contents, merge, strings.">, MetaVarName<"section=flag1[,flag2,...]">; -def strip_all - : Flag<["-", "--"], "strip-all">, - HelpText< - "Remove non-allocated sections other than .gnu.warning* sections">; +def strip_all : Flag<["-", "--"], "strip-all">, + HelpText<"Remove non-allocated sections outside segments. " + ".gnu.warning* sections are not removed">; def S : Flag<["-"], "S">, Alias<strip_all>; def strip_all_gnu : Flag<["-", "--"], "strip-all-gnu">, HelpText<"Compatible with GNU objcopy's --strip-all">; @@ -116,13 +115,15 @@ def g : Flag<["-"], "g">, Alias<strip_debug>, HelpText<"Alias for --strip-debug">; def strip_dwo : Flag<["-", "--"], "strip-dwo">, HelpText<"Remove all DWARF .dwo sections from file">; -def strip_sections : Flag<["-", "--"], "strip-sections">, - HelpText<"Remove all section headers">; -def strip_non_alloc : Flag<["-", "--"], "strip-non-alloc">, - HelpText<"Remove all non-allocated sections">; +def strip_sections + : Flag<["-", "--"], "strip-sections">, + HelpText<"Remove all section headers and all sections not in segments">; +def strip_non_alloc + : Flag<["-", "--"], "strip-non-alloc">, + HelpText<"Remove all non-allocated sections outside segments">; def strip_unneeded : Flag<["-", "--"], "strip-unneeded">, HelpText<"Remove all symbols not needed by relocations">; -defm strip_unneeded_symbol +defm strip_unneeded_symbol : Eq<"strip-unneeded-symbol", "Remove symbol <symbol> if it is not needed by relocations">, MetaVarName<"symbol">; diff --git a/llvm/tools/llvm-objcopy/StripOpts.td b/llvm/tools/llvm-objcopy/StripOpts.td index c3f351992a0..40b043a7630 100644 --- a/llvm/tools/llvm-objcopy/StripOpts.td +++ b/llvm/tools/llvm-objcopy/StripOpts.td @@ -31,10 +31,9 @@ def preserve_dates : Flag<["-", "--"], "preserve-dates">, HelpText<"Preserve access and modification timestamps">; def p : Flag<["-"], "p">, Alias<preserve_dates>; -def strip_all - : Flag<["-", "--"], "strip-all">, - HelpText< - "Remove non-allocated sections other than .gnu.warning* sections">; +def strip_all : Flag<["-", "--"], "strip-all">, + HelpText<"Remove non-allocated sections outside segments. " + ".gnu.warning* sections are not removed">; def s : Flag<["-"], "s">, Alias<strip_all>; def strip_all_gnu : Flag<["-", "--"], "strip-all-gnu">, |

