mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-23 16:19:52 +00:00
[mips] Correct ELF e_flags for the N32 ABI when using a mips-* triple rather than a mips64-* triple
Summary: Generally speaking, mips-* vs mips64-* should not be used to make decisions about the content or format of the ELF. This should be based on the ABI and CPU in use. For example, `mips-linux-gnu-clang -mips64r2 -mabi=64` should produce an ELF64 as should `mips64-linux-gnu-clang -mabi=64`. Conversely, `mips64-linux-gnu-clang -mabi=n32` should produce an ELF32 as should `mips-linux-gnu-clang -mips64r2 -mabi=n32`. This patch fixes the e_flags but leaves the ELF32 vs ELF64 issue for now since there is no apparent way to base this decision on the ABI and CPU. Differential Revision: http://reviews.llvm.org/D4539 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213244 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -281,22 +281,18 @@ MipsTargetELFStreamer::MipsTargetELFStreamer(MCStreamer &S,
|
||||
else
|
||||
EFlags |= ELF::EF_MIPS_ARCH_1;
|
||||
|
||||
if (T.isArch64Bit()) {
|
||||
if (Features & Mips::FeatureN32)
|
||||
EFlags |= ELF::EF_MIPS_ABI2;
|
||||
else if (Features & Mips::FeatureO32) {
|
||||
EFlags |= ELF::EF_MIPS_ABI_O32;
|
||||
EFlags |= ELF::EF_MIPS_32BITMODE; /* Compatibility Mode */
|
||||
}
|
||||
// No need to set any bit for N64 which is the default ABI at the moment
|
||||
// for 64-bit Mips architectures.
|
||||
} else {
|
||||
if (Features & Mips::FeatureMips64r2 || Features & Mips::FeatureMips64)
|
||||
EFlags |= ELF::EF_MIPS_32BITMODE;
|
||||
|
||||
// ABI
|
||||
// ABI
|
||||
// N64 does not require any ABI bits.
|
||||
if (Features & Mips::FeatureO32)
|
||||
EFlags |= ELF::EF_MIPS_ABI_O32;
|
||||
}
|
||||
else if (Features & Mips::FeatureN32)
|
||||
EFlags |= ELF::EF_MIPS_ABI2;
|
||||
|
||||
if (Features & Mips::FeatureGP64Bit) {
|
||||
if (Features & Mips::FeatureO32)
|
||||
EFlags |= ELF::EF_MIPS_32BITMODE; /* Compatibility Mode */
|
||||
} else if (Features & Mips::FeatureMips64r2 || Features & Mips::FeatureMips64)
|
||||
EFlags |= ELF::EF_MIPS_32BITMODE;
|
||||
|
||||
// Other options.
|
||||
if (Features & Mips::FeatureNaN2008)
|
||||
|
||||
Reference in New Issue
Block a user