src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Linker.java
changeset 48805 decc1bb41107
parent 47216 71c04702a3d5
child 50104 4ea7917929b9
equal deleted inserted replaced
48804:8f451978683c 48805:decc1bb41107
    40         return objectFileName;
    40         return objectFileName;
    41     }
    41     }
    42 
    42 
    43     String libFile() {
    43     String libFile() {
    44         return libraryFileName;
    44         return libraryFileName;
       
    45     }
       
    46 
       
    47     private static String getString(InputStream stream) {
       
    48         BufferedReader br = new BufferedReader(new InputStreamReader(stream));
       
    49         Stream<String> lines = br.lines();
       
    50         StringBuilder sb = new StringBuilder();
       
    51         lines.iterator().forEachRemaining(e -> sb.append(e));
       
    52         return sb.toString();
    45     }
    53     }
    46 
    54 
    47     Linker(Main main) throws Exception {
    55     Linker(Main main) throws Exception {
    48         this.options = main.options;
    56         this.options = main.options;
    49         String name = options.outputName;
    57         String name = options.outputName;
   104         // Check linker presence on platforms by printing its version
   112         // Check linker presence on platforms by printing its version
   105         if (linkerCheck != null) {
   113         if (linkerCheck != null) {
   106             Process p = Runtime.getRuntime().exec(linkerCheck);
   114             Process p = Runtime.getRuntime().exec(linkerCheck);
   107             final int exitCode = p.waitFor();
   115             final int exitCode = p.waitFor();
   108             if (exitCode != 0) {
   116             if (exitCode != 0) {
   109                 InputStream stderr = p.getErrorStream();
   117                 throw new InternalError(getString(p.getErrorStream()));
   110                 BufferedReader br = new BufferedReader(new InputStreamReader(stderr));
       
   111                 Stream<String> lines = br.lines();
       
   112                 StringBuilder sb = new StringBuilder();
       
   113                 lines.iterator().forEachRemaining(e -> sb.append(e));
       
   114                 throw new InternalError(sb.toString());
       
   115             }
   118             }
   116         }
   119         }
   117     }
   120     }
   118 
   121 
   119     void link() throws Exception {
   122     void link() throws Exception {
   120         Process p = Runtime.getRuntime().exec(linkerCmd);
   123         Process p = Runtime.getRuntime().exec(linkerCmd);
   121         final int exitCode = p.waitFor();
   124         final int exitCode = p.waitFor();
   122         if (exitCode != 0) {
   125         if (exitCode != 0) {
   123             InputStream stderr = p.getErrorStream();
   126             String errorMessage = getString(p.getErrorStream());
   124             if (stderr.read() == -1) {
   127             if (errorMessage.isEmpty()) {
   125                 stderr = p.getInputStream();
   128                 errorMessage = getString(p.getInputStream());
   126             }
   129             }
   127             BufferedReader br = new BufferedReader(new InputStreamReader(stderr));
   130             throw new InternalError(errorMessage);
   128             Stream<String> lines = br.lines();
       
   129             StringBuilder sb = new StringBuilder();
       
   130             lines.iterator().forEachRemaining(e -> sb.append(e));
       
   131             throw new InternalError(sb.toString());
       
   132         }
   131         }
   133         File objFile = new File(objectFileName);
   132         File objFile = new File(objectFileName);
   134         if (objFile.exists()) {
   133         if (objFile.exists()) {
   135             if (!objFile.delete()) {
   134             if (!objFile.delete()) {
   136                 throw new InternalError("Failed to delete " + objectFileName + " file");
   135                 throw new InternalError("Failed to delete " + objectFileName + " file");