re PR target/65697 (__atomic memory barriers not strong enough for __sync builtins)
[gcc.git] / gcc / exec-tool.in
index 8a10775731b1b8332560a8887a20efe64c31d43e..f634330dd0c55fe31528baeeb55fe4089f80cd8a 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2007, 2008, 2010 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
@@ -21,6 +21,8 @@
 
 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@
@@ -36,15 +38,32 @@ case "$invoked" in
     dir=gas
     ;;
   collect-ld)
-    # 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
+    # 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
+    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
-      original=$ORIGINAL_LD_FOR_TARGET
+      dir=ld
     fi
-    prog=ld-new$exeext
-    dir=ld
     id=ld
     ;;
   nm)