Simplify --sysroot=/
authorAlan Modra <amodra@gmail.com>
Mon, 29 Oct 2018 07:39:39 +0000 (18:09 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 29 Oct 2018 07:51:05 +0000 (18:21 +1030)
Prepending '/' to absolute paths doesn't gain us much, and results in
the current implementation of --trace emitting silly path-in-sysroot
output, eg.
/lib/ld-linux-x86-64.so.2 (//lib/ld-linux-x86-64.so.2)

* ldmain.c (get_sysroot): Return "" for "--sysroot=/".

ld/ChangeLog
ld/ldmain.c

index 4dfd2e824157ec8257b6842d632ec7940e042872..d2700bcf562a1dcd689187075be0231ed9c8c36d 100644 (file)
@@ -1,3 +1,7 @@
+2018-10-29  Alan Modra  <amodra@gmail.com>
+
+       * ldmain.c (get_sysroot): Return "" for "--sysroot=/".
+
 2018-10-29  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am (ei386beos.c, ei386go32.c): Correct dependencies.
index 464192049ab6720f15f09df72816c190dc063e3a..6f3ce6f81004ac0039c63d8c8a44e2240b212d53 100644 (file)
@@ -584,21 +584,25 @@ static const char *
 get_sysroot (int argc, char **argv)
 {
   int i;
-  const char *path;
+  const char *path = NULL;
 
   for (i = 1; i < argc; i++)
     if (CONST_STRNEQ (argv[i], "--sysroot="))
-      return argv[i] + strlen ("--sysroot=");
+      path = argv[i] + strlen ("--sysroot=");
 
-  path = get_relative_sysroot (BINDIR);
-  if (path)
-    return path;
+  if (!path)
+    path = get_relative_sysroot (BINDIR);
 
-  path = get_relative_sysroot (TOOLBINDIR);
-  if (path)
-    return path;
+  if (!path)
+    path = get_relative_sysroot (TOOLBINDIR);
+
+  if (!path)
+    path = TARGET_SYSTEM_ROOT;
+
+  if (IS_DIR_SEPARATOR (*path) && path[1] == 0)
+    path = "";
 
-  return TARGET_SYSTEM_ROOT;
+  return path;
 }
 
 /* We need to find any explicitly given emulation in order to initialize the