]> granicus.if.org Git - clang/commitdiff
ccc: Use toolchain hook for default relocation model value.
authorDaniel Dunbar <daniel@zuster.org>
Fri, 20 Feb 2009 06:48:26 +0000 (06:48 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 20 Feb 2009 06:48:26 +0000 (06:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65116 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/HostInfo.py
tools/ccc/ccclib/ToolChain.py
tools/ccc/ccclib/Tools.py
tools/ccc/test/ccc/universal-hello.c

index d1ec28d0b38628b3803f74258279ed69f94f18e0..917dc95131576918d84c5ac91aa23345154f7e23 100644 (file)
@@ -47,7 +47,7 @@ class DarwinHostInfo(HostInfo):
                                                   self.darwinVersion,
                                                   self.gccVersion)
 
-        return ToolChain.Generic_GCC_ToolChain(self.driver, arch)
+        return ToolChain.Darwin_GCC_ToolChain(self.driver, arch)
 
 class DarwinPPCHostInfo(DarwinHostInfo):
     def getArchName(self, args):
index aa1646a5b5145ba9be34fc9c18e01f47f02d85d6..cda94083795cb00ece15ce3d842001afd59d210f 100644 (file)
@@ -86,6 +86,11 @@ class ToolChain(object):
     def isMathErrnoDefault(self):
         return True
 
+    def getRelocationModel(self, picEnabled, picDisabled):
+        if picEnabled:
+            return 'pic'
+        return 'static'
+
 class Darwin_X86_ToolChain(ToolChain):
     def __init__(self, driver, archName, darwinVersion, gccVersion):
         super(Darwin_X86_ToolChain, self).__init__(driver, archName)
@@ -224,6 +229,17 @@ class Darwin_X86_ToolChain(ToolChain):
     def isMathErrnoDefault(self):
         return False
 
+    def getRelocationModel(self, picEnabled, picDisabled):
+        if self.archName == 'x86_64':
+            return 'pic'
+
+        if picEnabled:
+            return 'pic'
+        elif picDisabled:
+            return 'static'
+        else:
+            return 'dynamic-no-pic'
+
 class Generic_GCC_ToolChain(ToolChain):
     """Generic_GCC_ToolChain - A tool chain using the 'gcc' command to
     perform all subcommands; this relies on gcc translating the
@@ -251,3 +267,13 @@ class Generic_GCC_ToolChain(ToolChain):
             return self.clangTool
 
         return self.toolMap[action.phase.__class__]
+
+class Darwin_GCC_ToolChain(Generic_GCC_ToolChain):
+    def getRelocationModel(self, picEnabled, picDisabled):
+        if picEnabled:
+            return 'pic'
+        elif picDisabled:
+            return 'static'
+        else:
+            return 'dynamic-no-pic'
+
index c1146a0fb260078bffd27fdb7548afe1d8746635..3c80861b11816200c720598b8ec5273b4cc4df07 100644 (file)
@@ -252,17 +252,11 @@ class Clang_CompileTool(Tool):
             picEnabled = (arglist.getLastArg(arglist.parser.f_PICOption) or
                           arglist.getLastArg(arglist.parser.f_picOption) or
                           arglist.getLastArg(arglist.parser.f_PIEOption) or
-                          arglist.getLastArg(arglist.parser.f_pieOption) or
-                          (not arglist.getLastArg(arglist.parser.m_kernelOption) and
-                          not arglist.getLastArg(arglist.parser.staticOption) and
-                          not arglist.getLastArg(arglist.parser.m_dynamicNoPicOption)))
-
-            # FIXME: This needs to tie into a platform hook.
-            if (self.toolChain.archName == 'x86_64' or 
-                picEnabled):
-                cmd_args.append('--relocation-model=pic')
-            elif not arglist.getLastArg(arglist.parser.m_dynamicNoPicOption):
-                cmd_args.append('--relocation-model=static')
+                          arglist.getLastArg(arglist.parser.f_pieOption))
+            picDisabled = (arglist.getLastArg(arglist.parser.m_kernelOption) or
+                           arglist.getLastArg(arglist.parser.staticOption))
+            model = self.toolChain.getRelocationModel(picEnabled, picDisabled)
+            cmd_args.append('--relocation-model=%s' % model)
 
             if arglist.getLastArg(arglist.parser.f_timeReportOption):
                 cmd_args.append('--time-passes')
index 480a330436710a286422bad8ca7b1c940cf215a0..1645b1aefc309a5cea4e0e73478bb5749935f9d9 100644 (file)
@@ -8,7 +8,7 @@
 // RUN: xcc -ccc-print-phases -### -arch ppc -arch ppc %s | grep linker- | count 1 &&
 
 // Check that -ccc-clang-archs is honored.
-// RUN: xcc -ccc-clang-archs i386 -### -arch ppc -arch i386 %s 2>&1 | grep clang | count 1
+// RUN: xcc -ccc-clang-archs i386 -### -arch ppc -arch i386 %s 2>&1 | grep 'clang"' | count 1
 
 int main() {
   printf("Hello, World!\n");