changeset 1068:7db4bb9602ed

Automated merge with http://hg.dsource.org/projects/ldc
author Christian Kamm <kamm incasoftware de>
date Sun, 08 Mar 2009 16:22:06 +0100
parents f0b6549055ab (diff) 7ce8355fbcc6 (current diff)
children 8038b106c458
files gen/todebug.cpp
diffstat 15 files changed, 74 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Sun Mar 08 16:21:56 2009 +0100
+++ b/.hgignore	Sun Mar 08 16:22:06 2009 +0100
@@ -28,9 +28,9 @@
 ^impcnvgen\.make$
 ^ldc\.make$
 ^revisions\.pl$
+^gen/revisions\.h$
 ^dmd2?/idgen$
 ^dmd2?/impcnvgen$
-^dmd2?/revisions\.h$
 ^dmd2?/impcnvtab\.c$
 ^dmd2?/id\.c$
 ^dmd2?/id\.h$
--- a/CMakeLists.txt	Sun Mar 08 16:21:56 2009 +0100
+++ b/CMakeLists.txt	Sun Mar 08 16:22:06 2009 +0100
@@ -168,13 +168,21 @@
 add_executable(${LDC_EXE} ${LDC_SOURCE_FILES})
 
 # generate revision info
-configure_file(${PROJECT_SOURCE_DIR}/revisions.pl.in ${PROJECT_BINARY_DIR}/revisions.pl)
+configure_file(
+        ${PROJECT_SOURCE_DIR}/revisions.pl.in
+        ${PROJECT_BINARY_DIR}/revisions.pl
+        @ONLY
+)
 add_custom_command(
-	OUTPUT ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/revisions.h
+	OUTPUT ${PROJECT_BINARY_DIR}/gen/revisions.h
 	COMMAND ${PERL_EXECUTABLE} ${PROJECT_BINARY_DIR}/revisions.pl
-	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
+	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/gen
 )
-add_custom_target(gen_revs_h ALL DEPENDS ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/revisions.h)
+add_custom_target(
+        gen_revs_h ALL
+        DEPENDS ${PROJECT_BINARY_DIR}/revisions.pl
+                ${PROJECT_BINARY_DIR}/gen/revisions.h
+)
 add_dependencies(${LDC_EXE} gen_revs_h)
 #
 
--- a/bin/ldmd	Sun Mar 08 16:21:56 2009 +0100
+++ b/bin/ldmd	Sun Mar 08 16:22:06 2009 +0100
@@ -14,7 +14,6 @@
 fi
 
 declare -a ARGS
-SeenFile=0
 IDX=0
 for arg; do
     case "$arg" in
@@ -29,11 +28,6 @@
         # Are these ever used?
         arg="-hidden-debug${arg:1}"
         ;;
-    -*)
-        ;;
-    *)
-        SeenFile=1
-        ;;
     esac
     ARGS[IDX++]="$arg"
 done
--- a/dmd/mars.c	Sun Mar 08 16:21:56 2009 +0100
+++ b/dmd/mars.c	Sun Mar 08 16:22:06 2009 +0100
@@ -36,7 +36,7 @@
 #include "expression.h"
 #include "lexer.h"
 
-#include "revisions.h"
+#include "gen/revisions.h"
 
 Global global;
 
@@ -61,7 +61,7 @@
     written = "written by Walter Bright and Tomas Lindquist Olsen";
     version = "v1.039";
     ldc_version = LDC_REV;
-    llvm_version = LLVM_REV;
+    llvm_version = LLVM_REV_STR;
     global.structalign = 8;
 
     // This should only be used as a global, so the other fields are
--- a/dmd/mars.h	Sun Mar 08 16:21:56 2009 +0100
+++ b/dmd/mars.h	Sun Mar 08 16:22:06 2009 +0100
@@ -66,10 +66,6 @@
     OSSolaris,
 };
 
