From 54078eca665094c42af18022ad296d694de43314 Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Mon, 29 Jul 2013 18:49:09 +0400 Subject: [PATCH] Set global.params.isOS variables so we do not have to modify dmd frontend to use targetTriple --- dmd2/class.c | 4 ---- dmd2/cppmangle.c | 4 ---- dmd2/func.c | 10 +--------- dmd2/mars.h | 7 +++++++ dmd2/parse.c | 2 +- driver/main.cpp | 10 +++++++++- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/dmd2/class.c b/dmd2/class.c index ce85a096..db93aa58 100644 --- a/dmd2/class.c +++ b/dmd2/class.c @@ -588,11 +588,7 @@ void ClassDeclaration::semantic(Scope *sc) if (isCOMclass()) { -#if IN_LLVM - if (global.params.targetTriple.isOSWindows()) -#else if (global.params.isWindows) -#endif sc->linkage = LINKwindows; else /* This enables us to use COM objects under Linux and diff --git a/dmd2/cppmangle.c b/dmd2/cppmangle.c index 78750549..686d61bd 100644 --- a/dmd2/cppmangle.c +++ b/dmd2/cppmangle.c @@ -160,11 +160,7 @@ char *cpp_mangle(Dsymbol *s) cms.components.setDim(0); OutBuffer buf; -#if IN_LLVM - buf.writestring("__Z" + !(global.params.targetTriple.isMacOSX())); // "_Z" for OSX -#else buf.writestring("__Z" + !global.params.isOSX); // "_Z" for OSX -#endif cpp_mangle_name(&buf, &cms, s); diff --git a/dmd2/func.c b/dmd2/func.c index 61595c02..7a9dc42e 100644 --- a/dmd2/func.c +++ b/dmd2/func.c @@ -1888,16 +1888,8 @@ void FuncDeclaration::semantic3(Scope *sc) if (cd) { if (!global.params.is64bit && -#if IN_LLVM - global.params.targetTriple.isOSWindows() && -#else global.params.isWindows && -#endif - !isStatic() && !fbody->usesEH() -#if !IN_LLVM - && !global.params.trace -#endif - ) + !isStatic() && !fbody->usesEH() && !global.params.trace) { /* The back end uses the "jmonitor" hack for syncing; * no need to do the sync at this level. diff --git a/dmd2/mars.h b/dmd2/mars.h index 2a6bff31..e36b0ab3 100644 --- a/dmd2/mars.h +++ b/dmd2/mars.h @@ -162,7 +162,14 @@ struct Param bool vtls; // identify thread local variables bool vfield; // identify non-mutable field variables ubyte symdebug; // insert debug symbolic information + bool trace; // insert profiling hooks bool is64bit; // generate 64 bit code + bool isLinux; // generate code for linux + bool isOSX; // generate code for Mac OSX + bool isWindows; // generate code for Windows + bool isFreeBSD; // generate code for FreeBSD + bool isOpenBSD; // generate code for OpenBSD + bool isSolaris; // generate code for Solaris #else char dll; // generate shared dynamic library char lib; // write library file instead of object file(s) diff --git a/dmd2/parse.c b/dmd2/parse.c index 28b7e664..0f827fdf 100644 --- a/dmd2/parse.c +++ b/dmd2/parse.c @@ -993,7 +993,7 @@ enum LINK Parser::parseLinkage() else if (id == Id::System) { #if IN_LLVM - if (global.params.targetTriple.isOSWindows()) + if (global.params.isWindows) link = LINKwindows; else link = LINKc; diff --git a/driver/main.cpp b/driver/main.cpp index f72b674a..e97b7ba7 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -475,7 +475,15 @@ int main(int argc, char** argv) gTargetMachine = createTargetMachine(mTargetTriple, mArch, mCPU, mAttrs, bitness, mRelocModel, mCodeModel, codeGenOptLevel(), global.params.symdebug); - global.params.targetTriple = llvm::Triple(gTargetMachine->getTargetTriple()); + llvm::Triple targetTriple = llvm::Triple(gTargetMachine->getTargetTriple()); + global.params.targetTriple = targetTriple; + global.params.trace = false; + global.params.isLinux = targetTriple.getOS() == llvm::Triple::Linux; + global.params.isOSX = targetTriple.isMacOSX(); + global.params.isWindows = targetTriple.isOSWindows(); + global.params.isFreeBSD = targetTriple.getOS() == llvm::Triple::FreeBSD; + global.params.isOpenBSD = targetTriple.getOS() == llvm::Triple::OpenBSD; + global.params.isSolaris = targetTriple.getOS() == llvm::Triple::Solaris; #if LDC_LLVM_VER >= 302 gDataLayout = gTargetMachine->getDataLayout();