src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java

src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 34,51 **** import java.util.Map; import jdk.tools.jaotc.binformat.Symbol.Binding; import jdk.tools.jaotc.binformat.Symbol.Kind; import jdk.tools.jaotc.binformat.elf.JELFRelocObject; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; /** * A format-agnostic container class that holds various components of a binary. * * <p> * This class holds information necessary to create platform-specific binary containers such as ! * ELFContainer for Linux and Solaris operating systems or yet-to be created MachOContainer for Mac * OS or PEContainer for MS Windows operating systems. * * <p> * Method APIs provided by this class are used to construct and populate platform-independent * contents of a binary as the first step to create a binary representation of code generated by a --- 34,53 ---- import java.util.Map; import jdk.tools.jaotc.binformat.Symbol.Binding; import jdk.tools.jaotc.binformat.Symbol.Kind; import jdk.tools.jaotc.binformat.elf.JELFRelocObject; + import jdk.tools.jaotc.binformat.macho.JMachORelocObject; + import jdk.tools.jaotc.binformat.pecoff.JPECoffRelocObject; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; /** * A format-agnostic container class that holds various components of a binary. * * <p> * This class holds information necessary to create platform-specific binary containers such as ! * ELFContainer for Linux and Solaris operating systems or MachOContainer for Mac * OS or PEContainer for MS Windows operating systems. * * <p> * Method APIs provided by this class are used to construct and populate platform-independent * contents of a binary as the first step to create a binary representation of code generated by a
*** 261,293 **** this.codeSegmentSize = config.codeSegmentSize; this.codeEntryAlignment = config.codeEntryAlignment; // read only, code codeContainer = new CodeContainer(".text", this); ! extLinkageContainer = new CodeContainer(".hotspot.linkage.plt", this); // read only, info configContainer = new ReadOnlyDataContainer(".config", this); ! metaspaceNamesContainer = new ReadOnlyDataContainer(".metaspace.names", this); methodsOffsetsContainer = new ReadOnlyDataContainer(".methods.offsets", this); ! klassesOffsetsContainer = new ReadOnlyDataContainer(".klasses.offsets", this); ! klassesDependenciesContainer = new ReadOnlyDataContainer(".klasses.dependencies", this); headerContainer = new HeaderContainer(jvmVersion, new ReadOnlyDataContainer(".header", this)); stubsOffsetsContainer = new ReadOnlyDataContainer(".stubs.offsets", this); codeSegmentsContainer = new ReadOnlyDataContainer(".code.segments", this); ! constantDataContainer = new ReadOnlyDataContainer(".method.constdata", this); // needs relocation patching at load time by the loader ! methodMetadataContainer = new ReadOnlyDataContainer(".method.metadata", this); // writable sections ! metaspaceGotContainer = new ByteContainer(".metaspace.got", this); metadataGotContainer = new ByteContainer(".metadata.got", this); ! methodStateContainer = new ByteContainer(".method.state", this); oopGotContainer = new ByteContainer(".oop.got", this); ! extLinkageGOTContainer = new ByteContainer(".hotspot.linkage.got", this); addGlobalSymbols(); recordConfiguration(config); } --- 263,295 ---- this.codeSegmentSize = config.codeSegmentSize; this.codeEntryAlignment = config.codeEntryAlignment; // read only, code codeContainer = new CodeContainer(".text", this); ! extLinkageContainer = new CodeContainer(".hs.plt.linkage", this); // read only, info configContainer = new ReadOnlyDataContainer(".config", this); ! metaspaceNamesContainer = new ReadOnlyDataContainer(".meta.names", this); methodsOffsetsContainer = new ReadOnlyDataContainer(".methods.offsets", this); ! klassesOffsetsContainer = new ReadOnlyDataContainer(".kls.offsets", this); ! klassesDependenciesContainer = new ReadOnlyDataContainer(".kls.dependencies", this); headerContainer = new HeaderContainer(jvmVersion, new ReadOnlyDataContainer(".header", this)); stubsOffsetsContainer = new ReadOnlyDataContainer(".stubs.offsets", this); codeSegmentsContainer = new ReadOnlyDataContainer(".code.segments", this); ! constantDataContainer = new ReadOnlyDataContainer(".meth.constdata", this); // needs relocation patching at load time by the loader ! methodMetadataContainer = new ReadOnlyDataContainer(".meth.metadata", this); // writable sections ! metaspaceGotContainer = new ByteContainer(".meta.got", this); metadataGotContainer = new ByteContainer(".metadata.got", this); ! methodStateContainer = new ByteContainer(".meth.state", this); oopGotContainer = new ByteContainer(".oop.got", this); ! extLinkageGOTContainer = new ByteContainer(".hs.got.linkage", this); addGlobalSymbols(); recordConfiguration(config); }
*** 488,501 **** public void createBinary(String outputFileName, String aotVersion) throws IOException { String osName = System.getProperty("os.name"); switch (osName) { case "Linux": case "SunOS": ! JELFRelocObject elfso = new JELFRelocObject(this, outputFileName, aotVersion); ! elfso.createELFRelocObject(relocationTable, symbolTable.values()); break; default: throw new InternalError("Unsupported platform: " + osName); } } /** --- 490,513 ---- public void createBinary(String outputFileName, String aotVersion) throws IOException { String osName = System.getProperty("os.name"); switch (osName) { case "Linux": case "SunOS": ! JELFRelocObject elfobj = new JELFRelocObject(this, outputFileName, aotVersion); ! elfobj.createELFRelocObject(relocationTable, symbolTable.values()); ! break; ! case "Mac OS X": ! JMachORelocObject machobj = new JMachORelocObject(this, outputFileName); ! machobj.createMachORelocObject(relocationTable, symbolTable.values()); break; default: + if (osName.startsWith("Windows")) { + JPECoffRelocObject pecoffobj = new JPECoffRelocObject(this, outputFileName, aotVersion); + pecoffobj.createPECoffRelocObject(relocationTable, symbolTable.values()); + break; + } + else throw new InternalError("Unsupported platform: " + osName); } } /**
*** 733,747 **** container.appendInt(count); return offset; } /** ! * Add constant data as follows. - Adding the data to the method.constdata section * * @param data * @param alignment ! * @return the offset in the method.constdata of the data */ public int addConstantData(byte[] data, int alignment) { // Get the current length of the metaspaceNameContainer int constantDataOffset = alignUp(constantDataContainer, alignment); constantDataContainer.appendBytes(data, 0, data.length); --- 745,759 ---- container.appendInt(count); return offset; } /** ! * Add constant data as follows. - Adding the data to the meth.constdata section * * @param data * @param alignment ! * @return the offset in the meth.constdata of the data */ public int addConstantData(byte[] data, int alignment) { // Get the current length of the metaspaceNameContainer int constantDataOffset = alignUp(constantDataContainer, alignment); constantDataContainer.appendBytes(data, 0, data.length);
src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File