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