From 6fd71c651255b750de67ee25e0a2e91e61a23e11 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 5 May 2008 16:11:31 +0000 Subject: [PATCH] Use a dedicated IsLinux flag instead of an ELFLinux TargetType. llvm-svn: 50649 --- llvm/lib/Target/X86/X86Subtarget.cpp | 7 +++++-- llvm/lib/Target/X86/X86Subtarget.h | 15 +++++++++------ llvm/lib/Target/X86/X86TargetAsmInfo.cpp | 3 +-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/X86/X86Subtarget.cpp b/llvm/lib/Target/X86/X86Subtarget.cpp index e555079738f6..cb07b0d45f86 100644 --- a/llvm/lib/Target/X86/X86Subtarget.cpp +++ b/llvm/lib/Target/X86/X86Subtarget.cpp @@ -279,7 +279,9 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit) else DarwinVers = 8; // Minimum supported darwin is Tiger. } else if (TT.find("linux") != std::string::npos) { - TargetType = isELFLinux; + // Linux doesn't imply ELF, but we don't currently support anything else. + TargetType = isELF; + IsLinux = true; } else if (TT.find("cygwin") != std::string::npos) { TargetType = isCygwin; } else if (TT.find("mingw") != std::string::npos) { @@ -306,7 +308,8 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit) TargetType = isWindows; #elif defined(__linux__) // Linux doesn't imply ELF, but we don't currently support anything else. - TargetType = isELFLinux; + TargetType = isELF; + IsLinux = true; #endif } diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index 1e955cd8687a..b95a2e45e5ec 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -67,7 +67,10 @@ protected: /// DarwinVers - Nonzero if this is a darwin platform: the numeric /// version of the platform, e.g. 8 = 10.4 (Tiger), 9 = 10.5 (Leopard), etc. - unsigned char DarwinVers; // Is any darwin-ppc platform. + unsigned char DarwinVers; // Is any darwin-x86 platform. + + /// isLinux - true if this is a "linux" platform. + bool IsLinux; /// stackAlignment - The minimum alignment known to hold of the stack frame on /// entry to the function and which must be maintained by every function. @@ -84,7 +87,7 @@ private: public: enum { - isELF, isELFLinux, isCygwin, isDarwin, isWindows, isMingw + isELF, isCygwin, isDarwin, isWindows, isMingw } TargetType; /// This constructor initializes the data members to match that @@ -133,10 +136,7 @@ public: bool isTargetDarwin() const { return TargetType == isDarwin; } bool isTargetELF() const { - return TargetType == isELF || TargetType == isELFLinux; - } - bool isTargetLinux() const { - return TargetType == isELFLinux; + return TargetType == isELF; } bool isTargetWindows() const { return TargetType == isWindows; } bool isTargetMingw() const { return TargetType == isMingw; } @@ -169,6 +169,9 @@ public: /// getDarwinVers - Return the darwin version number, 8 = tiger, 9 = leopard. unsigned getDarwinVers() const { return DarwinVers; } + /// isLinux - Return true if the target is "Linux". + bool isLinux() const { return IsLinux; } + /// True if accessing the GV requires an extra load. For Windows, dllimported /// symbols are indirect, loading the value at address GV rather then the /// value of GV itself. This means that the GlobalAddress must be in the base diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index 4aa9d4cfa8bf..513e8f0e6ce7 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -128,7 +128,6 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) { break; case X86Subtarget::isELF: - case X86Subtarget::isELFLinux: ReadOnlySection = "\t.section\t.rodata"; FourByteConstantSection = "\t.section\t.rodata.cst4,\"aM\",@progbits,4"; EightByteConstantSection = "\t.section\t.rodata.cst8,\"aM\",@progbits,8"; @@ -231,7 +230,7 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) { } // On Linux we must declare when we can use a non-executable stack. - if (Subtarget->isTargetLinux()) + if (Subtarget->isLinux()) NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\",@progbits"; AssemblerDialect = Subtarget->getAsmFlavor();