-// make it easier to test new linkage types
-#define TEMPLATE_LINKAGE_TYPE   llvm::GlobalValue::LinkOnceLinkage
-#define TYPEINFO_LINKAGE_TYPE   llvm::GlobalValue::LinkOnceLinkage
-
 // Put command line switches in here
 struct Param
 {
--- a/dmd2/mars.h	Sun Mar 08 16:21:56 2009 +0100
+++ b/dmd2/mars.h	Sun Mar 08 16:22:06 2009 +0100
@@ -66,10 +66,6 @@
     OSSolaris,
 };
 
-// make it easier to test new linkage types
-#define TEMPLATE_LINKAGE_TYPE   llvm::GlobalValue::LinkOnceLinkage
-#define TYPEINFO_LINKAGE_TYPE   llvm::GlobalValue::LinkOnceLinkage
-
 // Put command line switches in here
 struct Param
 {
--- a/gen/abi-x86-64.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/abi-x86-64.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -32,9 +32,9 @@
  * and the pointer in memory, as printf expects it.
  */
 
-#include "dmd/mtype.h"
-#include "dmd/declaration.h"
-#include "dmd/aggregate.h"
+#include "mtype.h"
+#include "declaration.h"
+#include "aggregate.h"
 
 #include "gen/llvm.h"
 #include "gen/tollvm.h"
--- a/gen/cl_helpers.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/cl_helpers.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -1,7 +1,7 @@
 #include "gen/cl_helpers.h"
 
-#include "dmd/root.h"
-#include "dmd/mem.h"
+#include "root.h"
+#include "mem.h"
 
 #include <cctype>       // isupper, tolower
 #include <algorithm>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gen/linkage.h	Sun Mar 08 16:22:06 2009 +0100
@@ -0,0 +1,31 @@
+#ifndef LDC_GEN_LINKAGE_H
+#define LDC_GEN_LINKAGE_H
+
+#include "gen/revisions.h"
+
+// Make it easier to test new linkage types
+// Also used to adapt to some changes in LLVM between 2.5 and 2.6
+
+
+// LLVM r66339 introduces LinkOnceODRLinkage, which is just what we want here.
+// (It also renamed LinkOnceLinkage, so this #if is needed for LDC to compile
+// with both 2.5 and trunk)
+#if LLVM_REV >= 66339
+#  define TEMPLATE_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceODRLinkage
+#  define TYPEINFO_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceODRLinkage
+// The One-Definition-Rule shouldn't matter for debug info, right?
+#  define DEBUGINFO_LINKONCE_LINKAGE_TYPE \
+                                        llvm::GlobalValue::LinkOnceAnyLinkage
+
+// For 2.5 and any LLVM revision before 66339 we want to use LinkOnceLinkage
+// It's equivalent to LinkOnceAnyLinkage in trunk except that the inliner had a
+// hack (removed in r66339) to allow inlining of templated functions even though
+// LinkOnce doesn't technically allow that.
+#else
+#  define TEMPLATE_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceLinkage
+#  define TYPEINFO_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceLinkage
+#  define DEBUGINFO_LINKONCE_LINKAGE_TYPE \
+                                        llvm::GlobalValue::LinkOnceLinkage
+#endif
+
+#endif
--- a/gen/todebug.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/todebug.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -12,6 +12,7 @@
 #include "gen/tollvm.h"
 #include "gen/logger.h"
 #include "gen/llvmhelpers.h"
+#include "gen/linkage.h"
 
 #include "ir/irmodule.h"
 
@@ -33,7 +34,9 @@
  */
 static LLGlobalVariable* emitDwarfGlobalDecl(const LLStructType* type, const char* name, bool linkonce=false)
 {
-    LLGlobalValue::LinkageTypes linkage = linkonce ? LLGlobalValue::LinkOnceLinkage : LLGlobalValue::InternalLinkage;
+    LLGlobalValue::LinkageTypes linkage = linkonce
+        ? DEBUGINFO_LINKONCE_LINKAGE_TYPE
+        : LLGlobalValue::InternalLinkage;
     LLGlobalVariable* gv = new LLGlobalVariable(type, true, linkage, NULL, name, gIR->module);
     gv->setSection("llvm.metadata");
     return gv;
--- a/gen/tollvm.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/tollvm.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -19,6 +19,7 @@
 #include "gen/typeinf.h"
 #include "gen/complex.h"
 #include "gen/llvmhelpers.h"
+#include "gen/linkage.h"
 
 bool DtoIsPassedByRef(Type* type)
 {
--- a/gen/toobj.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/toobj.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -362,7 +362,7 @@
         gcc, &Args[0], 0, 0, 0, 0, &ErrMsg);
     if (R)
     {
-        error("failed to invoke gcc");
+        error("Failed to invoke gcc. %s", ErrMsg.c_str());
         fatal();
     }
 }
--- a/gen/typinf.cpp	Sun Mar 08 16:21:56 2009 +0100
+++ b/gen/typinf.cpp	Sun Mar 08 16:22:06 2009 +0100
@@ -39,6 +39,7 @@
 #include "gen/arrays.h"
 #include "gen/structs.h"
 #include "gen/classes.h"
+#include "gen/linkage.h"
 
 #include "ir/irvar.h"
 
--- a/revisions.pl.in	Sun Mar 08 16:21:56 2009 +0100
+++ b/revisions.pl.in	Sun Mar 08 16:22:06 2009 +0100
@@ -7,15 +7,20 @@
 
 my $llvm_src = `perl @LLVM_CONFIG@ --src-root`;
 
-my $llvm_rev = `svnversion $llvm_src`;
+my $llvm_rev = `svnversion --committed $llvm_src`;
+my $llvm_rev_str;
+my $llvm_rev_nr;
 
-if ($llvm_rev =~ s/(\d+M?)\s+$/$1/) {
-	$llvm_rev = qq!#define LLVM_REV "LLVM rev. $llvm_rev"!
+if ($llvm_rev =~ /^\s*(\d+:)?(?<str>(?<nr>\d+)[MSP]*)\s*$/) {
+	$llvm_rev_str = qq!#define LLVM_REV_STR "LLVM rev. $+{str}"!;
+	$llvm_rev_nr = "$+{nr}";
 } else {
 	my $llvm_lib = `perl @LLVM_CONFIG@ --libdir`;
 	$llvm_lib =~ s/\s+$//;
 	$llvm_rev = ctime(stat($llvm_lib)->mtime) if (-d $llvm_lib);
-	$llvm_rev = qq!#include "llvm/Config/config.h"\n#define LLVM_REV PACKAGE_STRING" ($llvm_rev)"!;
+	$llvm_rev_str = qq!#include "llvm/Config/config.h"\n#define LLVM_REV_STR PACKAGE_STRING" ($llvm_rev)"!;
+	# Assume latest release, so < any version we should be testing for.
+	$llvm_rev_nr = 0;
 }
 
 my $ldc_rev = `hg -R@PROJECT_SOURCE_DIR@ log -r qparent --template '{rev}:{node|short} ({date|isodate})' 2>/dev/null || hg -R@PROJECT_SOURCE_DIR@ tip --template '{rev}:{node|short} ({date|isodate})'`;
@@ -23,7 +28,12 @@
 my $out = qq!#ifndef LDC_VERSIONS_H
 #define LDC_VERSIONS_H
 
-$llvm_rev
+// LLVM version string, for use in -version output
+$llvm_rev_str
+// LLVM svn revision number, used to adapt to changes in LLVM
+// (Is 0 if LLVM is not an SVN version)
+#define LLVM_REV $llvm_rev_nr
+// LDC version string, for use in -version output
 #define LDC_REV "rev. $ldc_rev"
 
 #endif // LDC_VERSIONS_H\n!;
--- a/runtime/CMakeLists.txt	Sun Mar 08 16:21:56 2009 +0100
+++ b/runtime/CMakeLists.txt	Sun Mar 08 16:22:06 2009 +0100
@@ -13,7 +13,7 @@
 set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;")
 
 if(BUILD_SHARED_LIBS)
-	list(APPEND D_FLAGS -fPIC)
+	list(APPEND D_FLAGS -relocation-model=pic)
 endif(BUILD_SHARED_LIBS)
 
 # build tango for D1, druntime for D2