diff options
Diffstat (limited to 'src/zig_llvm-ar.cpp')
| -rw-r--r-- | src/zig_llvm-ar.cpp | 42 |
1 files changed, 10 insertions, 32 deletions
diff --git a/src/zig_llvm-ar.cpp b/src/zig_llvm-ar.cpp index 093350e15a..75f2ef2fff 100644 --- a/src/zig_llvm-ar.cpp +++ b/src/zig_llvm-ar.cpp @@ -13,20 +13,11 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSwitch.h" -#include "llvm/ADT/Triple.h" #include "llvm/BinaryFormat/Magic.h" #include "llvm/IR/LLVMContext.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ArchiveWriter.h" -#include "llvm/Object/COFFImportFile.h" -#include "llvm/Object/ELFObjectFile.h" -#include "llvm/Object/IRObjectFile.h" -#include "llvm/Object/MachO.h" -#include "llvm/Object/ObjectFile.h" #include "llvm/Object/SymbolicFile.h" -#include "llvm/Object/TapiFile.h" -#include "llvm/Object/Wasm.h" -#include "llvm/Object/XCOFFObjectFile.h" #include "llvm/Support/Chrono.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ConvertUTF.h" @@ -34,8 +25,8 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" -#include "llvm/Support/Host.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" @@ -45,6 +36,8 @@ #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/TargetParser/Host.h" +#include "llvm/TargetParser/Triple.h" #include "llvm/ToolDrivers/llvm-dlltool/DlltoolDriver.h" #include "llvm/ToolDrivers/llvm-lib/LibDriver.h" @@ -646,31 +639,12 @@ static bool shouldCreateArchive(ArchiveOperation Op) { llvm_unreachable("Missing entry in covered switch."); } -static bool is64BitSymbolicFile(SymbolicFile &Obj) { - if (auto *IRObj = dyn_cast<IRObjectFile>(&Obj)) - return Triple(IRObj->getTargetTriple()).isArch64Bit(); - if (isa<COFFObjectFile>(Obj) || isa<COFFImportFile>(Obj)) - return false; - if (XCOFFObjectFile *XCOFFObj = dyn_cast<XCOFFObjectFile>(&Obj)) - return XCOFFObj->is64Bit(); - if (isa<WasmObjectFile>(Obj)) - return false; - if (TapiFile *Tapi = dyn_cast<TapiFile>(&Obj)) - return Tapi->is64Bit(); - if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(&Obj)) - return MachO->is64Bit(); - if (ELFObjectFileBase *ElfO = dyn_cast<ELFObjectFileBase>(&Obj)) - return ElfO->getBytesInAddress() == 8; - - fail("unsupported file format"); -} - static bool isValidInBitMode(Binary &Bin) { if (BitMode == BitModeTy::Bit32_64 || BitMode == BitModeTy::Any) return true; if (SymbolicFile *SymFile = dyn_cast<SymbolicFile>(&Bin)) { - bool Is64Bit = is64BitSymbolicFile(*SymFile); + bool Is64Bit = SymFile->is64Bit(); if ((Is64Bit && (BitMode == BitModeTy::Bit32)) || (!Is64Bit && (BitMode == BitModeTy::Bit64))) return false; @@ -1452,8 +1426,7 @@ static int ranlib_main(int argc, char **argv) { return 0; } -extern "C" int ZigLlvmAr_main(int argc, char **argv); -int ZigLlvmAr_main(int argc, char **argv) { +static int llvm_ar_main(int argc, char **argv, const llvm::ToolContext &) { // ZIG PATCH: On Windows, InitLLVM calls GetCommandLineW(), // and overwrites the args. We don't want it to do that, // and we also don't need the signal handlers it installs @@ -1491,3 +1464,8 @@ int ZigLlvmAr_main(int argc, char **argv) { fail("not ranlib, ar, lib or dlltool"); } + +extern "C" int ZigLlvmAr_main(int, char **); +int ZigLlvmAr_main(int argc, char **argv) { + return llvm_ar_main(argc, argv, {argv[0], nullptr, false}); +} |
