< prev index next >

test/compiler/aot/AotCompiler.java

Print this page
rev 13544 : 8187020: AOT tests should not fail if devkit dependency isn't resolved
Reviewed-by: duke
rev 13545 : [mq]: 8187020-2

@@ -143,19 +143,40 @@
         System.err.println("Usage: " + AotCompiler.class.getName()
                 + " -class <class> -libname <.so name>"
                 + " [-compile <compileItems>]* [-extraopt <java option>]*");
     }
 
+    // runs ld -v (or ld -V on solaris) and check its exit code
+    private static boolean checkLd(Path bin) {
+        try {
+            return 0 == ProcessTools.executeCommand(bin.toString(),
+                                                    Platform.isSolaris() ? "-V" : "-v")
+                                    .getExitValue();
+        } catch (Throwable t) {
+                        // any errors mean ld doesn't work
+            return false;
+        }
+    }
+
     public static String resolveLinker() {
         Path linker = null;
         // if non windows, 1st, check if PATH has ld
         if (!Platform.isWindows()) {
             String bin = "ld";
             for (String path : System.getenv("PATH").split(File.pathSeparator)) {
-                if (Files.exists(Paths.get(path).resolve(bin))) {
-                    // there is linker in PATH, jaotc is supposed to find it by its own
+                    Path ld = Paths.get(path).resolve("ld");
+                    if (Files.exists(ld)) {
+                        // there is ld in PATH
+                        if (checkLd(ld)) {
+                            System.out.println("found working linker: " + ld);
+                            // ld works, jaotc is supposed to find and use it
                     return null;
+                        } else {
+                            System.out.println("found broken linker: " + ld);
+                            // ld exists in PATH, but doesn't work, have to use devkit
+                            break;
+                        }
                 }
             }
         }
         // there is no ld in PATH, will use ld from devkit
         // artifacts are got from common/conf/jib-profiles.js
< prev index next >