xref: /freebsd-src/contrib/llvm-project/llvm/lib/ObjCopy/ConfigManager.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
181ad6265SDimitry Andric //===- ConfigManager.cpp --------------------------------------------------===//
281ad6265SDimitry Andric //
381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
681ad6265SDimitry Andric //
781ad6265SDimitry Andric //===----------------------------------------------------------------------===//
881ad6265SDimitry Andric 
981ad6265SDimitry Andric #include "llvm/ObjCopy/ConfigManager.h"
1081ad6265SDimitry Andric #include "llvm/Support/Errc.h"
1181ad6265SDimitry Andric #include "llvm/Support/Error.h"
1281ad6265SDimitry Andric 
1381ad6265SDimitry Andric namespace llvm {
1481ad6265SDimitry Andric namespace objcopy {
1581ad6265SDimitry Andric 
1681ad6265SDimitry Andric Expected<const COFFConfig &> ConfigManager::getCOFFConfig() const {
1781ad6265SDimitry Andric   if (!Common.SplitDWO.empty() || !Common.SymbolsPrefix.empty() ||
18*0fca6ea1SDimitry Andric       !Common.SymbolsPrefixRemove.empty() || !Common.SymbolsToSkip.empty() ||
1906c3fb27SDimitry Andric       !Common.AllocSectionsPrefix.empty() || !Common.KeepSection.empty() ||
2006c3fb27SDimitry Andric       !Common.SymbolsToGlobalize.empty() || !Common.SymbolsToKeep.empty() ||
2106c3fb27SDimitry Andric       !Common.SymbolsToLocalize.empty() || !Common.SymbolsToWeaken.empty() ||
2206c3fb27SDimitry Andric       !Common.SymbolsToKeepGlobal.empty() || !Common.SectionsToRename.empty() ||
2306c3fb27SDimitry Andric       !Common.SetSectionAlignment.empty() || !Common.SetSectionType.empty() ||
2406c3fb27SDimitry Andric       Common.ExtractDWO || Common.PreserveDates || Common.StripDWO ||
2506c3fb27SDimitry Andric       Common.StripNonAlloc || Common.StripSections || Common.Weaken ||
2606c3fb27SDimitry Andric       Common.DecompressDebugSections ||
275f757f3fSDimitry Andric       Common.DiscardMode == DiscardType::Locals ||
28*0fca6ea1SDimitry Andric       !Common.SymbolsToAdd.empty() || Common.GapFill != 0 ||
29*0fca6ea1SDimitry Andric       Common.PadTo != 0 || Common.ChangeSectionLMAValAll != 0)
3081ad6265SDimitry Andric     return createStringError(llvm::errc::invalid_argument,
3181ad6265SDimitry Andric                              "option is not supported for COFF");
3281ad6265SDimitry Andric 
3381ad6265SDimitry Andric   return COFF;
3481ad6265SDimitry Andric }
3581ad6265SDimitry Andric 
3681ad6265SDimitry Andric Expected<const MachOConfig &> ConfigManager::getMachOConfig() const {
3781ad6265SDimitry Andric   if (!Common.SplitDWO.empty() || !Common.SymbolsPrefix.empty() ||
38*0fca6ea1SDimitry Andric       !Common.SymbolsPrefixRemove.empty() || !Common.SymbolsToSkip.empty() ||
3981ad6265SDimitry Andric       !Common.AllocSectionsPrefix.empty() || !Common.KeepSection.empty() ||
4081ad6265SDimitry Andric       !Common.SymbolsToGlobalize.empty() || !Common.SymbolsToKeep.empty() ||
415f757f3fSDimitry Andric       !Common.SymbolsToLocalize.empty() ||
4281ad6265SDimitry Andric       !Common.SymbolsToKeepGlobal.empty() || !Common.SectionsToRename.empty() ||
4381ad6265SDimitry Andric       !Common.UnneededSymbolsToRemove.empty() ||
4481ad6265SDimitry Andric       !Common.SetSectionAlignment.empty() || !Common.SetSectionFlags.empty() ||
45753f127fSDimitry Andric       !Common.SetSectionType.empty() || Common.ExtractDWO ||
46753f127fSDimitry Andric       Common.PreserveDates || Common.StripAllGNU || Common.StripDWO ||
475f757f3fSDimitry Andric       Common.StripNonAlloc || Common.StripSections ||
48753f127fSDimitry Andric       Common.DecompressDebugSections || Common.StripUnneeded ||
495f757f3fSDimitry Andric       Common.DiscardMode == DiscardType::Locals ||
50*0fca6ea1SDimitry Andric       !Common.SymbolsToAdd.empty() || Common.GapFill != 0 ||
51*0fca6ea1SDimitry Andric       Common.PadTo != 0 || Common.ChangeSectionLMAValAll != 0)
5281ad6265SDimitry Andric     return createStringError(llvm::errc::invalid_argument,
5381ad6265SDimitry Andric                              "option is not supported for MachO");
5481ad6265SDimitry Andric 
5581ad6265SDimitry Andric   return MachO;
5681ad6265SDimitry Andric }
5781ad6265SDimitry Andric 
5881ad6265SDimitry Andric Expected<const WasmConfig &> ConfigManager::getWasmConfig() const {
5981ad6265SDimitry Andric   if (!Common.AddGnuDebugLink.empty() || Common.ExtractPartition ||
6081ad6265SDimitry Andric       !Common.SplitDWO.empty() || !Common.SymbolsPrefix.empty() ||
61*0fca6ea1SDimitry Andric       !Common.SymbolsPrefixRemove.empty() || !Common.SymbolsToSkip.empty() ||
6281ad6265SDimitry Andric       !Common.AllocSectionsPrefix.empty() ||
6381ad6265SDimitry Andric       Common.DiscardMode != DiscardType::None || !Common.SymbolsToAdd.empty() ||
6481ad6265SDimitry Andric       !Common.SymbolsToGlobalize.empty() || !Common.SymbolsToLocalize.empty() ||
6581ad6265SDimitry Andric       !Common.SymbolsToKeep.empty() || !Common.SymbolsToRemove.empty() ||
6681ad6265SDimitry Andric       !Common.UnneededSymbolsToRemove.empty() ||
6781ad6265SDimitry Andric       !Common.SymbolsToWeaken.empty() || !Common.SymbolsToKeepGlobal.empty() ||
6881ad6265SDimitry Andric       !Common.SectionsToRename.empty() || !Common.SetSectionAlignment.empty() ||
69753f127fSDimitry Andric       !Common.SetSectionFlags.empty() || !Common.SetSectionType.empty() ||
705f757f3fSDimitry Andric       !Common.SymbolsToRename.empty() || Common.GapFill != 0 ||
71*0fca6ea1SDimitry Andric       Common.PadTo != 0 || Common.ChangeSectionLMAValAll != 0)
7281ad6265SDimitry Andric     return createStringError(llvm::errc::invalid_argument,
7381ad6265SDimitry Andric                              "only flags for section dumping, removal, and "
7481ad6265SDimitry Andric                              "addition are supported");
7581ad6265SDimitry Andric 
7681ad6265SDimitry Andric   return Wasm;
7781ad6265SDimitry Andric }
7881ad6265SDimitry Andric 
7981ad6265SDimitry Andric Expected<const XCOFFConfig &> ConfigManager::getXCOFFConfig() const {
8081ad6265SDimitry Andric   if (!Common.AddGnuDebugLink.empty() || Common.ExtractPartition ||
8181ad6265SDimitry Andric       !Common.SplitDWO.empty() || !Common.SymbolsPrefix.empty() ||
82*0fca6ea1SDimitry Andric       !Common.SymbolsPrefixRemove.empty() || !Common.SymbolsToSkip.empty() ||
8381ad6265SDimitry Andric       !Common.AllocSectionsPrefix.empty() ||
8481ad6265SDimitry Andric       Common.DiscardMode != DiscardType::None || !Common.AddSection.empty() ||
8581ad6265SDimitry Andric       !Common.DumpSection.empty() || !Common.SymbolsToAdd.empty() ||
8681ad6265SDimitry Andric       !Common.KeepSection.empty() || !Common.OnlySection.empty() ||
8781ad6265SDimitry Andric       !Common.ToRemove.empty() || !Common.SymbolsToGlobalize.empty() ||
8881ad6265SDimitry Andric       !Common.SymbolsToKeep.empty() || !Common.SymbolsToLocalize.empty() ||
8981ad6265SDimitry Andric       !Common.SymbolsToRemove.empty() ||
9081ad6265SDimitry Andric       !Common.UnneededSymbolsToRemove.empty() ||
9181ad6265SDimitry Andric       !Common.SymbolsToWeaken.empty() || !Common.SymbolsToKeepGlobal.empty() ||
9281ad6265SDimitry Andric       !Common.SectionsToRename.empty() || !Common.SetSectionAlignment.empty() ||
93753f127fSDimitry Andric       !Common.SetSectionFlags.empty() || !Common.SetSectionType.empty() ||
94753f127fSDimitry Andric       !Common.SymbolsToRename.empty() || Common.ExtractDWO ||
95753f127fSDimitry Andric       Common.ExtractMainPartition || Common.OnlyKeepDebug ||
96753f127fSDimitry Andric       Common.PreserveDates || Common.StripAllGNU || Common.StripDWO ||
97753f127fSDimitry Andric       Common.StripDebug || Common.StripNonAlloc || Common.StripSections ||
985f757f3fSDimitry Andric       Common.Weaken || Common.StripUnneeded || Common.DecompressDebugSections ||
99*0fca6ea1SDimitry Andric       Common.GapFill != 0 || Common.PadTo != 0 ||
100*0fca6ea1SDimitry Andric       Common.ChangeSectionLMAValAll != 0) {
10181ad6265SDimitry Andric     return createStringError(
10281ad6265SDimitry Andric         llvm::errc::invalid_argument,
10381ad6265SDimitry Andric         "no flags are supported yet, only basic copying is allowed");
10481ad6265SDimitry Andric   }
10581ad6265SDimitry Andric 
10681ad6265SDimitry Andric   return XCOFF;
10781ad6265SDimitry Andric }
10881ad6265SDimitry Andric 
10981ad6265SDimitry Andric } // end namespace objcopy
11081ad6265SDimitry Andric } // end namespace llvm
111