# HG changeset patch # User iignatyev # Date 1504304934 25200 # Node ID 2cce48107f55b55b426fca6321c34e2d2351980e # Parent 8b2054b7d02c8a2a37f66468740716b5d5bac230 8187020: AOT tests should not fail if devkit dependency isn't resolved Reviewed-by: kvn diff -r 8b2054b7d02c -r 2cce48107f55 test/hotspot/jtreg/compiler/aot/AotCompiler.java --- a/test/hotspot/jtreg/compiler/aot/AotCompiler.java Thu Sep 28 13:52:15 2017 -0700 +++ b/test/hotspot/jtreg/compiler/aot/AotCompiler.java Fri Sep 01 15:28:54 2017 -0700 @@ -145,13 +145,37 @@ + " [-compile ]* [-extraopt ]*"); } + // 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; - // 1st, check if PATH has ld - for (String path : System.getenv("PATH").split(File.pathSeparator)) { - if (Files.exists(Paths.get(path).resolve("ld"))) { - // there is ld in PATH, jaotc is supposed to find it by its own - return 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)) { + 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 @@ -275,7 +299,9 @@ } } } catch (FileNotFoundException e) { - throw new Error("artifact resolution error: " + e, e); + System.err.println("artifact resolution error: " + e); + // let jaotc try to find linker + return null; } if (linker != null) { return linker.toAbsolutePath().toString();