re PR target/65697 (__atomic memory barriers not strong enough for __sync builtins)
[gcc.git] / gcc / exec-tool.in
index f585163405d7af53162d0a8846edf9888a732beb..f634330dd0c55fe31528baeeb55fe4089f80cd8a 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2007-2015 Free Software Foundation, Inc.
 # This file is part of GCC.
 
 # GCC is free software; you can redistribute it and/or modify
 
 ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@"
 ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@"
+ORIGINAL_LD_BFD_FOR_TARGET="@ORIGINAL_LD_BFD_FOR_TARGET@"
+ORIGINAL_LD_GOLD_FOR_TARGET="@ORIGINAL_LD_GOLD_FOR_TARGET@"
+ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@"
 ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
 exeext=@host_exeext@
 fast_install=@enable_fast_install@
 objdir=@objdir@
 
 invoked=`basename "$0"`
+id=$invoked
 case "$invoked" in
   as)
     original=$ORIGINAL_AS_FOR_TARGET
@@ -34,9 +38,33 @@ case "$invoked" in
     dir=gas
     ;;
   collect-ld)
-    original=$ORIGINAL_LD_FOR_TARGET
+    # Check -fuse-ld=bfd and -fuse-ld=gold
+    case " $* " in
+      *\ -fuse-ld=bfd\ *)
+       original=$ORIGINAL_LD_BFD_FOR_TARGET
+       ;;
+      *\ -fuse-ld=gold\ *)
+       original=$ORIGINAL_LD_GOLD_FOR_TARGET
+       ;;
+      *)
+       # when using a linker plugin, gcc will always pass '-plugin' as the
+       # first or second option to the linker.
+       if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then
+         original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
+       else
+         original=$ORIGINAL_LD_FOR_TARGET
+       fi
+       ;;
+    esac
     prog=ld-new$exeext
-    dir=ld
+    if test "$original" = ../gold/ld-new$exeext; then
+      dir=gold
+      # No need to handle relink since gold doesn't use libtool.
+      fast_install=yes
+    else
+      dir=ld
+    fi
+    id=ld
     ;;
   nm)
     original=$ORIGINAL_NM_FOR_TARGET
@@ -61,9 +89,11 @@ case "$original" in
       # libtool has not relinked ld-new yet, but we cannot just use the
       # previous stage (because then the relinking would just never happen!).
       # So we take extra care to use prev-ld/ld-new *on recursive calls*.
+      eval LT_RCU="\${LT_RCU_$id}"
       test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
 
-      LT_RCU=1; export LT_RCU
+      eval LT_RCU_$id=1
+      export LT_RCU_$id
       $scriptdir/../$dir/$prog ${1+"$@"}
       result=$?
       exit $result
@@ -73,8 +103,6 @@ case "$original" in
     fi
     ;;
   *)
-    exec "$original" ${1+"$@"}
+    exec $original ${1+"$@"}
     ;;
 esac
-
-