[WebAssembly] Add triple support for the new wasm object format

Differential Revision: https://reviews.llvm.org/D26701

llvm-svn: 292252
This commit is contained in:
Dan Gohman 2017-01-17 20:34:09 +00:00
parent 8343b5096d
commit 1209c7ac16
6 changed files with 17 additions and 2 deletions

View File

@ -206,6 +206,7 @@ public:
COFF, COFF,
ELF, ELF,
MachO, MachO,
Wasm,
}; };
private: private:
@ -576,6 +577,11 @@ public:
return getObjectFormat() == Triple::MachO; return getObjectFormat() == Triple::MachO;
} }
/// Tests whether the OS uses the Wasm binary format.
bool isOSBinFormatWasm() const {
return getObjectFormat() == Triple::Wasm;
}
/// Tests whether the target is the PS4 CPU /// Tests whether the target is the PS4 CPU
bool isPS4CPU() const { bool isPS4CPU() const {
return getArch() == Triple::x86_64 && return getArch() == Triple::x86_64 &&

View File

@ -843,6 +843,9 @@ void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC,
Env = IsELF; Env = IsELF;
initELFMCObjectFileInfo(TT); initELFMCObjectFileInfo(TT);
break; break;
case Triple::Wasm:
report_fatal_error("Cannot initialize MC for wasm object file format yet.");
break;
case Triple::UnknownObjectFormat: case Triple::UnknownObjectFormat:
report_fatal_error("Cannot initialize MC for unknown object file format."); report_fatal_error("Cannot initialize MC for unknown object file format.");
break; break;

View File

@ -794,7 +794,7 @@ bool needsComdatForCounter(const Function &F, const Module &M) {
return true; return true;
Triple TT(M.getTargetTriple()); Triple TT(M.getTargetTriple());
if (!TT.isOSBinFormatELF()) if (!TT.isOSBinFormatELF() && !TT.isOSBinFormatWasm())
return false; return false;
// See createPGOFuncNameVar for more details. To avoid link errors, profile // See createPGOFuncNameVar for more details. To avoid link errors, profile

View File

@ -510,6 +510,7 @@ static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) {
.EndsWith("coff", Triple::COFF) .EndsWith("coff", Triple::COFF)
.EndsWith("elf", Triple::ELF) .EndsWith("elf", Triple::ELF)
.EndsWith("macho", Triple::MachO) .EndsWith("macho", Triple::MachO)
.EndsWith("wasm", Triple::Wasm)
.Default(Triple::UnknownObjectFormat); .Default(Triple::UnknownObjectFormat);
} }
@ -581,6 +582,7 @@ static StringRef getObjectFormatTypeName(Triple::ObjectFormatType Kind) {
case Triple::COFF: return "coff"; case Triple::COFF: return "coff";
case Triple::ELF: return "elf"; case Triple::ELF: return "elf";
case Triple::MachO: return "macho"; case Triple::MachO: return "macho";
case Triple::Wasm: return "wasm";
} }
llvm_unreachable("unknown object format type"); llvm_unreachable("unknown object format type");
} }

View File

@ -1853,7 +1853,8 @@ bool AddressSanitizerModule::InstrumentGlobals(IRBuilder<> &IRB, Module &M) {
GlobalValue *InstrumentedGlobal = NewGlobal; GlobalValue *InstrumentedGlobal = NewGlobal;
bool CanUsePrivateAliases = bool CanUsePrivateAliases =
TargetTriple.isOSBinFormatELF() || TargetTriple.isOSBinFormatMachO(); TargetTriple.isOSBinFormatELF() || TargetTriple.isOSBinFormatMachO() ||
TargetTriple.isOSBinFormatWasm();
if (CanUsePrivateAliases && ClUsePrivateAliasForGlobals) { if (CanUsePrivateAliases && ClUsePrivateAliasForGlobals) {
// Create local alias for NewGlobal to avoid crash on ODR between // Create local alias for NewGlobal to avoid crash on ODR between
// instrumented and non-instrumented libraries. // instrumented and non-instrumented libraries.

View File

@ -888,6 +888,9 @@ TEST(TripleTest, FileFormat) {
EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());