diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-12-22 01:39:04 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-12-22 01:39:04 +0000 |
commit | ff1d084aa2f07927f3c63c93f3286822abe9d1ac (patch) | |
tree | 5ff2fae7c2a9b59f37829e17a4eac861b1728856 /llvm/lib/Support/Triple.cpp | |
parent | a9f3bc6d86a7e067a4529895ae3e76f0c587c128 (diff) | |
download | llvm-ff1d084aa2f07927f3c63c93f3286822abe9d1ac.zip llvm-ff1d084aa2f07927f3c63c93f3286822abe9d1ac.tar.gz llvm-ff1d084aa2f07927f3c63c93f3286822abe9d1ac.tar.bz2 |
[MC] Don't use the architecture to govern which object file format to use
InitMCObjectFileInfo was trying to override the triple in awkward ways.
For example, a triple specifying COFF but not Windows was forced as ELF.
This makes it easy for internal invariants to get violated, such as
those which triggered PR25912.
This fixes PR25912.
llvm-svn: 256226
Diffstat (limited to 'llvm/lib/Support/Triple.cpp')
-rw-r--r-- | llvm/lib/Support/Triple.cpp | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index 9061d17..3bb1116 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -538,22 +538,53 @@ static const char *getObjectFormatTypeName(Triple::ObjectFormatType Kind) { static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { switch (T.getArch()) { - default: - break; + case Triple::UnknownArch: + case Triple::aarch64: + case Triple::arm: + case Triple::thumb: + case Triple::x86: + case Triple::x86_64: + if (T.isOSDarwin()) + return Triple::MachO; + else if (T.isOSWindows()) + return Triple::COFF; + return Triple::ELF; + + case Triple::aarch64_be: + case Triple::amdgcn: + case Triple::amdil: + case Triple::amdil64: + case Triple::armeb: + case Triple::avr: + case Triple::bpfeb: + case Triple::bpfel: case Triple::hexagon: + case Triple::hsail: + case Triple::hsail64: + case Triple::kalimba: + case Triple::le32: + case Triple::le64: case Triple::mips: - case Triple::mipsel: case Triple::mips64: case Triple::mips64el: + case Triple::mipsel: + case Triple::msp430: + case Triple::nvptx: + case Triple::nvptx64: + case Triple::ppc64le: case Triple::r600: - case Triple::amdgcn: + case Triple::shave: case Triple::sparc: + case Triple::sparcel: case Triple::sparcv9: + case Triple::spir: + case Triple::spir64: case Triple::systemz: + case Triple::tce: + case Triple::thumbeb: case Triple::wasm32: case Triple::wasm64: case Triple::xcore: - case Triple::ppc64le: return Triple::ELF; case Triple::ppc: @@ -562,12 +593,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { return Triple::MachO; return Triple::ELF; } - - if (T.isOSDarwin()) - return Triple::MachO; - else if (T.isOSWindows()) - return Triple::COFF; - return Triple::ELF; + llvm_unreachable("unknown architecture"); } /// \brief Construct a triple from the string representation provided. |