diff --git a/llvm/include/llvm/MC/MCELFObjectWriter.h b/llvm/include/llvm/MC/MCELFObjectWriter.h --- a/llvm/include/llvm/MC/MCELFObjectWriter.h +++ b/llvm/include/llvm/MC/MCELFObjectWriter.h @@ -69,8 +69,8 @@ return W->getFormat() == Triple::ELF; } - static uint8_t getOSABI(Triple::OSType OSType) { - switch (OSType) { + static uint8_t getOSABI(const Triple &T) { + switch (T.getOS()) { case Triple::CloudABI: return ELF::ELFOSABI_CLOUDABI; case Triple::HermitCore: @@ -79,7 +79,10 @@ case Triple::FreeBSD: return ELF::ELFOSABI_FREEBSD; default: - return ELF::ELFOSABI_NONE; + if (T.isGNUEnvironment()) + return ELF::ELFOSABI_GNU; + else + return ELF::ELFOSABI_NONE; } } diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp @@ -757,7 +757,7 @@ assert(TheTriple.isOSBinFormatELF() && "Invalid target"); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple); bool IsILP32 = Options.getABIName() == "ilp32"; return new ELFAArch64AsmBackend(T, TheTriple, OSABI, /*IsLittleEndian=*/true, IsILP32); @@ -770,7 +770,7 @@ const Triple &TheTriple = STI.getTargetTriple(); assert(TheTriple.isOSBinFormatELF() && "Big endian is only supported for ELF targets!"); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple); bool IsILP32 = Options.getABIName() == "ilp32"; return new ELFAArch64AsmBackend(T, TheTriple, OSABI, /*IsLittleEndian=*/false, IsILP32); diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -1296,7 +1296,7 @@ return new ARMAsmBackendWinCOFF(T, STI); case Triple::ELF: assert(TheTriple.isOSBinFormatELF() && "using ELF for non-ELF target"); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple); return new ARMAsmBackendELF(T, STI, OSABI, Endian); } } diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.h b/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.h --- a/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.h +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.h @@ -28,8 +28,7 @@ /// Utilities for manipulating generated AVR machine code. class AVRAsmBackend : public MCAsmBackend { public: - AVRAsmBackend(Triple::OSType OSType) - : MCAsmBackend(support::little), OSType(OSType) {} + AVRAsmBackend(uint8_t OSABI) : MCAsmBackend(support::little), OSABI(OSABI) {} void adjustFixupValue(const MCFixup &Fixup, const MCValue &Target, uint64_t &Value, MCContext *Ctx = nullptr) const; @@ -61,7 +60,7 @@ const MCValue &Target) override; private: - Triple::OSType OSType; + uint8_t OSABI; }; } // end namespace llvm diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp --- a/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp @@ -355,7 +355,7 @@ std::unique_ptr AVRAsmBackend::createObjectTargetWriter() const { - return createAVRELFObjectWriter(MCELFObjectTargetWriter::getOSABI(OSType)); + return createAVRELFObjectWriter(OSABI); } void AVRAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, @@ -481,7 +481,8 @@ MCAsmBackend *createAVRAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const llvm::MCTargetOptions &TO) { - return new AVRAsmBackend(STI.getTargetTriple().getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(STI.getTargetTriple()); + return new AVRAsmBackend(OSABI); } } // end of namespace llvm diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp +++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp @@ -774,7 +774,7 @@ MCRegisterInfo const & /*MRI*/, const MCTargetOptions &Options) { const Triple &TT = STI.getTargetTriple(); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT); StringRef CPUString = Hexagon_MC::selectHexagonCPU(STI.getCPU()); return new HexagonAsmBackend(T, TT, OSABI, CPUString); diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp @@ -42,11 +42,11 @@ namespace { class LanaiAsmBackend : public MCAsmBackend { - Triple::OSType OSType; + uint8_t OSABI; public: - LanaiAsmBackend(const Target &T, Triple::OSType OST) - : MCAsmBackend(support::big), OSType(OST) {} + LanaiAsmBackend(const Target &T, uint8_t OSABI) + : MCAsmBackend(support::big), OSABI(OSABI) {} void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, MutableArrayRef Data, @@ -122,7 +122,7 @@ std::unique_ptr LanaiAsmBackend::createObjectTargetWriter() const { - return createLanaiELFObjectWriter(MCELFObjectTargetWriter::getOSABI(OSType)); + return createLanaiELFObjectWriter(OSABI); } const MCFixupKindInfo & @@ -164,5 +164,6 @@ if (!TT.isOSBinFormatELF()) llvm_unreachable("OS not supported"); - return new LanaiAsmBackend(T, TT.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT); + return new LanaiAsmBackend(T, OSABI); } diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp @@ -662,7 +662,7 @@ std::unique_ptr llvm::createMipsELFObjectWriter(const Triple &TT, bool IsN32) { - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT); bool IsN64 = TT.isArch64Bit() && !IsN32; bool HasRelocationAddend = TT.isArch64Bit(); return std::make_unique(OSABI, HasRelocationAddend, diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp @@ -218,7 +218,7 @@ std::unique_ptr createObjectTargetWriter() const override { - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT); bool Is64 = TT.isPPC64(); return createPPCELFObjectWriter(Is64, OSABI); } diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp @@ -471,6 +471,6 @@ const MCRegisterInfo &MRI, const MCTargetOptions &Options) { const Triple &TT = STI.getTargetTriple(); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT); return new RISCVAsmBackend(STI, OSABI, TT.isArch64Bit(), Options); } diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp --- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp +++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp @@ -285,10 +285,11 @@ }; class ELFSparcAsmBackend : public SparcAsmBackend { - Triple::OSType OSType; + uint8_t OSABI; + public: - ELFSparcAsmBackend(const Target &T, Triple::OSType OSType) : - SparcAsmBackend(T), OSType(OSType) { } + ELFSparcAsmBackend(const Target &T, uint8_t OSABI) + : SparcAsmBackend(T), OSABI(OSABI) {} void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, MutableArrayRef Data, @@ -311,7 +312,6 @@ std::unique_ptr createObjectTargetWriter() const override { - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(OSType); return createSparcELFObjectWriter(Is64Bit, OSABI); } }; @@ -322,5 +322,6 @@ const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options) { - return new ELFSparcAsmBackend(T, STI.getTargetTriple().getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(STI.getTargetTriple()); + return new ELFSparcAsmBackend(T, OSABI); } diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp --- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp +++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp @@ -119,7 +119,6 @@ const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options) { - uint8_t OSABI = - MCELFObjectTargetWriter::getOSABI(STI.getTargetTriple().getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(STI.getTargetTriple()); return new SystemZMCAsmBackend(OSABI); } diff --git a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp --- a/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp +++ b/llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp @@ -177,11 +177,11 @@ }; class ELFVEAsmBackend : public VEAsmBackend { - Triple::OSType OSType; + uint8_t OSABI; public: - ELFVEAsmBackend(const Target &T, Triple::OSType OSType) - : VEAsmBackend(T), OSType(OSType) {} + ELFVEAsmBackend(const Target &T, uint8_t OSABI) + : VEAsmBackend(T), OSABI(OSABI) {} void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, MutableArrayRef Data, @@ -210,7 +210,6 @@ std::unique_ptr createObjectTargetWriter() const override { - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(OSType); return createVEELFObjectWriter(OSABI); } }; @@ -220,5 +219,6 @@ const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options) { - return new ELFVEAsmBackend(T, STI.getTargetTriple().getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(STI.getTargetTriple()); + return new ELFVEAsmBackend(T, OSABI); } diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp --- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp @@ -1573,7 +1573,7 @@ if (TheTriple.isOSWindows() && TheTriple.isOSBinFormatCOFF()) return new WindowsX86AsmBackend(T, false, STI); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple); if (TheTriple.isOSIAMCU()) return new ELFX86_IAMCUAsmBackend(T, OSABI, STI); @@ -1592,7 +1592,7 @@ if (TheTriple.isOSWindows() && TheTriple.isOSBinFormatCOFF()) return new WindowsX86AsmBackend(T, true, STI); - uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); + uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple); if (TheTriple.getEnvironment() == Triple::GNUX32) return new ELFX86_X32AsmBackend(T, OSABI, STI);