diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java
index f6201f6e341..fea747e5a91 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java
@@ -58,7 +58,7 @@ import org.graalvm.compiler.options.OptionValues;
*
* Methods to record and access code section contents, symbols and relocations are provided.
*/
-public class BinaryContainer implements SymbolTable {
+public final class BinaryContainer implements SymbolTable {
private final OptionValues graalOptions;
private final int codeSegmentSize;
@@ -70,20 +70,20 @@ public class BinaryContainer implements SymbolTable {
*/
private final CodeContainer codeContainer;
- /**
- * Container holding external hotspot linkage bits (PLT entries).
- */
- private final CodeContainer extLinkageContainer;
-
/**
* Container holding global offset data for hotspot linkage.
*/
private final ByteContainer extLinkageGOTContainer;
/**
- * Patched by HotSpot, contains metaspace pointers.
+ * Patched by HotSpot, contains Klass pointers.
*/
- private final ByteContainer metaspaceGotContainer;
+ private final ByteContainer klassesGotContainer;
+
+ /**
+ * Patched by HotSpot, contains MethodCounters pointers.
+ */
+ private final ByteContainer countersGotContainer;
/**
* Patched lazily by hotspot, contains klass/method pointers.
@@ -268,33 +268,41 @@ public class BinaryContainer implements SymbolTable {
this.graalOptions = graalOptions;
this.codeSegmentSize = graalHotSpotVMConfig.codeSegmentSize;
+ if (codeSegmentSize < 1 || codeSegmentSize > 1024) {
+ throw new InternalError("codeSegmentSize is not in range [1, 1024] bytes: (" + codeSegmentSize + "), update JPECoffRelocObject");
+ }
+ if ((codeSegmentSize & (codeSegmentSize - 1)) != 0) {
+ throw new InternalError("codeSegmentSize is not power of 2: (" + codeSegmentSize + "), update JPECoffRelocObject");
+ }
+
this.codeEntryAlignment = graalHotSpotVMConfig.codeEntryAlignment;
+ // Section unique name is limited to 8 characters due to limitation on Windows.
+ // Name could be longer but only first 8 characters are stored on Windows.
+
// read only, code
codeContainer = new CodeContainer(".text", this);
- extLinkageContainer = new CodeContainer(".hs.plt.linkage", this);
// read only, info
+ headerContainer = new HeaderContainer(jvmVersion, new ReadOnlyDataContainer(".header", this));
configContainer = new ReadOnlyDataContainer(".config", this);
metaspaceNamesContainer = new ReadOnlyDataContainer(".meta.names", this);
- methodsOffsetsContainer = new ReadOnlyDataContainer(".methods.offsets", this);
+ methodsOffsetsContainer = new ReadOnlyDataContainer(".meth.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);
+ klassesGotContainer = new ByteContainer(".kls.got", this);
+ countersGotContainer = new ByteContainer(".cnt.got", this);
+ metadataGotContainer = new ByteContainer(".meta.got", this);
+ methodStateContainer = new ByteContainer(".meth.state", this);
+ extLinkageGOTContainer = new ByteContainer(".got.linkage", this);
addGlobalSymbols();
@@ -368,51 +376,51 @@ public class BinaryContainer implements SymbolTable {
* in the named GOT cell.
*/
- public String getCardTableAddressSymbolName() {
+ public static String getCardTableAddressSymbolName() {
return "_aot_card_table_address";
}
- public String getHeapTopAddressSymbolName() {
+ public static String getHeapTopAddressSymbolName() {
return "_aot_heap_top_address";
}
- public String getHeapEndAddressSymbolName() {
+ public static String getHeapEndAddressSymbolName() {
return "_aot_heap_end_address";
}
- public String getCrcTableAddressSymbolName() {
+ public static String getCrcTableAddressSymbolName() {
return "_aot_stub_routines_crc_table_adr";
}
- public String getPollingPageSymbolName() {
+ public static String getPollingPageSymbolName() {
return "_aot_polling_page";
}
- public String getResolveStaticEntrySymbolName() {
+ public static String getResolveStaticEntrySymbolName() {
return "_resolve_static_entry";
}
- public String getResolveVirtualEntrySymbolName() {
+ public static String getResolveVirtualEntrySymbolName() {
return "_resolve_virtual_entry";
}
- public String getResolveOptVirtualEntrySymbolName() {
+ public static String getResolveOptVirtualEntrySymbolName() {
return "_resolve_opt_virtual_entry";
}
- public String getNarrowKlassBaseAddressSymbolName() {
+ public static String getNarrowKlassBaseAddressSymbolName() {
return "_aot_narrow_klass_base_address";
}
- public String getNarrowOopBaseAddressSymbolName() {
+ public static String getNarrowOopBaseAddressSymbolName() {
return "_aot_narrow_oop_base_address";
}
- public String getLogOfHeapRegionGrainBytesSymbolName() {
+ public static String getLogOfHeapRegionGrainBytesSymbolName() {
return "_aot_log_of_heap_region_grain_bytes";
}
- public String getInlineContiguousAllocationSupportedSymbolName() {
+ public static String getInlineContiguousAllocationSupportedSymbolName() {
return "_aot_inline_contiguous_allocation_supported";
}
@@ -430,7 +438,7 @@ public class BinaryContainer implements SymbolTable {
* @param functionName function name
* @return AOT symbol for the given function name, or null if there is no mapping.
*/
- public String getAOTSymbolForVMFunctionName(String functionName) {
+ public static String getAOTSymbolForVMFunctionName(String functionName) {
return functionNamesToAOTSymbols.get(functionName);
}
@@ -441,7 +449,8 @@ public class BinaryContainer implements SymbolTable {
createContainerSymbol(methodsOffsetsContainer);
createContainerSymbol(klassesOffsetsContainer);
createContainerSymbol(klassesDependenciesContainer);
- createContainerSymbol(metaspaceGotContainer);
+ createContainerSymbol(klassesGotContainer);
+ createContainerSymbol(countersGotContainer);
createContainerSymbol(metadataGotContainer);
createContainerSymbol(methodStateContainer);
createContainerSymbol(oopGotContainer);
@@ -469,12 +478,13 @@ public class BinaryContainer implements SymbolTable {
}
/**
- * Creates a global symbol of the form {@code "JVM" + container name}.
+ * Creates a global symbol of the form {@code "A" + container name}.
+ * Note, linker on Windows does not allow names which start with '.'
*
* @param container container to create a symbol for
*/
private static void createContainerSymbol(ByteContainer container) {
- container.createSymbol(0, Kind.OBJECT, Binding.GLOBAL, 0, "JVM" + container.getContainerName());
+ container.createSymbol(0, Kind.OBJECT, Binding.GLOBAL, 0, "A" + container.getContainerName());
}
/**
@@ -499,12 +509,12 @@ public class BinaryContainer implements SymbolTable {
*
* @throws IOException in case of file creation failure
*/
- public void createBinary(String outputFileName, String aotVersion) throws IOException {
+ public void createBinary(String outputFileName) throws IOException {
String osName = System.getProperty("os.name");
switch (osName) {
case "Linux":
case "SunOS":
- JELFRelocObject elfobj = new JELFRelocObject(this, outputFileName, aotVersion);
+ JELFRelocObject elfobj = new JELFRelocObject(this, outputFileName);
elfobj.createELFRelocObject(relocationTable, symbolTable.values());
break;
case "Mac OS X":
@@ -513,7 +523,7 @@ public class BinaryContainer implements SymbolTable {
break;
default:
if (osName.startsWith("Windows")) {
- JPECoffRelocObject pecoffobj = new JPECoffRelocObject(this, outputFileName, aotVersion);
+ JPECoffRelocObject pecoffobj = new JPECoffRelocObject(this, outputFileName);
pecoffobj.createPECoffRelocObject(relocationTable, symbolTable.values());
break;
} else
@@ -626,12 +636,6 @@ public class BinaryContainer implements SymbolTable {
return startOffset;
}
- public int appendMetaspaceGotBytes(byte[] bytes, int offset, int size) {
- int startOffset = metaspaceGotContainer.getByteStreamSize();
- appendBytes(metaspaceGotContainer, bytes, offset, size);
- return startOffset;
- }
-
public void addMetadataGotEntry(int offset) {
metadataGotContainer.appendLong(offset);
}
@@ -681,8 +685,7 @@ public class BinaryContainer implements SymbolTable {
}
/**
- * Add oop symbol by as follows. Extend the oop.got section with another slot for the VM to
- * patch.
+ * Add oop symbol by as follows. Extend the oop.got section with another slot for the VM to patch.
*
* @param oopName name of the oop symbol
*/
@@ -708,13 +711,13 @@ public class BinaryContainer implements SymbolTable {
return relocationSymbol.getOffset();
}
- public int addMetaspaceSymbol(String metaspaceName) {
+ public int addCountersSymbol(String metaspaceName) {
String gotName = "got." + metaspaceName;
Symbol relocationSymbol = getGotSymbol(gotName);
int metaspaceOffset = -1;
if (relocationSymbol == null) {
// Add slots when asked in the .metaspace.got section:
- metaspaceGotContainer.createGotSymbol(gotName);
+ countersGotContainer.createGotSymbol(gotName);
}
return metaspaceOffset;
}
@@ -725,29 +728,30 @@ public class BinaryContainer implements SymbolTable {
}
/**
- * Add metaspace symbol by as follows. - Adding the symbol name to the metaspace.names section -
- * Add the offset of the name in metaspace.names to metaspace.offsets - Extend the metaspace.got
- * section with another slot for the VM to patch
+ * Add klass symbol by as follows.
+ * - Adding the symbol name to the metaspace.names section
+ * - Add the offset of the name in metaspace.names to metaspace.offsets
+ * - Extend the klasses.got section with another slot for the VM to patch
*
- * @param metaspaceName name of the metaspace symbol
- * @return the got offset in the metaspace.got of the metaspace symbol
+ * @param klassName name of the metaspace symbol
+ * @return the got offset in the klasses.got of the metaspace symbol
*/
- public int addTwoSlotMetaspaceSymbol(String metaspaceName) {
- String gotName = "got." + metaspaceName;
+ public int addTwoSlotKlassSymbol(String klassName) {
+ String gotName = "got." + klassName;
Symbol previous = getGotSymbol(gotName);
- assert previous == null : "should be called only once for: " + metaspaceName;
+ assert previous == null : "should be called only once for: " + klassName;
// Add slots when asked in the .metaspace.got section:
// First slot
- String gotInitName = "got.init." + metaspaceName;
- GotSymbol slot1Symbol = metaspaceGotContainer.createGotSymbol(gotInitName);
- GotSymbol slot2Symbol = metaspaceGotContainer.createGotSymbol(gotName);
+ String gotInitName = "got.init." + klassName;
+ GotSymbol slot1Symbol = klassesGotContainer.createGotSymbol(gotInitName);
+ GotSymbol slot2Symbol = klassesGotContainer.createGotSymbol(gotName);
slot1Symbol.getIndex(); // check alignment and ignore result
// Get the index (offset/8) to the got in the .metaspace.got section
return slot2Symbol.getIndex();
}
- public int addMethodsCount(int count, ReadOnlyDataContainer container) {
+ public static int addMethodsCount(int count, ReadOnlyDataContainer container) {
return appendInt(count, container);
}
@@ -772,7 +776,7 @@ public class BinaryContainer implements SymbolTable {
return constantDataOffset;
}
- public int alignUp(ByteContainer container, int alignment) {
+ public static int alignUp(ByteContainer container, int alignment) {
if (Integer.bitCount(alignment) != 1) {
throw new IllegalArgumentException("Must be a power of 2");
}
@@ -814,15 +818,11 @@ public class BinaryContainer implements SymbolTable {
appendBytes(codeSegmentsContainer, segments, 0, segmentsCount);
}
- public CodeContainer getExtLinkageContainer() {
- return extLinkageContainer;
- }
-
public ByteContainer getExtLinkageGOTContainer() {
return extLinkageGOTContainer;
}
- public ByteContainer getMethodMetadataContainer() {
+ public ReadOnlyDataContainer getMethodMetadataContainer() {
return methodMetadataContainer;
}
@@ -854,8 +854,12 @@ public class BinaryContainer implements SymbolTable {
return constantDataContainer;
}
- public ByteContainer getMetaspaceGotContainer() {
- return metaspaceGotContainer;
+ public ByteContainer getKlassesGotContainer() {
+ return klassesGotContainer;
+ }
+
+ public ByteContainer getCountersGotContainer() {
+ return countersGotContainer;
}
public ByteContainer getMetadataGotContainer() {
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/CodeContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/CodeContainer.java
index e562d35e2cc..26bf696db16 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/CodeContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/CodeContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -26,7 +26,7 @@ package jdk.tools.jaotc.binformat;
/**
* A container that holds information about code section. This is simply a ByteContainer.
*/
-public class CodeContainer extends ByteContainer {
+public final class CodeContainer extends ByteContainer {
public CodeContainer(String containerName, SymbolTable symbolTable) {
super(containerName, symbolTable);
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Container.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Container.java
index ad2b405ab90..b970de601f1 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Container.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Container.java
@@ -23,7 +23,7 @@
package jdk.tools.jaotc.binformat;
-public interface Container {
+interface Container {
String getContainerName();
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/GotSymbol.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/GotSymbol.java
index 3d77e79f35f..d4d218f153c 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/GotSymbol.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/GotSymbol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,7 +23,7 @@
package jdk.tools.jaotc.binformat;
-public class GotSymbol extends Symbol {
+public final class GotSymbol extends Symbol {
private static final int GOT_SIZE = 8;
@@ -33,18 +33,27 @@ public class GotSymbol extends Symbol {
return offset / GOT_SIZE;
}
+ /**
+ * Create GOT symbol info.
+ *
+ * @param type type of the symbol (UNDEFINED, FUNC, etc)
+ * @param binding binding of the symbol (LOCAL, GLOBAL, ...)
+ * @param container section in which this symbol is "defined"
+ * @param name name of the symbol
+ */
public GotSymbol(Kind type, Binding binding, ByteContainer container, String name) {
this(container.getByteStreamSize(), type, binding, container, name);
container.appendBytes(new byte[GOT_SIZE], 0, GOT_SIZE);
}
/**
- * Create symbol info.
+ * Create GOT symbol info.
*
* @param offset section offset for the defined symbol
* @param type type of the symbol (UNDEFINED, FUNC, etc)
* @param binding binding of the symbol (LOCAL, GLOBAL, ...)
* @param sec section in which this symbol is "defined"
+ * @param name name of the symbol
*/
public GotSymbol(int offset, Kind type, Binding binding, ByteContainer sec, String name) {
super(offset, type, binding, sec, GOT_SIZE, name);
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/HeaderContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/HeaderContainer.java
index 85250d3973e..20ab33a9d36 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/HeaderContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/HeaderContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -27,14 +27,15 @@ import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
-public class HeaderContainer {
+public final class HeaderContainer {
private static final int CURRENT_VERSION = 1;
private final ReadOnlyDataContainer container;
+
// int _version;
// int _class_count;
// int _method_count;
- // int _metaspace_got_size;
+ // int _klasses_got_size;
// int _metadata_got_size;
// int _oop_got_size;
// int _jvm_version_offset;
@@ -76,7 +77,7 @@ public class HeaderContainer {
this.container.putIntAt(2 * 4, count);
}
- public void setMetaspaceGotSize(int size) {
+ public void setKlassesGotSize(int size) {
this.container.putIntAt(3 * 4, size);
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/ReadOnlyDataContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/ReadOnlyDataContainer.java
index fe72f068d79..cfbe207c635 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/ReadOnlyDataContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/ReadOnlyDataContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,9 +23,9 @@
package jdk.tools.jaotc.binformat;
-public class ReadOnlyDataContainer extends ByteContainer {
+public final class ReadOnlyDataContainer extends ByteContainer {
- public ReadOnlyDataContainer(String containerName, SymbolTable symbolTable) {
+ ReadOnlyDataContainer(String containerName, SymbolTable symbolTable) {
super(containerName, symbolTable);
}
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Relocation.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Relocation.java
index e7d1e3f1c33..905c83f124a 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Relocation.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Relocation.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,25 +23,17 @@
package jdk.tools.jaotc.binformat;
-public class Relocation {
+public final class Relocation {
public enum RelocType {
UNDEFINED,
JAVA_CALL_INDIRECT,
JAVA_CALL_DIRECT,
- FOREIGN_CALL_INDIRECT,
FOREIGN_CALL_INDIRECT_GOT, // Call to address in GOT cell
- FOREIGN_CALL_DIRECT,
- FOREIGN_CALL_DIRECT_FAR,
STUB_CALL_DIRECT,
- STUB_CALL_INDIRECT,
- EXTERNAL_DATA_REFERENCE_FAR,
METASPACE_GOT_REFERENCE,
EXTERNAL_GOT_TO_PLT,
- EXTERNAL_PLT_TO_GOT,
- STATIC_STUB_TO_STATIC_METHOD,
- STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT,
- LOADTIME_ADDRESS
+ EXTERNAL_PLT_TO_GOT
}
private final RelocType type;
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Symbol.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Symbol.java
index 8fbc0dd23a6..3bfad601f73 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Symbol.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/Symbol.java
@@ -39,7 +39,6 @@ public class Symbol {
UNDEFINED,
NATIVE_FUNCTION,
JAVA_FUNCTION,
- STATIC_STUB_CALL, // static call stub inside the text section
OBJECT,
NOTYPE
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/Elf.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/Elf.java
index e61176d07e7..fd12e3cb685 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/Elf.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/Elf.java
@@ -25,17 +25,16 @@ package jdk.tools.jaotc.binformat.elf;
/**
*
- * Support for the creation of Elf Object files.
- * Current support is limited to 64 bit x86_64.
+ * Support for the creation of Elf Object files. Current support is limited to 64 bit x86_64.
*
*/
-public class Elf {
-
+final class Elf {
+ //@formatter:off
/**
* Elf64_Ehdr structure defines
*/
- public enum Elf64_Ehdr {
+ enum Elf64_Ehdr {
e_ident( 0,16),
e_type(16, 2),
e_machine(18, 2),
@@ -51,15 +50,15 @@ public class Elf {
e_shnum(60, 2),
e_shstrndx(62, 2);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
Elf64_Ehdr(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 64;
+ static int totalsize = 64;
/**
* Elf64_Ehdr defines
@@ -68,50 +67,44 @@ public class Elf {
/**
* e_ident
*/
- public static final int EI_MAG0 = 0;
- public static final byte ELFMAG0 = 0x7f;
- public static final int EI_MAG1 = 1;
- public static final byte ELFMAG1 = 0x45;
- public static final int EI_MAG2 = 2;
- public static final byte ELFMAG2 = 0x4c;
- public static final int EI_MAG3 = 3;
- public static final byte ELFMAG3 = 0x46;
+ static final int EI_MAG0 = 0;
+ static final byte ELFMAG0 = 0x7f;
+ static final int EI_MAG1 = 1;
+ static final byte ELFMAG1 = 0x45;
+ static final int EI_MAG2 = 2;
+ static final byte ELFMAG2 = 0x4c;
+ static final int EI_MAG3 = 3;
+ static final byte ELFMAG3 = 0x46;
+ static final int EI_CLASS = 4;
+ static final byte ELFCLASS64 = 0x2;
- public static final int EI_CLASS = 4;
- public static final byte ELFCLASS64 = 0x2;
+ static final int EI_DATA = 5;
+ static final byte ELFDATA2LSB = 0x1;
- public static final int EI_DATA = 5;
- public static final byte ELFDATA2LSB = 0x1;
+ static final int EI_VERSION = 6;
+ static final byte EV_CURRENT = 0x1;
- public static final int EI_VERSION = 6;
- public static final byte EV_CURRENT = 0x1;
-
- public static final int EI_OSABI = 7;
- public static final byte ELFOSABI_NONE = 0x0;
+ static final int EI_OSABI = 7;
+ static final byte ELFOSABI_NONE = 0x0;
/**
* e_type
*/
- public static final char ET_REL = 0x1;
+ static final char ET_REL = 0x1;
/**
* e_machine
*/
- public static final char EM_NONE = 0;
- public static final char EM_X86_64 = 62;
- public static final char EM_AARCH64 = 183;
-
- /**
- * e_version
- */
- // public static final int EV_CURRENT = 1;
+ static final char EM_NONE = 0;
+ static final char EM_X86_64 = 62;
+ static final char EM_AARCH64 = 183;
}
/**
* Elf64_Shdr structure defines
*/
- public enum Elf64_Shdr {
+ enum Elf64_Shdr {
sh_name( 0, 4),
sh_type( 4, 4),
sh_flags( 8, 8),
@@ -123,15 +116,15 @@ public class Elf {
sh_addralign(48, 8),
sh_entsize(56, 8);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
Elf64_Shdr(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 64;
+ static int totalsize = 64;
/**
* Elf64_Shdr defines
@@ -140,21 +133,21 @@ public class Elf {
/**
* sh_type
*/
- public static final int SHT_PROGBITS = 0x1;
- public static final int SHT_SYMTAB = 0x2;
- public static final int SHT_STRTAB = 0x3;
- public static final int SHT_RELA = 0x4;
- public static final int SHT_NOBITS = 0x8;
- public static final int SHT_REL = 0x9;
+ static final int SHT_PROGBITS = 0x1;
+ static final int SHT_SYMTAB = 0x2;
+ static final int SHT_STRTAB = 0x3;
+ static final int SHT_RELA = 0x4;
+ static final int SHT_NOBITS = 0x8;
+ static final int SHT_REL = 0x9;
- public static final byte SHN_UNDEF = 0x0;
+ static final byte SHN_UNDEF = 0x0;
/**
* sh_flag
*/
- public static final int SHF_WRITE = 0x1;
- public static final int SHF_ALLOC = 0x2;
- public static final int SHF_EXECINSTR = 0x4;
+ static final int SHF_WRITE = 0x1;
+ static final int SHF_ALLOC = 0x2;
+ static final int SHF_EXECINSTR = 0x4;
}
@@ -163,7 +156,7 @@ public class Elf {
*
* Elf64_Sym structure defines
*/
- public enum Elf64_Sym {
+ enum Elf64_Sym {
st_name( 0, 4),
st_info( 4, 1),
st_other( 5, 1),
@@ -171,25 +164,25 @@ public class Elf {
st_value( 8, 8),
st_size(16, 8);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
Elf64_Sym(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 24;
+ static int totalsize = 24;
/* ST_BIND is in bits 4-7 of st_info. ST_TYPE is in low 4 bits */
- public static final byte STB_LOCAL = 0x0;
- public static final byte STB_GLOBAL = 0x1;
+ static final byte STB_LOCAL = 0x0;
+ static final byte STB_GLOBAL = 0x1;
- public static final byte STT_NOTYPE = 0x0;
- public static final byte STT_OBJECT = 0x1;
- public static final byte STT_FUNC = 0x2;
+ static final byte STT_NOTYPE = 0x0;
+ static final byte STT_OBJECT = 0x1;
+ static final byte STT_FUNC = 0x2;
- public static byte ELF64_ST_INFO(byte bind, byte type) {
+ static byte ELF64_ST_INFO(byte bind, byte type) {
return (byte)(((bind) << 4) + ((type) & 0xf));
}
@@ -198,59 +191,59 @@ public class Elf {
/**
* Elf64_Rel structure defines
*/
- public enum Elf64_Rel {
+ enum Elf64_Rel {
r_offset( 0, 8),
r_info( 8, 8);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
Elf64_Rel(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 16;
+ static int totalsize = 16;
/**
* Relocation types
*/
- public static final int R_X86_64_NONE = 0x0;
- public static final int R_X86_64_64 = 0x1;
- public static final int R_X86_64_PC32 = 0x2;
- public static final int R_X86_64_PLT32 = 0x4;
- public static final int R_X86_64_GOTPCREL = 0x9;
+ static final int R_X86_64_NONE = 0x0;
+ static final int R_X86_64_64 = 0x1;
+ static final int R_X86_64_PC32 = 0x2;
+ static final int R_X86_64_PLT32 = 0x4;
+ static final int R_X86_64_GOTPCREL = 0x9;
}
/**
* Elf64_Rela structure defines
*/
- public enum Elf64_Rela {
+ enum Elf64_Rela {
r_offset( 0, 8),
r_info( 8, 8),
r_addend(16, 8);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
Elf64_Rela(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 24;
+ static int totalsize = 24;
- public static final int R_X86_64_NONE = 0x0;
- public static final int R_X86_64_64 = 0x1;
- public static final int R_X86_64_PC32 = 0x2;
- public static final int R_X86_64_PLT32 = 0x4;
- public static final int R_X86_64_GOTPCREL = 0x9;
+ static final int R_X86_64_NONE = 0x0;
+ static final int R_X86_64_64 = 0x1;
+ static final int R_X86_64_PC32 = 0x2;
+ static final int R_X86_64_PLT32 = 0x4;
+ static final int R_X86_64_GOTPCREL = 0x9;
- public static long ELF64_R_INFO(int symidx, int type) {
- return (((long)symidx << 32) + ((long)type));
+ static long ELF64_R_INFO(int symidx, int type) {
+ return (((long)symidx << 32) + type);
}
}
-
+ //@formatter:on
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfByteBuffer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfByteBuffer.java
index 8d7c8e7d41d..5c1604358aa 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfByteBuffer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfByteBuffer.java
@@ -23,20 +23,20 @@
package jdk.tools.jaotc.binformat.elf;
-
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.ElfTargetInfo;
-public class ElfByteBuffer {
+final class ElfByteBuffer {
- public static ByteBuffer allocate(int size) {
+ static ByteBuffer allocate(int size) {
ByteBuffer buf = ByteBuffer.allocate(size);
- if (ElfTargetInfo.getElfEndian() == Elf64_Ehdr.ELFDATA2LSB)
+ if (ElfTargetInfo.getElfEndian() == Elf64_Ehdr.ELFDATA2LSB) {
buf.order(ByteOrder.LITTLE_ENDIAN);
- else
+ } else {
buf.order(ByteOrder.BIG_ENDIAN);
+ }
return (buf);
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfContainer.java
index 03b8682c95e..71e4848dd48 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfContainer.java
@@ -26,14 +26,13 @@ package jdk.tools.jaotc.binformat.elf;
import java.io.File;
import java.io.FileOutputStream;
-public class ElfContainer {
+final class ElfContainer {
- File outputFile;
- FileOutputStream outputStream;
- long fileOffset;
+ private final File outputFile;
+ private FileOutputStream outputStream;
+ private long fileOffset;
- public ElfContainer(String fileName, String aotVersion) {
- String baseName;
+ ElfContainer(String fileName) {
outputFile = new File(fileName);
if (outputFile.exists()) {
@@ -48,7 +47,7 @@ public class ElfContainer {
fileOffset = 0;
}
- public void close() {
+ void close() {
try {
outputStream.close();
} catch (Exception e) {
@@ -56,8 +55,10 @@ public class ElfContainer {
}
}
- public void writeBytes(byte [] bytes) {
- if (bytes == null) return;
+ void writeBytes(byte[] bytes) {
+ if (bytes == null) {
+ return;
+ }
try {
outputStream.write(bytes);
} catch (Exception e) {
@@ -67,11 +68,13 @@ public class ElfContainer {
}
// Write bytes to output file with up front alignment padding
- public void writeBytes(byte [] bytes, int alignment) {
- if (bytes == null) return;
+ void writeBytes(byte[] bytes, int alignment) {
+ if (bytes == null) {
+ return;
+ }
try {
// Pad to alignment
- while ((fileOffset & (long)(alignment-1)) != 0) {
+ while ((fileOffset & (alignment - 1)) != 0) {
outputStream.write(0);
fileOffset++;
}
@@ -82,4 +85,3 @@ public class ElfContainer {
fileOffset += bytes.length;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfHeader.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfHeader.java
index e930d5580a3..fea3c614da6 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfHeader.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfHeader.java
@@ -24,55 +24,52 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Shdr;
import jdk.tools.jaotc.binformat.elf.ElfTargetInfo;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfHeader {
- ByteBuffer header;
+final class ElfHeader {
+ private final ByteBuffer header;
- public ElfHeader() {
+ ElfHeader() {
header = ElfByteBuffer.allocate(Elf64_Ehdr.totalsize);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_MAG0, Elf64_Ehdr.ELFMAG0);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_MAG1, Elf64_Ehdr.ELFMAG1);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_MAG2, Elf64_Ehdr.ELFMAG2);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_MAG3, Elf64_Ehdr.ELFMAG3);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_CLASS, Elf64_Ehdr.ELFCLASS64);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_DATA, Elf64_Ehdr.ELFDATA2LSB);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_VERSION, Elf64_Ehdr.EV_CURRENT);
- header.put(Elf64_Ehdr.e_ident.off+Elf64_Ehdr.EI_OSABI, Elf64_Ehdr.ELFOSABI_NONE);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_MAG0, Elf64_Ehdr.ELFMAG0);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_MAG1, Elf64_Ehdr.ELFMAG1);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_MAG2, Elf64_Ehdr.ELFMAG2);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_MAG3, Elf64_Ehdr.ELFMAG3);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_CLASS, Elf64_Ehdr.ELFCLASS64);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_DATA, Elf64_Ehdr.ELFDATA2LSB);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_VERSION, Elf64_Ehdr.EV_CURRENT);
+ header.put(Elf64_Ehdr.e_ident.off + Elf64_Ehdr.EI_OSABI, Elf64_Ehdr.ELFOSABI_NONE);
header.putChar(Elf64_Ehdr.e_type.off, Elf64_Ehdr.ET_REL);
header.putChar(Elf64_Ehdr.e_machine.off, ElfTargetInfo.getElfArch());
header.putInt(Elf64_Ehdr.e_version.off, Elf64_Ehdr.EV_CURRENT);
- header.putChar(Elf64_Ehdr.e_ehsize.off, (char)Elf64_Ehdr.totalsize);
- header.putChar(Elf64_Ehdr.e_shentsize.off, (char)Elf64_Shdr.totalsize);
+ header.putChar(Elf64_Ehdr.e_ehsize.off, (char) Elf64_Ehdr.totalsize);
+ header.putChar(Elf64_Ehdr.e_shentsize.off, (char) Elf64_Shdr.totalsize);
}
// Update header with file offset of first section
- public void setSectionOff(int offset) {
+ void setSectionOff(int offset) {
header.putLong(Elf64_Ehdr.e_shoff.off, offset);
}
// Update header with the number of total sections
- public void setSectionNum(int count) {
- header.putChar(Elf64_Ehdr.e_shnum.off, (char)count);
+ void setSectionNum(int count) {
+ header.putChar(Elf64_Ehdr.e_shnum.off, (char) count);
}
// Update header with the section index containing the
// string table for section names
- public void setSectionStrNdx(int index) {
- header.putChar(Elf64_Ehdr.e_shstrndx.off, (char)index);
+ void setSectionStrNdx(int index) {
+ header.putChar(Elf64_Ehdr.e_shstrndx.off, (char) index);
}
- public byte[] getArray() {
+ byte[] getArray() {
return header.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocEntry.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocEntry.java
index 817648ec65b..4624edb9b3a 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocEntry.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocEntry.java
@@ -24,28 +24,23 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rela;
-import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
-import jdk.tools.jaotc.binformat.elf.ElfTargetInfo;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfRelocEntry {
- ByteBuffer entry;
+final class ElfRelocEntry {
+ private final ByteBuffer entry;
- public ElfRelocEntry(int offset, int symno, int type, int addend) {
+ ElfRelocEntry(int offset, int symno, int type, int addend) {
entry = ElfByteBuffer.allocate(Elf64_Rela.totalsize);
entry.putLong(Elf64_Rela.r_offset.off, offset);
- entry.putLong(Elf64_Rela.r_info.off, Elf64_Rela.ELF64_R_INFO(symno,type));
+ entry.putLong(Elf64_Rela.r_info.off, Elf64_Rela.ELF64_R_INFO(symno, type));
entry.putLong(Elf64_Rela.r_addend.off, addend);
}
- public byte[] getArray() {
+ byte[] getArray() {
return entry.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocTable.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocTable.java
index 0e28a9f384e..f3d7349786f 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocTable.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfRelocTable.java
@@ -25,48 +25,38 @@ package jdk.tools.jaotc.binformat.elf;
import java.util.ArrayList;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.elf.ElfRelocEntry;
-import jdk.tools.jaotc.binformat.elf.ElfTargetInfo;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rela;
-import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfRelocTable {
- ArrayList> relocEntries;
+final class ElfRelocTable {
+ private final ArrayList> relocEntries;
- public ElfRelocTable(int numsects) {
- relocEntries = new ArrayList>(numsects);
- for (int i = 0; i < numsects; i++)
+ ElfRelocTable(int numsects) {
+ relocEntries = new ArrayList<>(numsects);
+ for (int i = 0; i < numsects; i++) {
relocEntries.add(new ArrayList());
+ }
}
- public void createRelocationEntry(int sectindex,
- int offset,
- int symno,
- int type,
- int addend) {
-
- ElfRelocEntry entry = new ElfRelocEntry(offset,
- symno,
- type,
- addend);
+ void createRelocationEntry(int sectindex, int offset, int symno, int type, int addend) {
+ ElfRelocEntry entry = new ElfRelocEntry(offset, symno, type, addend);
relocEntries.get(sectindex).add(entry);
}
- public int getNumRelocs(int section_index) {
+ int getNumRelocs(int section_index) {
return relocEntries.get(section_index).size();
}
// Return the relocation entries for a single section
- // or null if no entries added to section
- public byte [] getRelocData(int section_index) {
+ // or null if no entries added to section
+ byte[] getRelocData(int section_index) {
ArrayList entryList = relocEntries.get(section_index);
- if (entryList.size() == 0)
+ if (entryList.size() == 0) {
return null;
-
+ }
ByteBuffer relocData = ElfByteBuffer.allocate(entryList.size() * Elf64_Rela.totalsize);
// Copy each entry to a single ByteBuffer
@@ -78,4 +68,3 @@ public class ElfRelocTable {
return (relocData.array());
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSection.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSection.java
index 86415d23cca..01dd063d5bc 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSection.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSection.java
@@ -24,40 +24,36 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.elf.Elf;
-import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Shdr;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rel;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rela;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Sym;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfSection {
- String name;
- ByteBuffer section;
- byte [] data;
- boolean hasrelocations;
- int sectionIndex;
+final class ElfSection {
+ private final String name;
+ private final ByteBuffer section;
+ private final byte[] data;
+ private final boolean hasrelocations;
+ private final int sectionIndex;
/**
* String holding section name strings
*/
- private static StringBuilder sectNameTab = new StringBuilder();
+ private final static StringBuilder sectNameTab = new StringBuilder();
/**
- * Keeps track of bytes in section string table since strTabContent.length()
- * is number of chars, not bytes.
+ * Keeps track of bytes in section string table since strTabContent.length() is number of chars,
+ * not bytes.
*/
private static int shStrTabNrOfBytes = 0;
- public ElfSection(String sectName, byte [] sectData, int sectFlags,
- int sectType, boolean hasRelocations, int align,
- int sectIndex) {
+ ElfSection(String sectName, byte[] sectData, int sectFlags, int sectType,
+ boolean hasRelocations, int align, int sectIndex) {
section = ElfByteBuffer.allocate(Elf64_Shdr.totalsize);
-
+ name = sectName;
// Return all 0's for NULL section
if (sectIndex == 0) {
sectNameTab.append('\0');
@@ -71,7 +67,6 @@ public class ElfSection {
section.putInt(Elf64_Shdr.sh_name.off, shStrTabNrOfBytes);
sectNameTab.append(sectName).append('\0');
shStrTabNrOfBytes += (sectName.getBytes().length + 1);
- name = sectName;
section.putInt(Elf64_Shdr.sh_type.off, sectType);
section.putLong(Elf64_Shdr.sh_flags.off, sectFlags);
@@ -81,8 +76,7 @@ public class ElfSection {
if (sectName.equals(".shstrtab")) {
section.putLong(Elf64_Shdr.sh_size.off, shStrTabNrOfBytes);
data = sectNameTab.toString().getBytes();
- }
- else {
+ } else {
data = sectData;
section.putLong(Elf64_Shdr.sh_size.off, sectData.length);
}
@@ -110,55 +104,53 @@ public class ElfSection {
sectionIndex = sectIndex;
}
- public String getName() {
+ String getName() {
return name;
}
- public long getSize() {
+ long getSize() {
return section.getLong(Elf64_Shdr.sh_size.off);
}
- public int getDataAlign() {
- return ((int)section.getLong(Elf64_Shdr.sh_addralign.off));
+ int getDataAlign() {
+ return ((int) section.getLong(Elf64_Shdr.sh_addralign.off));
}
// Alignment requirements for the Elf64_Shdr structures
- public static int getShdrAlign() {
+ static int getShdrAlign() {
return (4);
}
- public byte[] getArray() {
+ byte[] getArray() {
return section.array();
}
- public byte[] getDataArray() {
+ byte[] getDataArray() {
return data;
}
- public void setOffset(long offset) {
+ void setOffset(long offset) {
section.putLong(Elf64_Shdr.sh_offset.off, offset);
}
- public void setLink(int link) {
+ void setLink(int link) {
section.putInt(Elf64_Shdr.sh_link.off, link);
}
- public void setInfo(int info) {
+ void setInfo(int info) {
section.putInt(Elf64_Shdr.sh_info.off, info);
}
- public long getOffset() {
+ long getOffset() {
return (section.getLong(Elf64_Shdr.sh_offset.off));
}
- public boolean hasRelocations() {
+ boolean hasRelocations() {
return hasrelocations;
}
- public int getSectionId() {
+ int getSectionId() {
return sectionIndex;
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymbol.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymbol.java
index 6a22019f6bf..547acbec5f1 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymbol.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymbol.java
@@ -24,34 +24,29 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.NativeSymbol;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Sym;
-import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfSymbol extends NativeSymbol {
- ByteBuffer sym;
+final class ElfSymbol extends NativeSymbol {
+ private final ByteBuffer sym;
- public ElfSymbol(int symbolindex, int strindex, byte type, byte bind,
- byte sectindex, long offset, long size) {
+ ElfSymbol(int symbolindex, int strindex, byte type, byte bind, byte sectindex, long offset, long size) {
super(symbolindex);
sym = ElfByteBuffer.allocate(Elf64_Sym.totalsize);
sym.putInt(Elf64_Sym.st_name.off, strindex);
sym.put(Elf64_Sym.st_info.off, Elf64_Sym.ELF64_ST_INFO(bind, type));
- sym.put(Elf64_Sym.st_other.off, (byte)0);
+ sym.put(Elf64_Sym.st_other.off, (byte) 0);
// Section indexes start at 1 but we manage the index internally
// as 0 relative
- sym.putChar(Elf64_Sym.st_shndx.off, (char)(sectindex));
+ sym.putChar(Elf64_Sym.st_shndx.off, (char) (sectindex));
sym.putLong(Elf64_Sym.st_value.off, offset);
sym.putLong(Elf64_Sym.st_size.off, size);
}
- public byte[] getArray() {
+ byte[] getArray() {
return sym.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymtab.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymtab.java
index 4105c152693..457a8a81caf 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymtab.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfSymtab.java
@@ -24,41 +24,38 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import java.util.ArrayList;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Sym;
import jdk.tools.jaotc.binformat.elf.ElfSymbol;
import jdk.tools.jaotc.binformat.elf.ElfByteBuffer;
-public class ElfSymtab {
+final class ElfSymtab {
- ArrayListlocalSymbols = new ArrayList();
- ArrayListglobalSymbols = new ArrayList();
+ private final ArrayList localSymbols = new ArrayList<>();
+ private final ArrayList globalSymbols = new ArrayList<>();
/**
* number of symbols added
*/
- int symbolCount;
+ private int symbolCount;
/**
* String holding symbol table strings
*/
- private StringBuilder strTabContent = new StringBuilder();
+ private final StringBuilder strTabContent = new StringBuilder();
/**
- * Keeps track of bytes in string table since strTabContent.length()
- * is number of chars, not bytes.
+ * Keeps track of bytes in string table since strTabContent.length() is number of chars, not
+ * bytes.
*/
private int strTabNrOfBytes = 0;
- public ElfSymtab() {
+ ElfSymtab() {
symbolCount = 0;
}
- public ElfSymbol addSymbolEntry(String name, byte type, byte bind,
- byte secHdrIndex, long offset, long size) {
+ ElfSymbol addSymbolEntry(String name, byte type, byte bind, byte secHdrIndex, long offset, long size) {
// Get the current symbol index and append symbol name to string table.
int index;
ElfSymbol sym;
@@ -76,7 +73,7 @@ public class ElfSymtab {
// strTabContent.append("_").append(name).append('\0');
strTabContent.append(name).append('\0');
// + 1 for null, + 1 for "_"
- //strTabNrOfBytes += (name.getBytes().length + 1 + 1);
+ // strTabNrOfBytes += (name.getBytes().length + 1 + 1);
strTabNrOfBytes += (name.getBytes().length + 1);
sym = new ElfSymbol(symbolCount, index, type, bind, secHdrIndex, offset, size);
@@ -92,44 +89,47 @@ public class ElfSymtab {
// Update the symbol indexes once all symbols have been added.
// This is required since we'll be reordering the symbols in the
// file to be in the order of Local then global.
- public void updateIndexes() {
+ void updateIndexes() {
int index = 0;
// Update the local symbol indexes
- for (int i = 0; i < localSymbols.size(); i++ ) {
+ for (int i = 0; i < localSymbols.size(); i++) {
ElfSymbol sym = localSymbols.get(i);
sym.setIndex(index++);
}
// Update the global symbol indexes
- for (int i = 0; i < globalSymbols.size(); i++ ) {
+ for (int i = 0; i < globalSymbols.size(); i++) {
ElfSymbol sym = globalSymbols.get(i);
sym.setIndex(index++);
}
}
- public int getNumLocalSyms() { return localSymbols.size(); }
- public int getNumGlobalSyms() { return globalSymbols.size(); }
+ int getNumLocalSyms() {
+ return localSymbols.size();
+ }
+ int getNumGlobalSyms() {
+ return globalSymbols.size();
+ }
// Create a single byte array that contains the symbol table entries
- public byte[] getSymtabArray() {
- int index = 0;
- ByteBuffer symtabData = ElfByteBuffer.allocate(symbolCount*Elf64_Sym.totalsize);
- byte [] retarray;
+ byte[] getSymtabArray() {
+ ByteBuffer symtabData = ElfByteBuffer.allocate(symbolCount * Elf64_Sym.totalsize);
+ byte[] retarray;
updateIndexes();
// Add the local symbols
- for (int i = 0; i < localSymbols.size(); i++ ) {
+ for (int i = 0; i < localSymbols.size(); i++) {
ElfSymbol sym = localSymbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
// Add the global symbols
- for (int i = 0; i < globalSymbols.size(); i++ ) {
+ for (int i = 0; i < globalSymbols.size(); i++) {
ElfSymbol sym = globalSymbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
retarray = symtabData.array();
@@ -138,10 +138,8 @@ public class ElfSymtab {
}
// Return the string table array
- public byte[] getStrtabArray() {
- byte [] strs = strTabContent.toString().getBytes();
+ byte[] getStrtabArray() {
+ byte[] strs = strTabContent.toString().getBytes();
return (strs);
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfTargetInfo.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfTargetInfo.java
index 2c9a6a3c4a0..b665f12f114 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfTargetInfo.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/ElfTargetInfo.java
@@ -24,14 +24,13 @@
package jdk.tools.jaotc.binformat.elf;
import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
/**
* Class that abstracts MACH-O target details.
*
*/
-public class ElfTargetInfo {
+final class ElfTargetInfo {
/**
* Target architecture.
*/
@@ -68,16 +67,15 @@ public class ElfTargetInfo {
}
}
- public static char getElfArch() {
+ static char getElfArch() {
return arch;
}
- public static int getElfEndian() {
+ static int getElfEndian() {
return endian;
}
- public static String getOsName() {
+ static String getOsName() {
return osName;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/JELFRelocObject.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/JELFRelocObject.java
index b288b554708..4365d5759d4 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/JELFRelocObject.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/elf/JELFRelocObject.java
@@ -24,13 +24,11 @@
package jdk.tools.jaotc.binformat.elf;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import jdk.tools.jaotc.binformat.Container;
import jdk.tools.jaotc.binformat.BinaryContainer;
import jdk.tools.jaotc.binformat.ByteContainer;
import jdk.tools.jaotc.binformat.CodeContainer;
@@ -38,17 +36,14 @@ import jdk.tools.jaotc.binformat.ReadOnlyDataContainer;
import jdk.tools.jaotc.binformat.Relocation;
import jdk.tools.jaotc.binformat.Relocation.RelocType;
import jdk.tools.jaotc.binformat.Symbol;
-import jdk.tools.jaotc.binformat.NativeSymbol;
import jdk.tools.jaotc.binformat.Symbol.Binding;
import jdk.tools.jaotc.binformat.Symbol.Kind;
-import jdk.tools.jaotc.binformat.elf.Elf;
import jdk.tools.jaotc.binformat.elf.ElfSymbol;
import jdk.tools.jaotc.binformat.elf.ElfTargetInfo;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Ehdr;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Shdr;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Sym;
-import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rel;
import jdk.tools.jaotc.binformat.elf.Elf.Elf64_Rela;
public class JELFRelocObject {
@@ -59,34 +54,29 @@ public class JELFRelocObject {
private final int segmentSize;
- public JELFRelocObject(BinaryContainer binContainer, String outputFileName, String aotVersion) {
+ public JELFRelocObject(BinaryContainer binContainer, String outputFileName) {
this.binContainer = binContainer;
- this.elfContainer = new ElfContainer(outputFileName, aotVersion);
+ this.elfContainer = new ElfContainer(outputFileName);
this.segmentSize = binContainer.getCodeSegmentSize();
}
- private ElfSection createByteSection(ArrayListsections,
- String sectName,
- byte [] scnData,
- boolean hasRelocs,
- int align,
- int scnFlags,
- int scnType) {
+ private static ElfSection createByteSection(ArrayList sections,
+ String sectName,
+ byte[] scnData,
+ boolean hasRelocs,
+ int align,
+ int scnFlags,
+ int scnType) {
- ElfSection sect = new ElfSection(sectName,
- scnData,
- scnFlags,
- scnType,
- hasRelocs,
- align,
- sections.size());
+ ElfSection sect = new ElfSection(sectName, scnData, scnFlags, scnType,
+ hasRelocs, align, sections.size());
// Add this section to our list
sections.add(sect);
return (sect);
}
- private void createByteSection(ArrayListsections,
+ private void createByteSection(ArrayList sections,
ByteContainer c, int scnFlags) {
ElfSection sect;
boolean hasRelocs = c.hasRelocations();
@@ -112,15 +102,15 @@ public class JELFRelocObject {
c.setSectionId(sect.getSectionId());
}
- private void createCodeSection(ArrayListsections, CodeContainer c) {
+ private void createCodeSection(ArrayList sections, CodeContainer c) {
createByteSection(sections, c, Elf64_Shdr.SHF_ALLOC | Elf64_Shdr.SHF_EXECINSTR);
}
- private void createReadOnlySection(ArrayListsections, ReadOnlyDataContainer c) {
+ private void createReadOnlySection(ArrayList sections, ReadOnlyDataContainer c) {
createByteSection(sections, c, Elf64_Shdr.SHF_ALLOC);
}
- private void createReadWriteSection(ArrayListsections, ByteContainer c) {
+ private void createReadWriteSection(ArrayList sections, ByteContainer c) {
createByteSection(sections, c, Elf64_Shdr.SHF_ALLOC | Elf64_Shdr.SHF_WRITE);
}
@@ -135,7 +125,7 @@ public class JELFRelocObject {
// Allocate ELF Header
ElfHeader eh = new ElfHeader();
- ArrayList sections = new ArrayList();
+ ArrayList sections = new ArrayList<>();
// Create the null section
createByteSection(sections, null, null, false, 1, 0, 0);
@@ -146,63 +136,49 @@ public class JELFRelocObject {
createReadOnlySection(sections, binContainer.getKlassesOffsetsContainer());
createReadOnlySection(sections, binContainer.getMethodsOffsetsContainer());
createReadOnlySection(sections, binContainer.getKlassesDependenciesContainer());
- createReadWriteSection(sections, binContainer.getMetaspaceGotContainer());
- createReadWriteSection(sections, binContainer.getMetadataGotContainer());
- createReadWriteSection(sections, binContainer.getMethodStateContainer());
- createReadWriteSection(sections, binContainer.getOopGotContainer());
- createReadWriteSection(sections, binContainer.getMethodMetadataContainer());
+ createReadOnlySection(sections, binContainer.getMethodMetadataContainer());
createReadOnlySection(sections, binContainer.getStubsOffsetsContainer());
createReadOnlySection(sections, binContainer.getHeaderContainer().getContainer());
createReadOnlySection(sections, binContainer.getCodeSegmentsContainer());
createReadOnlySection(sections, binContainer.getConstantDataContainer());
createReadOnlySection(sections, binContainer.getConfigContainer());
-
- // createExternalLinkage();
-
- createCodeSection(sections, binContainer.getExtLinkageContainer());
+ createReadWriteSection(sections, binContainer.getKlassesGotContainer());
+ createReadWriteSection(sections, binContainer.getCountersGotContainer());
+ createReadWriteSection(sections, binContainer.getMetadataGotContainer());
+ createReadWriteSection(sections, binContainer.getOopGotContainer());
+ createReadWriteSection(sections, binContainer.getMethodStateContainer());
createReadWriteSection(sections, binContainer.getExtLinkageGOTContainer());
// Get ELF symbol data from BinaryContainer object's symbol tables
- ElfSymtab symtab = createELFSymbolTables(sections, symbols);
+ ElfSymtab symtab = createELFSymbolTables(symbols);
// Create string table section and symbol table sections in
// that order since symtab section needs to set the index of
// strtab in sh_link field
- ElfSection strTabSection = createByteSection(sections,
- ".strtab",
+ ElfSection strTabSection = createByteSection(sections, ".strtab",
symtab.getStrtabArray(),
- false,
- 1,
- 0,
+ false, 1, 0,
Elf64_Shdr.SHT_STRTAB);
// Now create .symtab section with the symtab data constructed.
// On Linux, sh_link of symtab contains the index of string table
// its symbols reference and sh_info contains the index of first
// non-local symbol
- ElfSection symTabSection = createByteSection(sections,
- ".symtab",
- symtab.getSymtabArray(),
- false,
- 8,
- 0,
- Elf64_Shdr.SHT_SYMTAB);
+ ElfSection symTabSection = createByteSection(sections, ".symtab",
+ symtab.getSymtabArray(),
+ false, 8, 0,
+ Elf64_Shdr.SHT_SYMTAB);
symTabSection.setLink(strTabSection.getSectionId());
symTabSection.setInfo(symtab.getNumLocalSyms());
- ElfRelocTable elfRelocTable = createElfRelocTable(sections,
- relocationTable);
+ ElfRelocTable elfRelocTable = createElfRelocTable(sections, relocationTable);
createElfRelocSections(sections, elfRelocTable, symTabSection.getSectionId());
// Now, finally, after creating all sections, create shstrtab section
- ElfSection shStrTabSection = createByteSection(sections,
- ".shstrtab",
- null,
- false,
- 1,
- 0,
- Elf64_Shdr.SHT_STRTAB);
+ ElfSection shStrTabSection = createByteSection(sections, ".shstrtab",
+ null, false, 1, 0,
+ Elf64_Shdr.SHT_STRTAB);
eh.setSectionStrNdx(shStrTabSection.getSectionId());
// Update all section offsets and the Elf header section offset
@@ -211,21 +187,21 @@ public class JELFRelocObject {
int file_offset = Elf64_Ehdr.totalsize;
// and round it up
- file_offset = (file_offset + (sections.get(1).getDataAlign()-1)) &
- ~((sections.get(1).getDataAlign()-1));
+ file_offset = (file_offset + (sections.get(1).getDataAlign() - 1)) &
+ ~((sections.get(1).getDataAlign() - 1));
// Calc file offsets for section data skipping null section
for (int i = 1; i < sections.size(); i++) {
ElfSection sect = sections.get(i);
- file_offset = (file_offset + (sect.getDataAlign()-1)) &
- ~((sect.getDataAlign()-1));
+ file_offset = (file_offset + (sect.getDataAlign() - 1)) &
+ ~((sect.getDataAlign() - 1));
sect.setOffset(file_offset);
file_offset += sect.getSize();
}
// Align the section table
- file_offset = (file_offset + (ElfSection.getShdrAlign()-1)) &
- ~((ElfSection.getShdrAlign()-1));
+ file_offset = (file_offset + (ElfSection.getShdrAlign() - 1)) &
+ ~((ElfSection.getShdrAlign() - 1));
// Update the Elf Header with the offset of the first Elf64_Shdr
// and the number of sections.
@@ -249,24 +225,25 @@ public class JELFRelocObject {
elfContainer.close();
}
+
/**
- * Construct ELF symbol data from BinaryContainer object's symbol tables. Both dynamic ELF
- * symbol table and ELF symbol table are created from BinaryContainer's symbol info.
+ * Construct ELF symbol data from BinaryContainer object's symbol tables. Both dynamic ELF symbol
+ * table and ELF symbol table are created from BinaryContainer's symbol info.
*
* @param symbols
*/
- private ElfSymtab createELFSymbolTables(ArrayList sections, Collection symbols) {
+ private static ElfSymtab createELFSymbolTables(Collection symbols) {
ElfSymtab symtab = new ElfSymtab();
// First, create the initial null symbol. This is a local symbol.
- symtab.addSymbolEntry("", (byte)0, (byte)0, Elf64_Shdr.SHN_UNDEF, 0, 0);
+ symtab.addSymbolEntry("", (byte) 0, (byte) 0, Elf64_Shdr.SHN_UNDEF, 0, 0);
// Now create ELF symbol entries for all symbols.
for (Symbol symbol : symbols) {
// Get the index of section this symbol is defined in.
int secHdrIndex = symbol.getSection().getSectionId();
- ElfSymbol elfSymbol = symtab.addSymbolEntry(symbol.getName(), getELFTypeOf(symbol), getELFBindOf(symbol), (byte)secHdrIndex, symbol.getOffset(), symbol.getSize());
- symbol.setNativeSymbol((NativeSymbol)elfSymbol);
+ ElfSymbol elfSymbol = symtab.addSymbolEntry(symbol.getName(), getELFTypeOf(symbol), getELFBindOf(symbol), (byte) secHdrIndex, symbol.getOffset(), symbol.getSize());
+ symbol.setNativeSymbol(elfSymbol);
}
return (symtab);
}
@@ -300,8 +277,7 @@ public class JELFRelocObject {
ElfRelocTable elfRelocTable = new ElfRelocTable(sections.size());
/*
- * For each of the symbols with associated relocation records, create a Elf relocation
- * entry.
+ * For each of the symbols with associated relocation records, create a Elf relocation entry.
*/
for (Map.Entry> entry : relocationTable.entrySet()) {
List relocs = entry.getValue();
@@ -319,69 +295,39 @@ public class JELFRelocObject {
return (elfRelocTable);
}
- private void createRelocation(Symbol symbol, Relocation reloc, ElfRelocTable elfRelocTable) {
+ private static void createRelocation(Symbol symbol, Relocation reloc, ElfRelocTable elfRelocTable) {
RelocType relocType = reloc.getType();
int elfRelocType = getELFRelocationType(relocType);
- ElfSymbol sym = (ElfSymbol)symbol.getNativeSymbol();
+ ElfSymbol sym = (ElfSymbol) symbol.getNativeSymbol();
int symno = sym.getIndex();
int sectindex = reloc.getSection().getSectionId();
int offset = reloc.getOffset();
int addend = 0;
switch (relocType) {
- case FOREIGN_CALL_DIRECT:
case JAVA_CALL_DIRECT:
case STUB_CALL_DIRECT:
case FOREIGN_CALL_INDIRECT_GOT: {
// Create relocation entry
- // System.out.println("getELFRelocationType: PLT relocation type using X86_64_RELOC_BRANCH");
addend = -4; // Size in bytes of the patch location
// Relocation should be applied at the location after call operand
offset = offset + reloc.getSize() + addend;
break;
}
- case FOREIGN_CALL_DIRECT_FAR: {
- // Create relocation entry
- addend = -8; // Size in bytes of the patch location
- // Relocation should be applied at the location after call operand
- // 10 = 2 (jmp [r]) + 8 (imm64)
- offset = offset + reloc.getSize() + addend - 2;
- break;
- }
- case FOREIGN_CALL_INDIRECT:
case JAVA_CALL_INDIRECT:
- case STUB_CALL_INDIRECT: {
- // Do nothing.
- return;
- }
- case EXTERNAL_DATA_REFERENCE_FAR: {
- // Create relocation entry
+ case METASPACE_GOT_REFERENCE:
+ case EXTERNAL_PLT_TO_GOT: {
addend = -4; // Size of 32-bit address of the GOT
/*
* Relocation should be applied before the test instruction to the move instruction.
- * offset points to the test instruction after the instruction that loads
- * the address of polling page. So set the offset appropriately.
+ * reloc.getOffset() points to the test instruction after the instruction that loads the address of
+ * polling page. So set the offset appropriately.
*/
offset = offset + addend;
break;
}
- case METASPACE_GOT_REFERENCE:
- case EXTERNAL_PLT_TO_GOT:
- case STATIC_STUB_TO_STATIC_METHOD:
- case STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT: {
- addend = -4; // Size of 32-bit address of the GOT
- /*
- * Relocation should be applied before the test instruction to
- * the move instruction. reloc.getOffset() points to the
- * test instruction after the instruction that loads the
- * address of polling page. So set the offset appropriately.
- */
- offset = offset + addend;
- break;
- }
- case EXTERNAL_GOT_TO_PLT:
- case LOADTIME_ADDRESS: {
+ case EXTERNAL_GOT_TO_PLT: {
// this is load time relocations
break;
}
@@ -396,27 +342,17 @@ public class JELFRelocObject {
switch (ElfTargetInfo.getElfArch()) {
case Elf64_Ehdr.EM_X86_64:
// Return R_X86_64_* entries based on relocType
- if (relocType == RelocType.FOREIGN_CALL_DIRECT ||
- relocType == RelocType.JAVA_CALL_DIRECT ||
+ if (relocType == RelocType.JAVA_CALL_DIRECT ||
relocType == RelocType.FOREIGN_CALL_INDIRECT_GOT) {
elfRelocType = Elf64_Rela.R_X86_64_PLT32;
} else if (relocType == RelocType.STUB_CALL_DIRECT) {
elfRelocType = Elf64_Rela.R_X86_64_PC32;
- } else if (relocType == RelocType.FOREIGN_CALL_DIRECT_FAR) {
- elfRelocType = Elf64_Rela.R_X86_64_64;
- } else if (relocType == RelocType.FOREIGN_CALL_INDIRECT ||
- relocType == RelocType.JAVA_CALL_INDIRECT ||
- relocType == RelocType.STUB_CALL_INDIRECT) {
+ } else if (relocType == RelocType.JAVA_CALL_INDIRECT) {
elfRelocType = Elf64_Rela.R_X86_64_NONE;
- } else if ((relocType == RelocType.EXTERNAL_DATA_REFERENCE_FAR)) {
- elfRelocType = Elf64_Rela.R_X86_64_GOTPCREL;
} else if (relocType == RelocType.METASPACE_GOT_REFERENCE ||
- relocType == RelocType.EXTERNAL_PLT_TO_GOT ||
- relocType == RelocType.STATIC_STUB_TO_STATIC_METHOD ||
- relocType == RelocType.STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT) {
+ relocType == RelocType.EXTERNAL_PLT_TO_GOT) {
elfRelocType = Elf64_Rela.R_X86_64_PC32;
- } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT ||
- relocType == RelocType.LOADTIME_ADDRESS) {
+ } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT) {
elfRelocType = Elf64_Rela.R_X86_64_64;
} else {
assert false : "Unhandled relocation type: " + relocType;
@@ -428,9 +364,9 @@ public class JELFRelocObject {
return elfRelocType;
}
- private void createElfRelocSections(ArrayList sections,
- ElfRelocTable elfRelocTable,
- int symtabsectidx) {
+ private static void createElfRelocSections(ArrayList sections,
+ ElfRelocTable elfRelocTable,
+ int symtabsectidx) {
// Grab count before we create new sections
int count = sections.size();
@@ -439,15 +375,11 @@ public class JELFRelocObject {
if (elfRelocTable.getNumRelocs(i) > 0) {
ElfSection sect = sections.get(i);
String relname = ".rela" + sect.getName();
- ElfSection relocSection = createByteSection(sections,
- relname,
- elfRelocTable.getRelocData(i),
- false,
- 8,
- 0,
- Elf64_Shdr.SHT_RELA);
- relocSection.setLink(symtabsectidx);
- relocSection.setInfo(sect.getSectionId());
+ ElfSection relocSection = createByteSection(sections, relname,
+ elfRelocTable.getRelocData(i),
+ false, 8, 0, Elf64_Shdr.SHT_RELA);
+ relocSection.setLink(symtabsectidx);
+ relocSection.setInfo(sect.getSectionId());
}
}
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/JMachORelocObject.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/JMachORelocObject.java
index 39941757672..f2424eeebd6 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/JMachORelocObject.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/JMachORelocObject.java
@@ -53,11 +53,8 @@ import jdk.tools.jaotc.binformat.ReadOnlyDataContainer;
import jdk.tools.jaotc.binformat.Relocation;
import jdk.tools.jaotc.binformat.Relocation.RelocType;
import jdk.tools.jaotc.binformat.Symbol;
-import jdk.tools.jaotc.binformat.NativeSymbol;
-import jdk.tools.jaotc.binformat.Symbol.Binding;
import jdk.tools.jaotc.binformat.Symbol.Kind;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.section_64;
import jdk.tools.jaotc.binformat.macho.MachO.mach_header_64;
import jdk.tools.jaotc.binformat.macho.MachO.segment_command_64;
@@ -85,7 +82,7 @@ public class JMachORelocObject {
this.segmentSize = binContainer.getCodeSegmentSize();
}
- private void createByteSection(ArrayListsections,
+ private void createByteSection(ArrayList sections,
ByteContainer c, String sectName, String segName, int scnFlags) {
if (c.getByteArray().length == 0) {
@@ -102,24 +99,24 @@ public class JMachORelocObject {
sections.add(sect);
// Record the section Id (0 relative)
- c.setSectionId(sections.size()-1);
+ c.setSectionId(sections.size() - 1);
// TODO: Clear out code section data to allow for GC
// c.clear();
}
- private void createCodeSection(ArrayListsections, CodeContainer c) {
- createByteSection(sections, c, /*c.getContainerName()*/ "__text", "__TEXT",
- section_64.S_ATTR_PURE_INSTRUCTIONS|
+ private void createCodeSection(ArrayList sections, CodeContainer c) {
+ createByteSection(sections, c, /* c.getContainerName() */ "__text", "__TEXT",
+ section_64.S_ATTR_PURE_INSTRUCTIONS |
section_64.S_ATTR_SOME_INSTRUCTIONS);
}
- private void createReadOnlySection(ArrayListsections, ReadOnlyDataContainer c) {
+ private void createReadOnlySection(ArrayList sections, ReadOnlyDataContainer c) {
createByteSection(sections, c, c.getContainerName(), "__TEXT",
section_64.S_ATTR_SOME_INSTRUCTIONS);
}
- private void createReadWriteSection(ArrayListsections, ByteContainer c) {
+ private void createReadWriteSection(ArrayList sections, ByteContainer c) {
createByteSection(sections, c, c.getContainerName(), "__DATA", section_64.S_REGULAR);
}
@@ -140,7 +137,7 @@ public class JMachORelocObject {
MachOHeader mh = new MachOHeader();
- ArrayList sections = new ArrayList();
+ ArrayList sections = new ArrayList<>();
// Create Sections contained in the main Segment LC_SEGMENT_64
@@ -149,21 +146,19 @@ public class JMachORelocObject {
createReadOnlySection(sections, binContainer.getKlassesOffsetsContainer());
createReadOnlySection(sections, binContainer.getMethodsOffsetsContainer());
createReadOnlySection(sections, binContainer.getKlassesDependenciesContainer());
- createReadWriteSection(sections, binContainer.getMetaspaceGotContainer());
- createReadWriteSection(sections, binContainer.getMetadataGotContainer());
- createReadWriteSection(sections, binContainer.getMethodStateContainer());
- createReadWriteSection(sections, binContainer.getOopGotContainer());
- createReadWriteSection(sections, binContainer.getMethodMetadataContainer());
+ createReadOnlySection(sections, binContainer.getMethodMetadataContainer());
createReadOnlySection(sections, binContainer.getStubsOffsetsContainer());
createReadOnlySection(sections, binContainer.getHeaderContainer().getContainer());
createReadOnlySection(sections, binContainer.getCodeSegmentsContainer());
createReadOnlySection(sections, binContainer.getConstantDataContainer());
createReadOnlySection(sections, binContainer.getConfigContainer());
-
- // createExternalLinkage();
-
- createCodeSection(sections, binContainer.getExtLinkageContainer());
+ createReadWriteSection(sections, binContainer.getKlassesGotContainer());
+ createReadWriteSection(sections, binContainer.getCountersGotContainer());
+ createReadWriteSection(sections, binContainer.getMetadataGotContainer());
+ createReadWriteSection(sections, binContainer.getMethodStateContainer());
+ createReadWriteSection(sections, binContainer.getOopGotContainer());
createReadWriteSection(sections, binContainer.getExtLinkageGOTContainer());
+
// Update the Header sizeofcmds size.
// This doesn't include the Header struct size
mh.setCmdSizes(4, segment_command_64.totalsize +
@@ -175,14 +170,14 @@ public class JMachORelocObject {
// Initialize file offset for data past commands
int file_offset = mach_header_64.totalsize + mh.getCmdSize();
// and round it up
- file_offset = (file_offset + (sections.get(0).getAlign()-1)) & ~((sections.get(0).getAlign()-1));
+ file_offset = (file_offset + (sections.get(0).getAlign() - 1)) & ~((sections.get(0).getAlign() - 1));
long address = 0;
int segment_offset = file_offset;
for (int i = 0; i < sections.size(); i++) {
MachOSection sect = sections.get(i);
- file_offset = (file_offset + (sect.getAlign()-1)) & ~((sect.getAlign()-1));
- address = (address + (sect.getAlign()-1)) & ~((sect.getAlign()-1));
+ file_offset = (file_offset + (sect.getAlign() - 1)) & ~((sect.getAlign() - 1));
+ address = (address + (sect.getAlign() - 1)) & ~((sect.getAlign() - 1));
sect.setOffset(file_offset);
sect.setAddr(address);
file_offset += sect.getSize();
@@ -199,7 +194,6 @@ public class JMachORelocObject {
segment_size,
sections.size());
-
MachOVersion vers = new MachOVersion();
// Get symbol data from BinaryContainer object's symbol tables
@@ -213,7 +207,7 @@ public class JMachORelocObject {
// Create the Relocation Tables
MachORelocTable machORelocs = createMachORelocTable(sections, relocationTable, symtab);
// Calculate file offset for relocation data
- file_offset = (file_offset + (machORelocs.getAlign()-1)) & ~((machORelocs.getAlign()-1));
+ file_offset = (file_offset + (MachORelocTable.getAlign() - 1)) & ~((MachORelocTable.getAlign() - 1));
// Update relocation sizing information in each section
for (int i = 0; i < sections.size(); i++) {
@@ -227,10 +221,9 @@ public class JMachORelocObject {
}
// Calculate and set file offset for symbol table data
- file_offset = (file_offset + (symtab.getAlign()-1)) & ~((symtab.getAlign()-1));
+ file_offset = (file_offset + (MachOSymtab.getAlign() - 1)) & ~((MachOSymtab.getAlign() - 1));
symtab.setOffset(file_offset);
-
// Write Out Header
machoContainer.writeBytes(mh.getArray());
// Write out first Segment
@@ -259,12 +252,13 @@ public class JMachORelocObject {
// Write out the relocation tables for all sections
for (int i = 0; i < sections.size(); i++) {
- if (machORelocs.getNumRelocs(i) > 0)
- machoContainer.writeBytes(machORelocs.getRelocData(i), machORelocs.getAlign());
+ if (machORelocs.getNumRelocs(i) > 0) {
+ machoContainer.writeBytes(machORelocs.getRelocData(i), MachORelocTable.getAlign());
+ }
}
// Write out data associated with LC_SYMTAB
- machoContainer.writeBytes(symtab.getDataArray(), symtab.getAlign());
+ machoContainer.writeBytes(symtab.getDataArray(), MachOSymtab.getAlign());
machoContainer.close();
}
@@ -273,14 +267,14 @@ public class JMachORelocObject {
* Construct MachO symbol data from BinaryContainer object's symbol tables. Both dynamic MachO
* symbol table and MachO symbol table are created from BinaryContainer's symbol info.
*
+ * @param sections
* @param symbols
- * @param symtab
*/
- private MachOSymtab createMachOSymbolTables(ArrayListsections,
- Collection symbols) {
+ private static MachOSymtab createMachOSymbolTables(ArrayList sections,
+ Collection symbols) {
MachOSymtab symtab = new MachOSymtab();
// First, create the initial null symbol. This is a local symbol.
- symtab.addSymbolEntry("", (byte)nlist_64.N_UNDF, (byte)0, (long)0);
+ symtab.addSymbolEntry("", (byte) nlist_64.N_UNDF, (byte) 0, 0);
// Now create MachO symbol entries for all symbols.
for (Symbol symbol : symbols) {
@@ -290,14 +284,14 @@ public class JMachORelocObject {
long sectionAddr = sections.get(sectionId).getAddr();
MachOSymbol machoSymbol = symtab.addSymbolEntry(symbol.getName(),
- getMachOTypeOf(symbol),
- (byte)sectionId,
- symbol.getOffset() + sectionAddr);
- symbol.setNativeSymbol((NativeSymbol)machoSymbol);
+ getMachOTypeOf(symbol),
+ (byte) sectionId,
+ symbol.getOffset() + sectionAddr);
+ symbol.setNativeSymbol(machoSymbol);
}
// Now that all symbols are enterred, update the
- // symbol indexes. This is necessary since they will
+ // symbol indexes. This is necessary since they will
// be reordered based on local, global and undefined.
symtab.updateIndexes();
@@ -309,9 +303,9 @@ public class JMachORelocObject {
byte type = nlist_64.N_UNDF;
// Global or Local
- if (sym.getBinding() == Symbol.Binding.GLOBAL)
+ if (sym.getBinding() == Symbol.Binding.GLOBAL) {
type = nlist_64.N_EXT;
-
+ }
// If Function or Data, add section type
if (kind == Symbol.Kind.NATIVE_FUNCTION ||
kind == Symbol.Kind.JAVA_FUNCTION ||
@@ -335,8 +329,7 @@ public class JMachORelocObject {
MachORelocTable machORelocTable = new MachORelocTable(sections.size());
/*
- * For each of the symbols with associated relocation records, create a MachO relocation
- * entry.
+ * For each of the symbols with associated relocation records, create a MachO relocation entry.
*/
for (Map.Entry> entry : relocationTable.entrySet()) {
List relocs = entry.getValue();
@@ -354,11 +347,11 @@ public class JMachORelocObject {
return (machORelocTable);
}
- private void createRelocation(Symbol symbol, Relocation reloc, MachORelocTable machORelocTable) {
+ private static void createRelocation(Symbol symbol, Relocation reloc, MachORelocTable machORelocTable) {
RelocType relocType = reloc.getType();
int machORelocType = getMachORelocationType(relocType);
- MachOSymbol sym = (MachOSymbol)symbol.getNativeSymbol();
+ MachOSymbol sym = (MachOSymbol) symbol.getNativeSymbol();
int symno = sym.getIndex();
int sectindex = reloc.getSection().getSectionId();
int offset = reloc.getOffset();
@@ -366,73 +359,39 @@ public class JMachORelocObject {
int length = 0;
int isextern = 1;
-/*
- System.out.println("reloctype: " + relocType + " size is " +
- reloc.getSize() + " offset is " + offset +
- " Section Index is " + (sectindex) +
- " Symbol Index is " + symno +
- " Symbol Name is " + symbol.getName() + "\n");
-*/
-
switch (relocType) {
- case FOREIGN_CALL_DIRECT:
case JAVA_CALL_DIRECT:
case STUB_CALL_DIRECT:
case FOREIGN_CALL_INDIRECT_GOT: {
// Create relocation entry
- // System.out.println("getMachORelocationType: PLT relocation type using X86_64_RELOC_BRANCH");
int addend = -4; // Size in bytes of the patch location
// Relocation should be applied at the location after call operand
offset = offset + reloc.getSize() + addend;
- pcrel = 1; length = 2;
+ pcrel = 1;
+ length = 2;
break;
}
- case FOREIGN_CALL_DIRECT_FAR: {
- // Create relocation entry
- int addend = -8; // Size in bytes of the patch location
- // Relocation should be applied at the location after call operand
- // 10 = 2 (jmp [r]) + 8 (imm64)
- offset = offset + reloc.getSize() + addend - 2;
- pcrel = 0; length = 3;
- break;
- }
- case FOREIGN_CALL_INDIRECT:
- case JAVA_CALL_INDIRECT:
- case STUB_CALL_INDIRECT: {
+ case JAVA_CALL_INDIRECT: {
// Do nothing.
return;
}
- case EXTERNAL_DATA_REFERENCE_FAR: {
- // Create relocation entry
+ case METASPACE_GOT_REFERENCE:
+ case EXTERNAL_PLT_TO_GOT: {
int addend = -4; // Size of 32-bit address of the GOT
/*
* Relocation should be applied before the test instruction to the move instruction.
- * offset points to the test instruction after the instruction that loads
- * the address of polling page. So set the offset appropriately.
+ * reloc.getOffset() points to the test instruction after the instruction that loads the address of
+ * polling page. So set the offset appropriately.
*/
offset = offset + addend;
- pcrel = 0; length = 2;
+ pcrel = 1;
+ length = 2;
break;
}
- case METASPACE_GOT_REFERENCE:
- case EXTERNAL_PLT_TO_GOT:
- case STATIC_STUB_TO_STATIC_METHOD:
- case STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT: {
- int addend = -4; // Size of 32-bit address of the GOT
- /*
- * Relocation should be applied before the test instruction to
- * the move instruction. reloc.getOffset() points to the
- * test instruction after the instruction that loads the
- * address of polling page. So set the offset appropriately.
- */
- offset = offset + addend;
- pcrel = 1; length = 2;
- break;
- }
- case EXTERNAL_GOT_TO_PLT:
- case LOADTIME_ADDRESS: {
+ case EXTERNAL_GOT_TO_PLT: {
// this is load time relocations
- pcrel = 0; length = 3;
+ pcrel = 0;
+ length = 3;
break;
}
default:
@@ -448,20 +407,17 @@ public class JMachORelocObject {
switch (MachOTargetInfo.getMachOArch()) {
case mach_header_64.CPU_TYPE_X86_64:
// Return X86_64_RELOC_* entries based on relocType
- if (relocType == RelocType.FOREIGN_CALL_DIRECT || relocType == RelocType.JAVA_CALL_DIRECT || relocType == RelocType.FOREIGN_CALL_INDIRECT_GOT) {
+ if (relocType == RelocType.JAVA_CALL_DIRECT ||
+ relocType == RelocType.FOREIGN_CALL_INDIRECT_GOT) {
machORelocType = reloc_info.X86_64_RELOC_BRANCH;
} else if (relocType == RelocType.STUB_CALL_DIRECT) {
machORelocType = reloc_info.X86_64_RELOC_BRANCH;
- } else if (relocType == RelocType.FOREIGN_CALL_DIRECT_FAR) {
- machORelocType = reloc_info.X86_64_RELOC_UNSIGNED;
- } else if (relocType == RelocType.FOREIGN_CALL_INDIRECT || relocType == RelocType.JAVA_CALL_INDIRECT || relocType == RelocType.STUB_CALL_INDIRECT) {
+ } else if (relocType == RelocType.JAVA_CALL_INDIRECT) {
machORelocType = reloc_info.X86_64_RELOC_NONE;
- } else if ((relocType == RelocType.EXTERNAL_DATA_REFERENCE_FAR)) {
- machORelocType = reloc_info.X86_64_RELOC_GOT;
- } else if (relocType == RelocType.METASPACE_GOT_REFERENCE || relocType == RelocType.EXTERNAL_PLT_TO_GOT || relocType == RelocType.STATIC_STUB_TO_STATIC_METHOD ||
- relocType == RelocType.STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT) {
+ } else if (relocType == RelocType.METASPACE_GOT_REFERENCE ||
+ relocType == RelocType.EXTERNAL_PLT_TO_GOT) {
machORelocType = reloc_info.X86_64_RELOC_BRANCH;
- } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT || relocType == RelocType.LOADTIME_ADDRESS) {
+ } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT) {
machORelocType = reloc_info.X86_64_RELOC_UNSIGNED;
} else {
assert false : "Unhandled relocation type: " + relocType;
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachO.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachO.java
index 752723f25dc..639a16d196c 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachO.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachO.java
@@ -23,10 +23,10 @@
package jdk.tools.jaotc.binformat.macho;
+//@formatter:off
/**
*
- * Support for the creation of Mach-o Object files.
- * Current support is limited to 64 bit x86_64.
+ * Support for the creation of Mach-o Object files. Current support is limited to 64 bit x86_64.
*
* File Format Overview:
*
@@ -38,12 +38,12 @@ package jdk.tools.jaotc.binformat.macho;
* (which each include multiple Sections)
*/
-public class MachO {
+final class MachO {
/**
* mach_header_64 structure defines
*/
- public enum mach_header_64 {
+ enum mach_header_64 {
magic( 0, 4),
cputype( 4, 4),
cpusubtype( 8, 4),
@@ -53,49 +53,49 @@ public class MachO {
flags(24, 4),
reserved(28, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
mach_header_64(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 32;
+ static int totalsize = 32;
/**
* mach_header_64 defines
*/
- public static final int MH_MAGIC = 0xfeedface;
- public static final int MH_MAGIC_64 = 0xfeedfacf;
- public static final int MH_SUBSECTIONS_VIA_SYMBOLS = 0x2000;
+ static final int MH_MAGIC = 0xfeedface;
+ static final int MH_MAGIC_64 = 0xfeedfacf;
+ static final int MH_SUBSECTIONS_VIA_SYMBOLS = 0x2000;
/**
* filetype
*/
- public static final int MH_OBJECT = 0x1;
+ static final int MH_OBJECT = 0x1;
/**
* cputype
*/
- public static final int CPU_TYPE_ANY = -1;
- public static final int CPU_ARCH_ABI64 = 0x1000000;
- public static final int CPU_TYPE_X86_64 = 0x1000007;
- public static final int CPU_TYPE_ARM64 = 0x100000c;
+ static final int CPU_TYPE_ANY = -1;
+ static final int CPU_ARCH_ABI64 = 0x1000000;
+ static final int CPU_TYPE_X86_64 = 0x1000007;
+ static final int CPU_TYPE_ARM64 = 0x100000c;
/**
* cpusubtype
*/
- public static final int CPU_SUBTYPE_I386_ALL = 3;
- public static final int CPU_SUBTYPE_ARM64_ALL = 0;
- public static final int CPU_SUBTYPE_LITTLE_ENDIAN = 0;
- public static final int CPU_SUBTYPE_BIG_ENDIAN = 1;
+ static final int CPU_SUBTYPE_I386_ALL = 3;
+ static final int CPU_SUBTYPE_ARM64_ALL = 0;
+ static final int CPU_SUBTYPE_LITTLE_ENDIAN = 0;
+ static final int CPU_SUBTYPE_BIG_ENDIAN = 1;
}
/**
* segment_command_64 structure defines
*/
- public enum segment_command_64 {
+ enum segment_command_64 {
cmd( 0, 4),
cmdsize( 4, 4),
segname( 8,16),
@@ -108,23 +108,23 @@ public class MachO {
nsects(64, 4),
flags(68, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
segment_command_64(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 72;
+ static int totalsize = 72;
- public static final int LC_SEGMENT_64 = 0x19;
+ static final int LC_SEGMENT_64 = 0x19;
}
/**
* section_64 structure defines
*/
- public enum section_64 {
+ enum section_64 {
sectname( 0,16),
segname(16,16),
addr(32, 8),
@@ -138,49 +138,49 @@ public class MachO {
reserved2(72, 4),
reserved3(76, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
section_64(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 80;
+ static int totalsize = 80;
- public static int S_REGULAR = 0x0;
- public static int S_CSTRING_LITERALS = 0x2;
- public static int S_ATTR_PURE_INSTRUCTIONS = 0x80000000;
- public static int S_ATTR_SOME_INSTRUCTIONS = 0x400;
+ static int S_REGULAR = 0x0;
+ static int S_CSTRING_LITERALS = 0x2;
+ static int S_ATTR_PURE_INSTRUCTIONS = 0x80000000;
+ static int S_ATTR_SOME_INSTRUCTIONS = 0x400;
}
/**
* version_min_command structure defines
*/
- public enum version_min_command {
+ enum version_min_command {
cmd( 0, 4),
cmdsize( 4, 4),
version( 8, 4),
sdk(12, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
version_min_command(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 16;
+ static int totalsize = 16;
- public static final int LC_VERSION_MIN_MACOSX = 0x24;
- public static final int LC_VERSION_MIN_IPHONEOS = 0x25;
+ static final int LC_VERSION_MIN_MACOSX = 0x24;
+ static final int LC_VERSION_MIN_IPHONEOS = 0x25;
}
/**
* symtab_command structure defines
*/
- public enum symtab_command {
+ enum symtab_command {
cmd( 0, 4),
cmdsize( 4, 4),
symoff( 8, 4),
@@ -188,17 +188,17 @@ public class MachO {
stroff(16, 4),
strsize(20, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
symtab_command(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 24;
+ static int totalsize = 24;
- public static final int LC_SYMTAB = 0x2;
+ static final int LC_SYMTAB = 0x2;
}
/**
@@ -206,33 +206,33 @@ public class MachO {
*
* nlist_64 structure defines
*/
- public enum nlist_64 {
+ enum nlist_64 {
n_strx( 0, 4),
n_type( 4, 1),
n_sect( 5, 1),
n_desc( 6, 2),
n_value( 8, 8);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
nlist_64(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 16;
+ static int totalsize = 16;
- public static final int N_EXT = 0x1;
- public static final int N_TYPE = 0xe;
- public static final int N_UNDF = 0x0;
- public static final int N_SECT = 0xe;
+ static final int N_EXT = 0x1;
+ static final int N_TYPE = 0xe;
+ static final int N_UNDF = 0x0;
+ static final int N_SECT = 0xe;
}
/**
* dysymtab_command structure defines
*/
- public enum dysymtab_command {
+ enum dysymtab_command {
cmd( 0, 4),
cmdsize( 4, 4),
ilocalsym( 8, 4),
@@ -254,54 +254,55 @@ public class MachO {
locreloff(72, 4),
nlocrel(76, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
dysymtab_command(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 80;
+ static int totalsize = 80;
- public static final int LC_DYSYMTAB = 0xb;
+ static final int LC_DYSYMTAB = 0xb;
}
/**
* relocation_info structure defines
*/
- public enum reloc_info {
+ enum reloc_info {
r_address( 0, 4),
r_relocinfo( 4, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
reloc_info(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 8;
+ static int totalsize = 8;
- public static final int REL_SYMNUM_MASK = 0xffffff;
- public static final int REL_SYMNUM_SHIFT = 0x0;
- public static final int REL_PCREL_MASK = 0x1;
- public static final int REL_PCREL_SHIFT = 0x18;
- public static final int REL_LENGTH_MASK = 0x3;
- public static final int REL_LENGTH_SHIFT = 0x19;
- public static final int REL_EXTERN_MASK = 0x1;
- public static final int REL_EXTERN_SHIFT = 0x1b;
- public static final int REL_TYPE_MASK = 0xf;
- public static final int REL_TYPE_SHIFT = 0x1c;
+ static final int REL_SYMNUM_MASK = 0xffffff;
+ static final int REL_SYMNUM_SHIFT = 0x0;
+ static final int REL_PCREL_MASK = 0x1;
+ static final int REL_PCREL_SHIFT = 0x18;
+ static final int REL_LENGTH_MASK = 0x3;
+ static final int REL_LENGTH_SHIFT = 0x19;
+ static final int REL_EXTERN_MASK = 0x1;
+ static final int REL_EXTERN_SHIFT = 0x1b;
+ static final int REL_TYPE_MASK = 0xf;
+ static final int REL_TYPE_SHIFT = 0x1c;
/* reloc_type_x86_64 defines */
- public static final int X86_64_RELOC_NONE = 0x0;
- public static final int X86_64_RELOC_BRANCH = 0x2;
- public static final int X86_64_RELOC_GOT = 0x4;
- public static final int X86_64_RELOC_GOT_LOAD = 0x3;
- public static final int X86_64_RELOC_SIGNED = 0x1;
- public static final int X86_64_RELOC_UNSIGNED = 0x0;
+ static final int X86_64_RELOC_NONE = 0x0;
+ static final int X86_64_RELOC_BRANCH = 0x2;
+ static final int X86_64_RELOC_GOT = 0x4;
+ static final int X86_64_RELOC_GOT_LOAD = 0x3;
+ static final int X86_64_RELOC_SIGNED = 0x1;
+ static final int X86_64_RELOC_UNSIGNED = 0x0;
}
}
+//@formatter:on
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOByteBuffer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOByteBuffer.java
index 14b75387277..31f197b5200 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOByteBuffer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOByteBuffer.java
@@ -23,21 +23,19 @@
package jdk.tools.jaotc.binformat.macho;
-
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.macho.MachOTargetInfo;
-import jdk.tools.jaotc.binformat.macho.MachO.mach_header_64;
-public class MachOByteBuffer {
+final class MachOByteBuffer {
- public static ByteBuffer allocate(int size) {
+ static ByteBuffer allocate(int size) {
ByteBuffer buf = ByteBuffer.allocate(size);
- if (MachOTargetInfo.getMachOEndian() ==
- MachO.mach_header_64.CPU_SUBTYPE_LITTLE_ENDIAN)
+ if (MachOTargetInfo.getMachOEndian() == MachO.mach_header_64.CPU_SUBTYPE_LITTLE_ENDIAN) {
buf.order(ByteOrder.LITTLE_ENDIAN);
- else
+ } else {
buf.order(ByteOrder.BIG_ENDIAN);
+ }
return (buf);
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOContainer.java
index bcb46c368c7..1f2d6c75912 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOContainer.java
@@ -26,14 +26,13 @@ package jdk.tools.jaotc.binformat.macho;
import java.io.File;
import java.io.FileOutputStream;
-public class MachOContainer {
+final class MachOContainer {
- File outputFile;
- FileOutputStream outputStream;
- long fileOffset;
+ private final File outputFile;
+ private FileOutputStream outputStream;
+ private long fileOffset;
- public MachOContainer(String fileName) {
- String baseName;
+ MachOContainer(String fileName) {
outputFile = new File(fileName);
if (outputFile.exists()) {
@@ -48,7 +47,7 @@ public class MachOContainer {
fileOffset = 0;
}
- public void close() {
+ void close() {
try {
outputStream.close();
} catch (Exception e) {
@@ -56,7 +55,7 @@ public class MachOContainer {
}
}
- public void writeBytes(byte [] bytes) {
+ void writeBytes(byte[] bytes) {
try {
outputStream.write(bytes);
} catch (Exception e) {
@@ -66,10 +65,10 @@ public class MachOContainer {
}
// Write bytes to output file with up front alignment padding
- public void writeBytes(byte [] bytes, int alignment) {
+ void writeBytes(byte[] bytes, int alignment) {
try {
// Pad to alignment
- while ((fileOffset & (long)(alignment-1)) != 0) {
+ while ((fileOffset & (alignment - 1)) != 0) {
outputStream.write(0);
fileOffset++;
}
@@ -80,4 +79,3 @@ public class MachOContainer {
fileOffset += bytes.length;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachODySymtab.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachODySymtab.java
index 4ede3869087..862393b1b5f 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachODySymtab.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachODySymtab.java
@@ -24,16 +24,14 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.dysymtab_command;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachODySymtab {
- ByteBuffer dysymtab;
+final class MachODySymtab {
+ private final ByteBuffer dysymtab;
- public MachODySymtab(int nlocal, int nglobal, int nundef) {
+ MachODySymtab(int nlocal, int nglobal, int nundef) {
dysymtab = MachOByteBuffer.allocate(dysymtab_command.totalsize);
dysymtab.putInt(dysymtab_command.cmd.off, dysymtab_command.LC_DYSYMTAB);
@@ -42,13 +40,11 @@ public class MachODySymtab {
dysymtab.putInt(dysymtab_command.nlocalsym.off, nlocal);
dysymtab.putInt(dysymtab_command.iextdefsym.off, nlocal);
dysymtab.putInt(dysymtab_command.nextdefsym.off, nglobal);
- dysymtab.putInt(dysymtab_command.iundefsym.off, nlocal+nglobal);
+ dysymtab.putInt(dysymtab_command.iundefsym.off, nlocal + nglobal);
dysymtab.putInt(dysymtab_command.nundefsym.off, nundef);
}
- public byte[] getArray() {
+ byte[] getArray() {
return dysymtab.array();
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOHeader.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOHeader.java
index ae50f0186d9..cdcfa54c829 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOHeader.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOHeader.java
@@ -24,17 +24,15 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.mach_header_64;
import jdk.tools.jaotc.binformat.macho.MachOTargetInfo;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachOHeader {
- ByteBuffer header;
+final class MachOHeader {
+ private final ByteBuffer header;
- public MachOHeader() {
+ MachOHeader() {
header = MachOByteBuffer.allocate(mach_header_64.totalsize);
header.putInt(mach_header_64.magic.off, mach_header_64.MH_MAGIC_64);
@@ -44,17 +42,16 @@ public class MachOHeader {
header.putInt(mach_header_64.filetype.off, mach_header_64.MH_OBJECT);
}
- public void setCmdSizes(int ncmds, int sizeofcmds) {
+ void setCmdSizes(int ncmds, int sizeofcmds) {
header.putInt(mach_header_64.ncmds.off, ncmds);
header.putInt(mach_header_64.sizeofcmds.off, sizeofcmds);
}
- public int getCmdSize() {
+ int getCmdSize() {
return (header.getInt(mach_header_64.sizeofcmds.off));
}
- public byte[] getArray() {
+ byte[] getArray() {
return header.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocEntry.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocEntry.java
index f32cfda3d78..01f82916292 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocEntry.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocEntry.java
@@ -24,42 +24,31 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.reloc_info;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachORelocEntry {
- ByteBuffer entry;
+final class MachORelocEntry {
+ private final ByteBuffer entry;
- public MachORelocEntry(int offset,
- int symno,
- int pcrel,
- int length,
- int isextern,
- int type) {
+ MachORelocEntry(int offset, int symno, int pcrel, int length, int isextern, int type) {
entry = MachOByteBuffer.allocate(reloc_info.totalsize);
entry.putInt(reloc_info.r_address.off, offset);
// Encode and store the relocation entry bitfields
+ // @formatter:off
entry.putInt(reloc_info.r_relocinfo.off,
- ((symno & reloc_info.REL_SYMNUM_MASK)
- << reloc_info.REL_SYMNUM_SHIFT) |
- ((pcrel & reloc_info.REL_PCREL_MASK)
- << reloc_info.REL_PCREL_SHIFT) |
- ((length & reloc_info.REL_LENGTH_MASK)
- << reloc_info.REL_LENGTH_SHIFT) |
- ((isextern & reloc_info.REL_EXTERN_MASK)
- << reloc_info.REL_EXTERN_SHIFT) |
- ((type & reloc_info.REL_TYPE_MASK)
- << reloc_info.REL_TYPE_SHIFT));
+ ((symno & reloc_info.REL_SYMNUM_MASK) << reloc_info.REL_SYMNUM_SHIFT) |
+ ((pcrel & reloc_info.REL_PCREL_MASK) << reloc_info.REL_PCREL_SHIFT) |
+ ((length & reloc_info.REL_LENGTH_MASK) << reloc_info.REL_LENGTH_SHIFT) |
+ ((isextern & reloc_info.REL_EXTERN_MASK) << reloc_info.REL_EXTERN_SHIFT) |
+ ((type & reloc_info.REL_TYPE_MASK) << reloc_info.REL_TYPE_SHIFT));
+ // @formatter:on
}
- public byte[] getArray() {
+ byte[] getArray() {
return entry.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocTable.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocTable.java
index 196ae4615a8..c3900347ef2 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocTable.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachORelocTable.java
@@ -25,56 +25,43 @@ package jdk.tools.jaotc.binformat.macho;
import java.util.ArrayList;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.macho.MachORelocEntry;
-import jdk.tools.jaotc.binformat.macho.MachOTargetInfo;
import jdk.tools.jaotc.binformat.macho.MachO.reloc_info;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachORelocTable {
- ArrayList> relocEntries;
+final class MachORelocTable {
+ private final ArrayList> relocEntries;
int fileOffset;
- public MachORelocTable(int numsects) {
- relocEntries = new ArrayList>(numsects);
- for (int i = 0; i < numsects; i++)
+ MachORelocTable(int numsects) {
+ relocEntries = new ArrayList<>(numsects);
+ for (int i = 0; i < numsects; i++) {
relocEntries.add(new ArrayList());
+ }
}
- public void createRelocationEntry(int sectindex,
- int offset,
- int symno,
- int pcrel,
- int length,
- int isextern,
- int type) {
-
- MachORelocEntry entry = new MachORelocEntry(offset,
- symno,
- pcrel,
- length,
- isextern,
- type);
+ void createRelocationEntry(int sectindex, int offset, int symno, int pcrel, int length, int isextern, int type) {
+ MachORelocEntry entry = new MachORelocEntry(offset, symno, pcrel, length, isextern, type);
relocEntries.get(sectindex).add(entry);
}
- public int getAlign() {
+ static int getAlign() {
return (4);
}
- public int getNumRelocs(int section_index) {
+ int getNumRelocs(int section_index) {
return relocEntries.get(section_index).size();
}
// Return the relocation entries for a single section
- // or null if no entries added to section
- public byte [] getRelocData(int section_index) {
+ // or null if no entries added to section
+ byte[] getRelocData(int section_index) {
ArrayList entryList = relocEntries.get(section_index);
- if (entryList.size() == 0)
+ if (entryList.size() == 0) {
return null;
-
+ }
ByteBuffer relocData = MachOByteBuffer.allocate(entryList.size() * reloc_info.totalsize);
// Copy each entry to a single ByteBuffer
@@ -86,4 +73,3 @@ public class MachORelocTable {
return (relocData.array());
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSection.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSection.java
index 61b814a795a..e4bab0e028d 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSection.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSection.java
@@ -24,41 +24,36 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.section_64;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachOSection {
- ByteBuffer section;
- byte [] data;
- boolean hasrelocations;
+final class MachOSection {
+ private final ByteBuffer section;
+ private final byte[] data;
+ private final boolean hasrelocations;
- public MachOSection(String sectName, String segName, byte [] sectData, int sectFlags, boolean hasRelocations, int align) {
+ MachOSection(String sectName, String segName, byte[] sectData, int sectFlags, boolean hasRelocations, int align) {
section = MachOByteBuffer.allocate(section_64.totalsize);
// TODO: Hotspot uses long section names.
- // They are getting truncated.
- // Is this a problem??
+ // They are getting truncated.
+ // Is this a problem??
byte[] sectNameBytes = sectName.getBytes();
- int sectNameMax = section_64.sectname.sz < sectNameBytes.length ?
- section_64.sectname.sz : sectNameBytes.length;
-
- for (int i = 0; i < sectNameMax; i++)
- section.put(section_64.sectname.off+i, sectNameBytes[i]);
+ int sectNameMax = section_64.sectname.sz < sectNameBytes.length ? section_64.sectname.sz : sectNameBytes.length;
+ for (int i = 0; i < sectNameMax; i++) {
+ section.put(section_64.sectname.off + i, sectNameBytes[i]);
+ }
byte[] segNameBytes = segName.getBytes();
- int segNameMax = section_64.segname.sz < segNameBytes.length ?
- section_64.segname.sz : segNameBytes.length;
-
- for (int i = 0; i < segNameMax; i++)
- section.put(section_64.segname.off+i, segNameBytes[i]);
+ int segNameMax = section_64.segname.sz < segNameBytes.length ? section_64.segname.sz : segNameBytes.length;
+ for (int i = 0; i < segNameMax; i++) {
+ section.put(section_64.segname.off + i, segNameBytes[i]);
+ }
section.putLong(section_64.size.off, sectData.length);
- section.putInt(section_64.align.off,
- 31 - Integer.numberOfLeadingZeros(align));
+ section.putInt(section_64.align.off, 31 - Integer.numberOfLeadingZeros(align));
section.putInt(section_64.flags.off, sectFlags);
@@ -67,49 +62,47 @@ public class MachOSection {
hasrelocations = hasRelocations;
}
- public long getSize() {
+ long getSize() {
return section.getLong(section_64.size.off);
}
- public int getAlign() {
+ int getAlign() {
return (1 << section.getInt(section_64.align.off));
}
- public byte[] getArray() {
+ byte[] getArray() {
return section.array();
}
- public byte[] getDataArray() {
+ byte[] getDataArray() {
return data;
}
- public void setAddr(long addr) {
+ void setAddr(long addr) {
section.putLong(section_64.addr.off, addr);
}
- public long getAddr() {
+ long getAddr() {
return (section.getLong(section_64.addr.off));
}
- public void setOffset(int offset) {
+ void setOffset(int offset) {
section.putInt(section_64.offset.off, offset);
}
- public int getOffset() {
+ int getOffset() {
return (section.getInt(section_64.offset.off));
}
- public void setReloff(int offset) {
+ void setReloff(int offset) {
section.putInt(section_64.reloff.off, offset);
}
- public void setRelcount(int count) {
+ void setRelcount(int count) {
section.putInt(section_64.nreloc.off, count);
}
- public boolean hasRelocations() {
+ boolean hasRelocations() {
return hasrelocations;
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSegment.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSegment.java
index 3f588512783..9d8bc4c515a 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSegment.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSegment.java
@@ -24,9 +24,7 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.segment_command_64;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
@@ -52,5 +50,3 @@ public class MachOSegment {
return segment.array();
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymbol.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymbol.java
index 7c4444d9cab..81272d3b32e 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymbol.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymbol.java
@@ -24,17 +24,15 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.NativeSymbol;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.nlist_64;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachOSymbol extends NativeSymbol {
- ByteBuffer sym;
+final class MachOSymbol extends NativeSymbol {
+ private final ByteBuffer sym;
- public MachOSymbol(int symbolindex, int strindex, byte type, byte sectindex, long offset) {
+ MachOSymbol(int symbolindex, int strindex, byte type, byte sectindex, long offset) {
super(symbolindex);
sym = MachOByteBuffer.allocate(nlist_64.totalsize);
@@ -42,13 +40,12 @@ public class MachOSymbol extends NativeSymbol {
sym.put(nlist_64.n_type.off, type);
// Section indexes start at 1 but we manage the index internally
// as 0 relative
- sym.put(nlist_64.n_sect.off, (byte)(sectindex+1));
- sym.putChar(nlist_64.n_desc.off, (char )0);
+ sym.put(nlist_64.n_sect.off, (byte) (sectindex + 1));
+ sym.putChar(nlist_64.n_desc.off, (char) 0);
sym.putLong(nlist_64.n_value.off, offset);
}
- public byte[] getArray() {
+ byte[] getArray() {
return sym.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymtab.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymtab.java
index be24bc83cd8..221578d4d9e 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymtab.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOSymtab.java
@@ -24,50 +24,42 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import java.util.ArrayList;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.symtab_command;
import jdk.tools.jaotc.binformat.macho.MachO.nlist_64;
import jdk.tools.jaotc.binformat.macho.MachOSymbol;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachOSymtab {
+final class MachOSymtab {
/**
* ByteBuffer holding the LC_SYMTAB command contents
*/
- ByteBuffer symtabCmd;
+ private final ByteBuffer symtabCmd;
- /**
- * ByteBuffer holding the symbol table entries and strings
- */
- ByteBuffer symtabData;
+ private int symtabDataSize;
- int symtabDataSize;
-
- ArrayListlocalSymbols = new ArrayList();
- ArrayListglobalSymbols = new ArrayList();
- ArrayListundefSymbols = new ArrayList();
+ private final ArrayList localSymbols = new ArrayList<>();
+ private final ArrayList globalSymbols = new ArrayList<>();
+ private final ArrayList undefSymbols = new ArrayList<>();
/**
* number of symbols added
*/
- int symbolCount;
+ private int symbolCount;
/**
* String holding symbol table strings
*/
- private StringBuilder strTabContent = new StringBuilder();
+ private final StringBuilder strTabContent = new StringBuilder();
/**
- * Keeps track of bytes in string table since strTabContent.length()
- * is number of chars, not bytes.
+ * Keeps track of bytes in string table since strTabContent.length() is number of chars, not bytes.
*/
private int strTabNrOfBytes = 0;
- public MachOSymtab() {
+ MachOSymtab() {
symtabCmd = MachOByteBuffer.allocate(symtab_command.totalsize);
symtabCmd.putInt(symtab_command.cmd.off, symtab_command.LC_SYMTAB);
@@ -77,11 +69,11 @@ public class MachOSymtab {
}
- public int getAlign() {
+ static int getAlign() {
return (4);
}
- public MachOSymbol addSymbolEntry(String name, byte type, byte secHdrIndex, long offset) {
+ MachOSymbol addSymbolEntry(String name, byte type, byte secHdrIndex, long offset) {
// Get the current symbol index and append symbol name to string table.
int index;
MachOSymbol sym;
@@ -109,7 +101,7 @@ public class MachOSymtab {
case nlist_64.N_UNDF: // null symbol
localSymbols.add(sym);
break;
- case nlist_64.N_SECT|nlist_64.N_EXT:
+ case nlist_64.N_SECT | nlist_64.N_EXT:
globalSymbols.add(sym);
break;
default:
@@ -121,30 +113,30 @@ public class MachOSymtab {
return (sym);
}
- public void setOffset(int symoff) {
+ void setOffset(int symoff) {
symtabCmd.putInt(symtab_command.symoff.off, symoff);
}
// Update the symbol indexes once all symbols have been added.
// This is required since we'll be reordering the symbols in the
// file to be in the order of Local, global and Undefined.
- public void updateIndexes() {
+ void updateIndexes() {
int index = 0;
// Update the local symbol indexes
- for (int i = 0; i < localSymbols.size(); i++ ) {
+ for (int i = 0; i < localSymbols.size(); i++) {
MachOSymbol sym = localSymbols.get(i);
sym.setIndex(index++);
}
// Update the global symbol indexes
- for (int i = 0; i < globalSymbols.size(); i++ ) {
+ for (int i = 0; i < globalSymbols.size(); i++) {
MachOSymbol sym = globalSymbols.get(i);
sym.setIndex(index++);
}
// Update the undefined symbol indexes
- for (int i = index; i < undefSymbols.size(); i++ ) {
+ for (int i = index; i < undefSymbols.size(); i++) {
MachOSymbol sym = undefSymbols.get(i);
sym.setIndex(index++);
}
@@ -152,7 +144,7 @@ public class MachOSymtab {
// Update LC_SYMTAB command fields based on the number of symbols added
// return the file size taken up by symbol table entries and strings
- public int calcSizes() {
+ int calcSizes() {
int stroff;
stroff = symtabCmd.getInt(symtab_command.symoff.off) + (nlist_64.totalsize * symbolCount);
@@ -164,42 +156,49 @@ public class MachOSymtab {
return (symtabDataSize);
}
- public int getNumLocalSyms() { return localSymbols.size(); }
- public int getNumGlobalSyms() { return globalSymbols.size(); }
- public int getNumUndefSyms() { return undefSymbols.size(); }
+ int getNumLocalSyms() {
+ return localSymbols.size();
+ }
- public byte[] getCmdArray() {
+ int getNumGlobalSyms() {
+ return globalSymbols.size();
+ }
+
+ int getNumUndefSyms() {
+ return undefSymbols.size();
+ }
+
+ byte[] getCmdArray() {
return symtabCmd.array();
}
// Create a single byte array that contains the symbol table entries
// and string table
- public byte[] getDataArray() {
- int index = 0;
- symtabData = MachOByteBuffer.allocate(symtabDataSize);
- byte [] retarray;
+ byte[] getDataArray() {
+ ByteBuffer symtabData = MachOByteBuffer.allocate(symtabDataSize);
+ byte[] retarray;
// Add the local symbols
- for (int i = 0; i < localSymbols.size(); i++ ) {
+ for (int i = 0; i < localSymbols.size(); i++) {
MachOSymbol sym = localSymbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
// Add the global symbols
- for (int i = 0; i < globalSymbols.size(); i++ ) {
+ for (int i = 0; i < globalSymbols.size(); i++) {
MachOSymbol sym = globalSymbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
// Add the undefined symbols
- for (int i = 0; i < undefSymbols.size(); i++ ) {
+ for (int i = 0; i < undefSymbols.size(); i++) {
MachOSymbol sym = undefSymbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
// Add the stringtable
- byte [] strs = strTabContent.toString().getBytes();
+ byte[] strs = strTabContent.toString().getBytes();
symtabData.put(strs);
retarray = symtabData.array();
@@ -207,5 +206,3 @@ public class MachOSymtab {
return (retarray);
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOTargetInfo.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOTargetInfo.java
index 1a0a199d499..f73ae0aefe8 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOTargetInfo.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOTargetInfo.java
@@ -24,14 +24,13 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.mach_header_64;
/**
* Class that abstracts MACH-O target details.
*
*/
-public class MachOTargetInfo {
+final class MachOTargetInfo {
/**
* Target architecture and subtype.
*/
@@ -68,20 +67,19 @@ public class MachOTargetInfo {
osName = System.getProperty("os.name").toLowerCase();
}
- public static int getMachOArch() {
+ static int getMachOArch() {
return arch;
}
- public static int getMachOSubArch() {
+ static int getMachOSubArch() {
return subarch;
}
- public static int getMachOEndian() {
+ static int getMachOEndian() {
return endian;
}
- public static String getOsName() {
+ static String getOsName() {
return osName;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOVersion.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOVersion.java
index 57475aeb0eb..80d1f177239 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOVersion.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/macho/MachOVersion.java
@@ -24,16 +24,14 @@
package jdk.tools.jaotc.binformat.macho;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.macho.MachO;
import jdk.tools.jaotc.binformat.macho.MachO.version_min_command;
import jdk.tools.jaotc.binformat.macho.MachOByteBuffer;
-public class MachOVersion {
- ByteBuffer version;
+final class MachOVersion {
+ private final ByteBuffer version;
- public MachOVersion() {
+ MachOVersion() {
version = MachOByteBuffer.allocate(version_min_command.totalsize);
version.putInt(version_min_command.cmd.off, version_min_command.LC_VERSION_MIN_MACOSX);
@@ -42,8 +40,7 @@ public class MachOVersion {
version.putInt(version_min_command.sdk.off, 0); /* N/A SDK */
}
- public byte[] getArray() {
+ byte[] getArray() {
return version.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/JPECoffRelocObject.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/JPECoffRelocObject.java
index 89c853e5ac9..17f092f566d 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/JPECoffRelocObject.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/JPECoffRelocObject.java
@@ -24,13 +24,11 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import jdk.tools.jaotc.binformat.Container;
import jdk.tools.jaotc.binformat.BinaryContainer;
import jdk.tools.jaotc.binformat.ByteContainer;
import jdk.tools.jaotc.binformat.CodeContainer;
@@ -38,11 +36,9 @@ import jdk.tools.jaotc.binformat.ReadOnlyDataContainer;
import jdk.tools.jaotc.binformat.Relocation;
import jdk.tools.jaotc.binformat.Relocation.RelocType;
import jdk.tools.jaotc.binformat.Symbol;
-import jdk.tools.jaotc.binformat.NativeSymbol;
import jdk.tools.jaotc.binformat.Symbol.Binding;
import jdk.tools.jaotc.binformat.Symbol.Kind;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoffSymbol;
import jdk.tools.jaotc.binformat.pecoff.PECoffTargetInfo;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_FILE_HEADER;
@@ -56,71 +52,53 @@ public class JPECoffRelocObject {
private final PECoffContainer pecoffContainer;
- private final int segmentSize;
+ private final int sectionAlignment;
- public JPECoffRelocObject(BinaryContainer binContainer, String outputFileName, String aotVersion) {
+ public JPECoffRelocObject(BinaryContainer binContainer, String outputFileName) {
this.binContainer = binContainer;
- this.pecoffContainer = new PECoffContainer(outputFileName, aotVersion);
- this.segmentSize = binContainer.getCodeSegmentSize();
- if (segmentSize != 64) {
- System.out.println("binContainer alignment size not 64 bytes, update JPECoffRelocObject");
- }
+ this.pecoffContainer = new PECoffContainer(outputFileName);
+ this.sectionAlignment = binContainer.getCodeSegmentSize();
}
- private PECoffSection createByteSection(ArrayListsections,
- String sectName,
- byte [] scnData,
- boolean hasRelocs,
- int scnFlags) {
+ private static PECoffSection createByteSection(ArrayList sections, String sectName, byte[] scnData,
+ boolean hasRelocs, int scnFlags, int sectAlign) {
- PECoffSection sect = new PECoffSection(sectName,
- scnData,
- scnFlags,
- hasRelocs,
- sections.size());
+ PECoffSection sect = new PECoffSection(sectName, scnData, scnFlags, sectAlign, hasRelocs, sections.size());
// Add this section to our list
sections.add(sect);
return (sect);
}
- private void createByteSection(ArrayListsections,
- ByteContainer c, int scnFlags) {
+ private static void createByteSection(ArrayList sections, ByteContainer c, int scnFlags, int sectAlign) {
PECoffSection sect;
boolean hasRelocs = c.hasRelocations();
byte[] scnData = c.getByteArray();
- sect = createByteSection(sections, c.getContainerName(),
- scnData, hasRelocs,
- scnFlags);
+ sect = createByteSection(sections, c.getContainerName(), scnData, hasRelocs, scnFlags, sectAlign);
c.setSectionId(sect.getSectionId());
}
- private void createCodeSection(ArrayListsections, CodeContainer c) {
- createByteSection(sections, c, IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ |
- IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_EXECUTE |
- IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_64BYTES |
- IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_CODE);
+ private void createCodeSection(ArrayList sections, CodeContainer c) {
+ int scnFlags = IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ | IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_EXECUTE | IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_CODE;
+ createByteSection(sections, c, scnFlags, sectionAlignment);
}
- private void createReadOnlySection(ArrayListsections, ReadOnlyDataContainer c) {
- createByteSection(sections, c, IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ |
- IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_64BYTES |
- IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_INITIALIZED_DATA);
+ private void createReadOnlySection(ArrayList sections, ReadOnlyDataContainer c) {
+ int scnFlags = IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ | IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_INITIALIZED_DATA;
+ createByteSection(sections, c, scnFlags, sectionAlignment);
}
- private void createReadWriteSection(ArrayListsections, ByteContainer c) {
- int scnFlags = IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ |
- IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_WRITE |
- IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_64BYTES;
+ private void createReadWriteSection(ArrayList sections, ByteContainer c) {
+ int scnFlags = IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_READ | IMAGE_SECTION_HEADER.IMAGE_SCN_MEM_WRITE;
- if (c.getByteArray().length > 0)
+ if (c.getByteArray().length > 0) {
scnFlags |= IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_INITIALIZED_DATA;
- else
+ } else {
scnFlags |= IMAGE_SECTION_HEADER.IMAGE_SCN_CNT_UNINITIALIZED_DATA;
-
- createByteSection(sections, c, scnFlags);
+ }
+ createByteSection(sections, c, scnFlags, sectionAlignment);
}
/**
@@ -131,7 +109,7 @@ public class JPECoffRelocObject {
* @throws IOException throws {@code IOException} as a result of file system access failures.
*/
public void createPECoffRelocObject(Map> relocationTable, Collection symbols) throws IOException {
- ArrayList sections = new ArrayList();
+ ArrayList sections = new ArrayList<>();
// Create text section
createCodeSection(sections, binContainer.getCodeContainer());
@@ -139,51 +117,45 @@ public class JPECoffRelocObject {
createReadOnlySection(sections, binContainer.getKlassesOffsetsContainer());
createReadOnlySection(sections, binContainer.getMethodsOffsetsContainer());
createReadOnlySection(sections, binContainer.getKlassesDependenciesContainer());
- createReadWriteSection(sections, binContainer.getMetaspaceGotContainer());
- createReadWriteSection(sections, binContainer.getMetadataGotContainer());
- createReadWriteSection(sections, binContainer.getMethodStateContainer());
- createReadWriteSection(sections, binContainer.getOopGotContainer());
- createReadWriteSection(sections, binContainer.getMethodMetadataContainer());
+ createReadOnlySection(sections, binContainer.getMethodMetadataContainer());
createReadOnlySection(sections, binContainer.getStubsOffsetsContainer());
createReadOnlySection(sections, binContainer.getHeaderContainer().getContainer());
createReadOnlySection(sections, binContainer.getCodeSegmentsContainer());
createReadOnlySection(sections, binContainer.getConstantDataContainer());
createReadOnlySection(sections, binContainer.getConfigContainer());
-
- // createExternalLinkage();
-
- createCodeSection(sections, binContainer.getExtLinkageContainer());
+ createReadWriteSection(sections, binContainer.getKlassesGotContainer());
+ createReadWriteSection(sections, binContainer.getCountersGotContainer());
+ createReadWriteSection(sections, binContainer.getMetadataGotContainer());
+ createReadWriteSection(sections, binContainer.getMethodStateContainer());
+ createReadWriteSection(sections, binContainer.getOopGotContainer());
createReadWriteSection(sections, binContainer.getExtLinkageGOTContainer());
// Allocate PECoff Header
PECoffHeader header = new PECoffHeader();
// Get PECoff symbol data from BinaryContainer object's symbol tables
- PECoffSymtab symtab = createPECoffSymbolTables(sections, symbols);
+ PECoffSymtab symtab = createPECoffSymbolTables(symbols);
// Add Linker Directives Section
- createByteSection(sections, ".drectve",
- symtab.getDirectiveArray(), false,
- IMAGE_SECTION_HEADER.IMAGE_SCN_LNK_INFO |
- IMAGE_SECTION_HEADER.IMAGE_SCN_LNK_REMOVE |
- IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_1BYTES);
+ int scnFlags = IMAGE_SECTION_HEADER.IMAGE_SCN_LNK_INFO | IMAGE_SECTION_HEADER.IMAGE_SCN_LNK_REMOVE;
+ createByteSection(sections, ".drectve", symtab.getDirectiveArray(), false, scnFlags, 1 /* 1 byte alignment */);
// Create the Relocation Tables
PECoffRelocTable pecoffRelocs = createPECoffRelocTable(sections, relocationTable);
// File Output Order
//
- // HEADER (Need address of Symbol Table + symbol count)
- // SECTIONS (Need pointer to Section Data, Relocation Table)
- // DIRECTIVES
- // SYMBOL TABLE
- // SYMBOLS
- // SECTION DATA
- // RELOCATION TABLE
+ // HEADER (Need address of Symbol Table + symbol count)
+ // SECTIONS (Need pointer to Section Data, Relocation Table)
+ // DIRECTIVES
+ // SYMBOL TABLE
+ // SYMBOLS
+ // SECTION DATA
+ // RELOCATION TABLE
// Calculate Offset for Symbol table
int file_offset = IMAGE_FILE_HEADER.totalsize +
- (IMAGE_SECTION_HEADER.totalsize*sections.size());
+ (IMAGE_SECTION_HEADER.totalsize * sections.size());
// Update Header fields
header.setSectionCount(sections.size());
@@ -194,14 +166,14 @@ public class JPECoffRelocObject {
file_offset += ((symtab.getSymtabCount() * IMAGE_SYMBOL.totalsize) +
symtab.getStrtabSize());
// And round it up
- file_offset = (file_offset + (sections.get(0).getDataAlign()-1)) &
- ~((sections.get(0).getDataAlign()-1));
+ file_offset = (file_offset + (sections.get(0).getDataAlign() - 1)) &
+ ~((sections.get(0).getDataAlign() - 1));
// Calc file offsets for section data
for (int i = 0; i < sections.size(); i++) {
PECoffSection sect = sections.get(i);
- file_offset = (file_offset + (sect.getDataAlign()-1)) &
- ~((sect.getDataAlign()-1));
+ file_offset = (file_offset + (sect.getDataAlign() - 1)) &
+ ~((sect.getDataAlign() - 1));
sect.setOffset(file_offset);
file_offset += sect.getSize();
}
@@ -214,7 +186,9 @@ public class JPECoffRelocObject {
sect.setReloff(file_offset);
sect.setRelcount(nreloc);
// extended relocations add an addition entry
- if (nreloc > 0xFFFF) nreloc++;
+ if (nreloc > 0xFFFF) {
+ nreloc++;
+ }
file_offset += (nreloc * IMAGE_RELOCATION.totalsize);
}
}
@@ -253,7 +227,7 @@ public class JPECoffRelocObject {
*
* @param symbols
*/
- private PECoffSymtab createPECoffSymbolTables(ArrayList sections, Collection symbols) {
+ private static PECoffSymtab createPECoffSymbolTables(Collection symbols) {
PECoffSymtab symtab = new PECoffSymtab();
// First, create the initial null symbol. This is a local symbol.
@@ -263,8 +237,8 @@ public class JPECoffRelocObject {
for (Symbol symbol : symbols) {
// Get the index of section this symbol is defined in.
int secHdrIndex = symbol.getSection().getSectionId();
- PECoffSymbol pecoffSymbol = symtab.addSymbolEntry(symbol.getName(), getPECoffTypeOf(symbol), getPECoffClassOf(symbol), (byte)secHdrIndex, symbol.getOffset(), symbol.getSize());
- symbol.setNativeSymbol((NativeSymbol)pecoffSymbol);
+ PECoffSymbol pecoffSymbol = symtab.addSymbolEntry(symbol.getName(), getPECoffTypeOf(symbol), getPECoffClassOf(symbol), (byte) secHdrIndex, symbol.getOffset());
+ symbol.setNativeSymbol(pecoffSymbol);
}
return (symtab);
}
@@ -291,13 +265,11 @@ public class JPECoffRelocObject {
* @param sections
* @param relocationTable
*/
- private PECoffRelocTable createPECoffRelocTable(ArrayList sections,
- Map> relocationTable) {
+ private PECoffRelocTable createPECoffRelocTable(ArrayList sections, Map> relocationTable) {
PECoffRelocTable pecoffRelocTable = new PECoffRelocTable(sections.size());
/*
- * For each of the symbols with associated relocation records, create a PECoff relocation
- * entry.
+ * For each of the symbols with associated relocation records, create a PECoff relocation entry.
*/
for (Map.Entry> entry : relocationTable.entrySet()) {
List relocs = entry.getValue();
@@ -315,18 +287,17 @@ public class JPECoffRelocObject {
return (pecoffRelocTable);
}
- private void createRelocation(Symbol symbol, Relocation reloc, PECoffRelocTable pecoffRelocTable) {
+ private static void createRelocation(Symbol symbol, Relocation reloc, PECoffRelocTable pecoffRelocTable) {
RelocType relocType = reloc.getType();
int pecoffRelocType = getPECoffRelocationType(relocType);
- PECoffSymbol sym = (PECoffSymbol)symbol.getNativeSymbol();
+ PECoffSymbol sym = (PECoffSymbol) symbol.getNativeSymbol();
int symno = sym.getIndex();
int sectindex = reloc.getSection().getSectionId();
int offset = reloc.getOffset();
int addend = 0;
switch (relocType) {
- case FOREIGN_CALL_DIRECT:
case JAVA_CALL_DIRECT:
case STUB_CALL_DIRECT:
case FOREIGN_CALL_INDIRECT_GOT: {
@@ -336,47 +307,22 @@ public class JPECoffRelocObject {
offset = offset + reloc.getSize() + addend;
break;
}
- case FOREIGN_CALL_DIRECT_FAR: {
- // Create relocation entry
- addend = -8; // Size in bytes of the patch location
- // Relocation should be applied at the location after call operand
- // 10 = 2 (jmp [r]) + 8 (imm64)
- offset = offset + reloc.getSize() + addend - 2;
- break;
- }
- case FOREIGN_CALL_INDIRECT:
- case JAVA_CALL_INDIRECT:
- case STUB_CALL_INDIRECT: {
+ case JAVA_CALL_INDIRECT: {
// Do nothing.
return;
}
- case EXTERNAL_DATA_REFERENCE_FAR: {
- // Create relocation entry
+ case METASPACE_GOT_REFERENCE:
+ case EXTERNAL_PLT_TO_GOT: {
addend = -4; // Size of 32-bit address of the GOT
/*
* Relocation should be applied before the test instruction to the move instruction.
- * offset points to the test instruction after the instruction that loads
- * the address of polling page. So set the offset appropriately.
+ * reloc.getOffset() points to the test instruction after the instruction that loads the address of
+ * polling page. So set the offset appropriately.
*/
offset = offset + addend;
break;
}
- case METASPACE_GOT_REFERENCE:
- case EXTERNAL_PLT_TO_GOT:
- case STATIC_STUB_TO_STATIC_METHOD:
- case STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT: {
- addend = -4; // Size of 32-bit address of the GOT
- /*
- * Relocation should be applied before the test instruction to
- * the move instruction. reloc.getOffset() points to the
- * test instruction after the instruction that loads the
- * address of polling page. So set the offset appropriately.
- */
- offset = offset + addend;
- break;
- }
- case EXTERNAL_GOT_TO_PLT:
- case LOADTIME_ADDRESS: {
+ case EXTERNAL_GOT_TO_PLT: {
// this is load time relocations
break;
}
@@ -391,27 +337,17 @@ public class JPECoffRelocObject {
int pecoffRelocType = 0; // R__NONE if #define'd to 0 for all values of ARCH
switch (PECoffTargetInfo.getPECoffArch()) {
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
- if (relocType == RelocType.FOREIGN_CALL_DIRECT ||
- relocType == RelocType.JAVA_CALL_DIRECT ||
+ if (relocType == RelocType.JAVA_CALL_DIRECT ||
relocType == RelocType.FOREIGN_CALL_INDIRECT_GOT) {
pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_REL32;
} else if (relocType == RelocType.STUB_CALL_DIRECT) {
pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_REL32;
- } else if (relocType == RelocType.FOREIGN_CALL_DIRECT_FAR) {
- pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_ADDR64;
- } else if (relocType == RelocType.FOREIGN_CALL_INDIRECT ||
- relocType == RelocType.JAVA_CALL_INDIRECT ||
- relocType == RelocType.STUB_CALL_INDIRECT) {
+ } else if (relocType == RelocType.JAVA_CALL_INDIRECT) {
pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_ABSOLUTE;
- } else if ((relocType == RelocType.EXTERNAL_DATA_REFERENCE_FAR)) {
- pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_REL32;
} else if (relocType == RelocType.METASPACE_GOT_REFERENCE ||
- relocType == RelocType.EXTERNAL_PLT_TO_GOT ||
- relocType == RelocType.STATIC_STUB_TO_STATIC_METHOD ||
- relocType == RelocType.STATIC_STUB_TO_HOTSPOT_LINKAGE_GOT) {
+ relocType == RelocType.EXTERNAL_PLT_TO_GOT) {
pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_REL32;
- } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT ||
- relocType == RelocType.LOADTIME_ADDRESS) {
+ } else if (relocType == RelocType.EXTERNAL_GOT_TO_PLT) {
pecoffRelocType = IMAGE_RELOCATION.IMAGE_REL_AMD64_ADDR64;
} else {
assert false : "Unhandled relocation type: " + relocType;
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoff.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoff.java
index f71b2a7dd7c..3ae8264d602 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoff.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoff.java
@@ -25,17 +25,16 @@ package jdk.tools.jaotc.binformat.pecoff;
/**
*
- * Support for the creation of Coff files.
- * Current support is limited to 64 bit x86_64.
+ * Support for the creation of Coff files. Current support is limited to 64 bit x86_64.
*
*/
-public class PECoff {
-
+final class PECoff {
+ //@formatter:off
/**
* IMAGE_FILE_HEADER structure defines
*/
- public enum IMAGE_FILE_HEADER {
+ enum IMAGE_FILE_HEADER {
Machine( 0, 2),
NumberOfSections( 2, 2),
TimeDateStamp( 4, 4),
@@ -44,15 +43,15 @@ public class PECoff {
SizeOfOptionalHeader(16, 2),
Characteristics(18, 2);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
IMAGE_FILE_HEADER(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 20;
+ static int totalsize = 20;
/**
* IMAGE_FILE_HEADER defines
@@ -61,15 +60,15 @@ public class PECoff {
/**
* Machine
*/
- public static final char IMAGE_FILE_MACHINE_UNKNOWN = 0x0;
- public static final char IMAGE_FILE_MACHINE_AMD64 = 0x8664;
+ static final char IMAGE_FILE_MACHINE_UNKNOWN = 0x0;
+ static final char IMAGE_FILE_MACHINE_AMD64 = 0x8664;
}
/**
* IMAGE_SECTION_HEADER structure defines
*/
- public enum IMAGE_SECTION_HEADER {
+ enum IMAGE_SECTION_HEADER {
Name( 0, 8),
PhysicalAddress( 8, 4),
VirtualSize( 8, 4),
@@ -82,15 +81,15 @@ public class PECoff {
NumberOfLinenumbers(34, 2),
Characteristics(36, 4);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
IMAGE_SECTION_HEADER(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 40;
+ static int totalsize = 40;
/**
* IMAGE_SECTION_HEADER defines
@@ -99,29 +98,33 @@ public class PECoff {
/**
* Characteristics
*/
- public static final int IMAGE_SCN_CNT_CODE = 0x20;
- public static final int IMAGE_SCN_CNT_INITIALIZED_DATA = 0x40;
- public static final int IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x80;
- public static final int IMAGE_SCN_LNK_COMDAT = 0x1000;
- public static final int IMAGE_SCN_LNK_INFO = 0x200;
- public static final int IMAGE_SCN_LNK_REMOVE = 0x800;
+ static final int IMAGE_SCN_CNT_CODE = 0x20;
+ static final int IMAGE_SCN_CNT_INITIALIZED_DATA = 0x40;
+ static final int IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x80;
+ static final int IMAGE_SCN_LNK_COMDAT = 0x1000;
+ static final int IMAGE_SCN_LNK_INFO = 0x200;
+ static final int IMAGE_SCN_LNK_REMOVE = 0x800;
- public static final int IMAGE_SCN_ALIGN_1BYTES = 0x100000;
- public static final int IMAGE_SCN_ALIGN_2BYTES = 0x200000;
- public static final int IMAGE_SCN_ALIGN_4BYTES = 0x300000;
- public static final int IMAGE_SCN_ALIGN_8BYTES = 0x400000;
- public static final int IMAGE_SCN_ALIGN_16BYTES = 0x500000;
- public static final int IMAGE_SCN_ALIGN_32BYTES = 0x600000;
- public static final int IMAGE_SCN_ALIGN_64BYTES = 0x700000;
- public static final int IMAGE_SCN_ALIGN_MASK = 0xf00000;
- public static final int IMAGE_SCN_ALIGN_SHIFT = 20;
+ static final int IMAGE_SCN_ALIGN_1BYTES = 0x100000;
+ static final int IMAGE_SCN_ALIGN_2BYTES = 0x200000;
+ static final int IMAGE_SCN_ALIGN_4BYTES = 0x300000;
+ static final int IMAGE_SCN_ALIGN_8BYTES = 0x400000;
+ static final int IMAGE_SCN_ALIGN_16BYTES = 0x500000;
+ static final int IMAGE_SCN_ALIGN_32BYTES = 0x600000;
+ static final int IMAGE_SCN_ALIGN_64BYTES = 0x700000;
+ static final int IMAGE_SCN_ALIGN_128BYTES = 0x800000;
+ static final int IMAGE_SCN_ALIGN_256BYTES = 0x900000;
+ static final int IMAGE_SCN_ALIGN_512BYTES = 0xa00000;
+ static final int IMAGE_SCN_ALIGN_1024BYTES = 0xb00000;
+ static final int IMAGE_SCN_ALIGN_MASK = 0xf00000;
+ static final int IMAGE_SCN_ALIGN_SHIFT = 20;
- public static final int IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000;
+ static final int IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000;
- public static final int IMAGE_SCN_MEM_SHARED = 0x10000000;
- public static final int IMAGE_SCN_MEM_EXECUTE = 0x20000000;
- public static final int IMAGE_SCN_MEM_READ = 0x40000000;
- public static final int IMAGE_SCN_MEM_WRITE = 0x80000000;
+ static final int IMAGE_SCN_MEM_SHARED = 0x10000000;
+ static final int IMAGE_SCN_MEM_EXECUTE = 0x20000000;
+ static final int IMAGE_SCN_MEM_READ = 0x40000000;
+ static final int IMAGE_SCN_MEM_WRITE = 0x80000000;
}
@@ -130,7 +133,7 @@ public class PECoff {
*
* IMAGE_SYMBOL structure defines
*/
- public enum IMAGE_SYMBOL {
+ enum IMAGE_SYMBOL {
ShortName( 0, 8),
Short( 0, 4),
Long( 4, 4),
@@ -140,63 +143,63 @@ public class PECoff {
StorageClass(16, 1),
NumberOfAuxSymbols(17, 1);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
IMAGE_SYMBOL(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 18;
+ static int totalsize = 18;
/**
* Type
*/
- public static final int IMAGE_SYM_DTYPE_NONE = 0x0;
- public static final int IMAGE_SYM_DTYPE_FUNCTION = 0x20;
+ static final int IMAGE_SYM_DTYPE_NONE = 0x0;
+ static final int IMAGE_SYM_DTYPE_FUNCTION = 0x20;
/**
* StorageClass
*/
- public static final int IMAGE_SYM_CLASS_NULL = 0x0;
- public static final int IMAGE_SYM_CLASS_EXTERNAL = 0x2;
- public static final int IMAGE_SYM_CLASS_STATIC = 0x3;
- public static final int IMAGE_SYM_CLASS_LABEL = 0x6;
+ static final int IMAGE_SYM_CLASS_NULL = 0x0;
+ static final int IMAGE_SYM_CLASS_EXTERNAL = 0x2;
+ static final int IMAGE_SYM_CLASS_STATIC = 0x3;
+ static final int IMAGE_SYM_CLASS_LABEL = 0x6;
}
/**
* IMAGE_RELOCATION structure defines
*/
- public enum IMAGE_RELOCATION {
+ enum IMAGE_RELOCATION {
VirtualAddress( 0, 4),
SymbolTableIndex( 4, 4),
Type( 8, 2);
- public final int off;
- public final int sz;
+ final int off;
+ final int sz;
IMAGE_RELOCATION(int offset, int size) {
this.off = offset;
this.sz = size;
}
- public static int totalsize = 10;
+ static int totalsize = 10;
/**
* Relocation types
*/
- public static final int IMAGE_REL_AMD64_ABSOLUTE = 0x0;
- public static final int IMAGE_REL_AMD64_ADDR32 = 0x2;
- public static final int IMAGE_REL_AMD64_ADDR64 = 0x1;
- public static final int IMAGE_REL_AMD64_REL32 = 0x4;
- public static final int IMAGE_REL_AMD64_REL32_1 = 0x5;
- public static final int IMAGE_REL_AMD64_REL32_2 = 0x6;
- public static final int IMAGE_REL_AMD64_REL32_3 = 0x7;
- public static final int IMAGE_REL_AMD64_REL32_4 = 0x8;
- public static final int IMAGE_REL_AMD64_REL32_5 = 0x9;
+ static final int IMAGE_REL_AMD64_ABSOLUTE = 0x0;
+ static final int IMAGE_REL_AMD64_ADDR32 = 0x2;
+ static final int IMAGE_REL_AMD64_ADDR64 = 0x1;
+ static final int IMAGE_REL_AMD64_REL32 = 0x4;
+ static final int IMAGE_REL_AMD64_REL32_1 = 0x5;
+ static final int IMAGE_REL_AMD64_REL32_2 = 0x6;
+ static final int IMAGE_REL_AMD64_REL32_3 = 0x7;
+ static final int IMAGE_REL_AMD64_REL32_4 = 0x8;
+ static final int IMAGE_REL_AMD64_REL32_5 = 0x9;
}
-
+ //@formatter:on
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffByteBuffer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffByteBuffer.java
index e212c6b64d7..5097a333ea7 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffByteBuffer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffByteBuffer.java
@@ -26,9 +26,9 @@ package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-public class PECoffByteBuffer {
+final class PECoffByteBuffer {
- public static ByteBuffer allocate(int size) {
+ static ByteBuffer allocate(int size) {
ByteBuffer buf = ByteBuffer.allocate(size);
// Only support Little Endian on Windows
buf.order(ByteOrder.LITTLE_ENDIAN);
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffContainer.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffContainer.java
index 75158fd219f..d3ed445b7d3 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffContainer.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffContainer.java
@@ -26,14 +26,13 @@ package jdk.tools.jaotc.binformat.pecoff;
import java.io.File;
import java.io.FileOutputStream;
-public class PECoffContainer {
+final class PECoffContainer {
- File outputFile;
- FileOutputStream outputStream;
- long fileOffset;
+ private final File outputFile;
+ private FileOutputStream outputStream;
+ private long fileOffset;
- public PECoffContainer(String fileName, String aotVersion) {
- String baseName;
+ PECoffContainer(String fileName) {
outputFile = new File(fileName);
if (outputFile.exists()) {
@@ -48,7 +47,7 @@ public class PECoffContainer {
fileOffset = 0;
}
- public void close() {
+ void close() {
try {
outputStream.close();
} catch (Exception e) {
@@ -56,8 +55,10 @@ public class PECoffContainer {
}
}
- public void writeBytes(byte [] bytes) {
- if (bytes == null) return;
+ void writeBytes(byte[] bytes) {
+ if (bytes == null) {
+ return;
+ }
try {
outputStream.write(bytes);
} catch (Exception e) {
@@ -67,11 +68,13 @@ public class PECoffContainer {
}
// Write bytes to output file with up front alignment padding
- public void writeBytes(byte [] bytes, int alignment) {
- if (bytes == null) return;
+ void writeBytes(byte[] bytes, int alignment) {
+ if (bytes == null) {
+ return;
+ }
try {
// Pad to alignment
- while ((fileOffset & (long)(alignment-1)) != 0) {
+ while ((fileOffset & (alignment - 1)) != 0) {
outputStream.write(0);
fileOffset++;
}
@@ -82,4 +85,3 @@ public class PECoffContainer {
fileOffset += bytes.length;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffHeader.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffHeader.java
index 7d2c84f841d..9c7b87e32a9 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffHeader.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffHeader.java
@@ -24,45 +24,41 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_FILE_HEADER;
-import jdk.tools.jaotc.binformat.pecoff.PECoffTargetInfo;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffHeader {
- ByteBuffer header;
+final class PECoffHeader {
+ private final ByteBuffer header;
- public PECoffHeader() {
+ PECoffHeader() {
header = PECoffByteBuffer.allocate(IMAGE_FILE_HEADER.totalsize);
header.putChar(IMAGE_FILE_HEADER.Machine.off, IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64);
- header.putInt(IMAGE_FILE_HEADER.TimeDateStamp.off, (int)(System.currentTimeMillis()/1000));
+ header.putInt(IMAGE_FILE_HEADER.TimeDateStamp.off, (int) (System.currentTimeMillis() / 1000));
header.putInt(IMAGE_FILE_HEADER.PointerToSymbolTable.off, 0);
header.putInt(IMAGE_FILE_HEADER.NumberOfSymbols.off, 0);
- header.putChar(IMAGE_FILE_HEADER.SizeOfOptionalHeader.off, (char)0);
- header.putChar(IMAGE_FILE_HEADER.Characteristics.off, (char)0);
+ header.putChar(IMAGE_FILE_HEADER.SizeOfOptionalHeader.off, (char) 0);
+ header.putChar(IMAGE_FILE_HEADER.Characteristics.off, (char) 0);
}
// Update header with the number of total sections
- public void setSectionCount(int count) {
- header.putChar(IMAGE_FILE_HEADER.NumberOfSections.off, (char)count);
+ void setSectionCount(int count) {
+ header.putChar(IMAGE_FILE_HEADER.NumberOfSections.off, (char) count);
}
// Update header with the number of total symbols
- public void setSymbolCount(int count) {
+ void setSymbolCount(int count) {
header.putInt(IMAGE_FILE_HEADER.NumberOfSymbols.off, count);
}
// Update header with the offset of symbol table
- public void setSymbolOff(int offset) {
+ void setSymbolOff(int offset) {
header.putInt(IMAGE_FILE_HEADER.PointerToSymbolTable.off, offset);
}
- public byte[] getArray() {
+ byte[] getArray() {
return header.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocEntry.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocEntry.java
index 11284dc77a4..c987af736c2 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocEntry.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocEntry.java
@@ -24,26 +24,23 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_RELOCATION;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffRelocEntry {
- ByteBuffer entry;
+final class PECoffRelocEntry {
+ private final ByteBuffer entry;
- public PECoffRelocEntry(int offset, int symno, int type) {
+ PECoffRelocEntry(int offset, int symno, int type) {
entry = PECoffByteBuffer.allocate(IMAGE_RELOCATION.totalsize);
entry.putInt(IMAGE_RELOCATION.VirtualAddress.off, offset);
entry.putInt(IMAGE_RELOCATION.SymbolTableIndex.off, symno);
- entry.putChar(IMAGE_RELOCATION.Type.off, (char)type);
+ entry.putChar(IMAGE_RELOCATION.Type.off, (char) type);
}
- public byte[] getArray() {
+ byte[] getArray() {
return entry.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocTable.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocTable.java
index c51b9e8710a..104ecc4f063 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocTable.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffRelocTable.java
@@ -25,52 +25,47 @@ package jdk.tools.jaotc.binformat.pecoff;
import java.util.ArrayList;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_RELOCATION;
import jdk.tools.jaotc.binformat.pecoff.PECoffRelocEntry;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffRelocTable {
+final class PECoffRelocTable {
ArrayList> relocEntries;
- public PECoffRelocTable(int numsects) {
- relocEntries = new ArrayList>(numsects);
- for (int i = 0; i < numsects; i++)
+ PECoffRelocTable(int numsects) {
+ relocEntries = new ArrayList<>(numsects);
+ for (int i = 0; i < numsects; i++) {
relocEntries.add(new ArrayList());
+ }
}
- public void createRelocationEntry(int sectindex,
- int offset,
- int symno,
- int type) {
-
- PECoffRelocEntry entry = new PECoffRelocEntry(offset,
- symno,
- type);
+ void createRelocationEntry(int sectindex, int offset, int symno, int type) {
+ PECoffRelocEntry entry = new PECoffRelocEntry(offset, symno, type);
relocEntries.get(sectindex).add(entry);
}
- public int getAlign() { return (4); }
+ static int getAlign() {
+ return (4);
+ }
- public int getNumRelocs(int section_index) {
+ int getNumRelocs(int section_index) {
return relocEntries.get(section_index).size();
}
// Return the relocation entries for a single section
- // or null if no entries added to section
- public byte [] getRelocData(int section_index) {
+ // or null if no entries added to section
+ byte[] getRelocData(int section_index) {
ArrayList entryList = relocEntries.get(section_index);
int entryCount = entryList.size();
int allocCount = entryCount;
- if (entryCount == 0)
+ if (entryCount == 0) {
return null;
-
- if (entryCount > 0xFFFF)
+ }
+ if (entryCount > 0xFFFF) {
allocCount++;
-
+ }
ByteBuffer relocData = PECoffByteBuffer.allocate(allocCount * IMAGE_RELOCATION.totalsize);
// If number of relocs exceeds 65K, add the real size
@@ -89,4 +84,3 @@ public class PECoffRelocTable {
return (relocData.array());
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSection.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSection.java
index 0e05fdb830a..5146bcd2ee0 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSection.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSection.java
@@ -24,32 +24,39 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_SECTION_HEADER;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffSection {
- ByteBuffer section;
- byte [] data;
- boolean hasrelocations;
- int sectionIndex;
- int align;
+final class PECoffSection {
+ private final ByteBuffer section;
+ private final byte[] data;
+ private final boolean hasrelocations;
+ private final int sectionIndex;
+ private final int align;
- public PECoffSection(String sectName, byte [] sectData, int sectFlags,
- boolean hasRelocations, int sectIndex) {
+ PECoffSection(String sectName, byte[] sectData0, int sectFlags0, int sectAlign, boolean hasRelocations, int sectIndex) {
section = PECoffByteBuffer.allocate(IMAGE_SECTION_HEADER.totalsize);
- // bug: If JVM.oop.got section is empty, VM exits since JVM.oop.got
- // symbol ends up as external forwarded reference.
- if (sectData.length == 0) sectData = new byte[8];
+ // If .oop.got section is empty, VM exits since .oop.got
+ // symbol ends up as external forwarded reference.
+ byte[] sectData = sectData0;
+ if (sectData0.length == 0) {
+ sectData = new byte[8];
+ }
// Copy only Max allowed bytes to Section Entry
- byte [] Name = sectName.getBytes();
- int max = Name.length <= IMAGE_SECTION_HEADER.Name.sz ?
- Name.length : IMAGE_SECTION_HEADER.Name.sz;
+ byte[] Name = sectName.getBytes();
+ int max = Name.length <= IMAGE_SECTION_HEADER.Name.sz ? Name.length : IMAGE_SECTION_HEADER.Name.sz;
+
+ assert (sectAlign < 1 || sectAlign > 1024 || (sectAlign & (sectAlign - 1)) != 0) : "section alignment is not valid: " + sectAlign;
+ align = sectAlign;
+
+ // Using 32 because IMAGE_SCN_ALIGN_*BYTES is value + 1
+ int sectAlignBits = (32 - Integer.numberOfLeadingZeros(align)) << IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_SHIFT;
+ // Clear and set alignment bits
+ int sectFlags = (sectFlags0 & ~IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_MASK) | (sectAlignBits & IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_MASK);
section.put(Name, IMAGE_SECTION_HEADER.Name.off, max);
@@ -57,84 +64,69 @@ public class PECoffSection {
section.putInt(IMAGE_SECTION_HEADER.VirtualAddress.off, 0);
section.putInt(IMAGE_SECTION_HEADER.SizeOfRawData.off, sectData.length);
section.putInt(IMAGE_SECTION_HEADER.PointerToLinenumbers.off, 0);
- section.putChar(IMAGE_SECTION_HEADER.NumberOfLinenumbers.off, (char)0);
+ section.putChar(IMAGE_SECTION_HEADER.NumberOfLinenumbers.off, (char) 0);
section.putInt(IMAGE_SECTION_HEADER.Characteristics.off, sectFlags);
- // Extract alignment from Characteristics field
- int alignshift = (sectFlags & IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_MASK) >>
- IMAGE_SECTION_HEADER.IMAGE_SCN_ALIGN_SHIFT;
-
- // Use 8 byte alignment if not specified
- if (alignshift == 0)
- alignshift = 3;
- else
- --alignshift;
-
- align = 1 << alignshift;
-
data = sectData;
hasrelocations = hasRelocations;
sectionIndex = sectIndex;
}
- public long getSize() {
+ long getSize() {
return section.getInt(IMAGE_SECTION_HEADER.SizeOfRawData.off);
}
- public int getDataAlign() {
+ int getDataAlign() {
return (align);
}
// Alignment requirements for the IMAGE_SECTION_HEADER structures
- public static int getShdrAlign() {
+ static int getShdrAlign() {
return (4);
}
- public byte[] getArray() {
+ byte[] getArray() {
return section.array();
}
- public byte[] getDataArray() {
+ byte[] getDataArray() {
return data;
}
- public void setOffset(long offset) {
- section.putInt(IMAGE_SECTION_HEADER.PointerToRawData.off, (int)offset);
+ void setOffset(long offset) {
+ section.putInt(IMAGE_SECTION_HEADER.PointerToRawData.off, (int) offset);
}
- public long getOffset() {
+ long getOffset() {
return (section.getInt(IMAGE_SECTION_HEADER.PointerToRawData.off));
}
- public void setReloff(int offset) {
+ void setReloff(int offset) {
section.putInt(IMAGE_SECTION_HEADER.PointerToRelocations.off, offset);
}
- public void setRelcount(int count) {
+ void setRelcount(int count) {
// If the number of relocs is larger than 65K, then set
- // the overflow bit. The real count will be written to
+ // the overflow bit. The real count will be written to
// the first reloc entry for this section.
if (count > 0xFFFF) {
int flags;
- section.putChar(IMAGE_SECTION_HEADER.NumberOfRelocations.off, (char)0xFFFF);
+ section.putChar(IMAGE_SECTION_HEADER.NumberOfRelocations.off, (char) 0xFFFF);
flags = section.getInt(IMAGE_SECTION_HEADER.Characteristics.off);
flags |= IMAGE_SECTION_HEADER.IMAGE_SCN_LNK_NRELOC_OVFL;
section.putInt(IMAGE_SECTION_HEADER.Characteristics.off, flags);
- }
- else {
- section.putChar(IMAGE_SECTION_HEADER.NumberOfRelocations.off, (char)count);
+ } else {
+ section.putChar(IMAGE_SECTION_HEADER.NumberOfRelocations.off, (char) count);
}
}
- public boolean hasRelocations() {
+ boolean hasRelocations() {
return hasrelocations;
}
- public int getSectionId() {
+ int getSectionId() {
return sectionIndex;
}
}
-
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymbol.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymbol.java
index c305dbe071d..16f98ddbfed 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymbol.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymbol.java
@@ -24,18 +24,15 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import jdk.tools.jaotc.binformat.NativeSymbol;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_SYMBOL;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffSymbol extends NativeSymbol {
- ByteBuffer sym;
+final class PECoffSymbol extends NativeSymbol {
+ private final ByteBuffer sym;
- public PECoffSymbol(int symbolindex, int strindex, byte type, byte storageclass,
- byte sectindex, long offset, long size) {
+ PECoffSymbol(int symbolindex, int strindex, byte type, byte storageclass, byte sectindex, long offset) {
super(symbolindex);
sym = PECoffByteBuffer.allocate(IMAGE_SYMBOL.totalsize);
@@ -43,19 +40,18 @@ public class PECoffSymbol extends NativeSymbol {
sym.putInt(IMAGE_SYMBOL.Short.off, 0);
sym.putInt(IMAGE_SYMBOL.Long.off, strindex);
- sym.putInt(IMAGE_SYMBOL.Value.off, (int)offset);
+ sym.putInt(IMAGE_SYMBOL.Value.off, (int) offset);
// Section indexes start at 1 but we manage the index internally
// as 0 relative except in this structure
- sym.putChar(IMAGE_SYMBOL.SectionNumber.off, (char)(sectindex+1));
+ sym.putChar(IMAGE_SYMBOL.SectionNumber.off, (char) (sectindex + 1));
- sym.putChar(IMAGE_SYMBOL.Type.off, (char)type);
+ sym.putChar(IMAGE_SYMBOL.Type.off, (char) type);
sym.put(IMAGE_SYMBOL.StorageClass.off, storageclass);
- sym.put(IMAGE_SYMBOL.NumberOfAuxSymbols.off, (byte)0);
+ sym.put(IMAGE_SYMBOL.NumberOfAuxSymbols.off, (byte) 0);
}
- public byte[] getArray() {
+ byte[] getArray() {
return sym.array();
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymtab.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymtab.java
index 34e0ef73f5e..05740082cd0 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymtab.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffSymtab.java
@@ -27,36 +27,35 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_SYMBOL;
import jdk.tools.jaotc.binformat.pecoff.PECoffSymbol;
import jdk.tools.jaotc.binformat.pecoff.PECoffByteBuffer;
-public class PECoffSymtab {
- ArrayListsymbols = new ArrayList();
+final class PECoffSymtab {
+ ArrayList symbols = new ArrayList<>();
/**
* number of symbols added
*/
- int symbolCount;
+ private int symbolCount;
/**
* String holding symbol table strings
*/
- private StringBuilder strTabContent;
+ private final StringBuilder strTabContent;
/**
- * Keeps track of bytes in string table since strTabContent.length()
- * is number of chars, not bytes.
+ * Keeps track of bytes in string table since strTabContent.length() is number of chars, not
+ * bytes.
*/
private int strTabNrOfBytes;
/**
* String holding Linker Directives
*/
- private StringBuilder directives;
+ private final StringBuilder directives;
- public PECoffSymtab() {
+ PECoffSymtab() {
symbolCount = 0;
strTabContent = new StringBuilder();
directives = new StringBuilder();
@@ -72,8 +71,7 @@ public class PECoffSymtab {
directives.append(" ");
}
- public PECoffSymbol addSymbolEntry(String name, byte type, byte storageclass,
- byte secHdrIndex, long offset, long size) {
+ PECoffSymbol addSymbolEntry(String name, byte type, byte storageclass, byte secHdrIndex, long offset) {
// Get the current symbol index and append symbol name to string table.
int index;
PECoffSymbol sym;
@@ -82,7 +80,7 @@ public class PECoffSymtab {
index = 0;
strTabContent.append('\0');
strTabNrOfBytes += 1;
- sym = new PECoffSymbol(symbolCount, index, type, storageclass, secHdrIndex, offset, size);
+ sym = new PECoffSymbol(symbolCount, index, type, storageclass, secHdrIndex, offset);
symbols.add(sym);
} else {
int nameSize = name.getBytes().length;
@@ -94,10 +92,11 @@ public class PECoffSymtab {
strTabContent.append(name).append('\0');
strTabNrOfBytes += (nameSize + 1);
- sym = new PECoffSymbol(symbolCount, index, type, storageclass, secHdrIndex, offset, size);
+ sym = new PECoffSymbol(symbolCount, index, type, storageclass, secHdrIndex, offset);
symbols.add(sym);
- if (storageclass == IMAGE_SYMBOL.IMAGE_SYM_CLASS_EXTERNAL)
+ if (storageclass == IMAGE_SYMBOL.IMAGE_SYM_CLASS_EXTERNAL) {
addDirective(name, type);
+ }
}
symbolCount++;
return (sym);
@@ -105,37 +104,37 @@ public class PECoffSymtab {
private void addDirective(String name, byte type) {
directives.append("/EXPORT:" + name);
- if(type != IMAGE_SYMBOL.IMAGE_SYM_DTYPE_FUNCTION) {
+ if (type != IMAGE_SYMBOL.IMAGE_SYM_DTYPE_FUNCTION) {
directives.append(",DATA");
}
directives.append(" ");
}
- public int getSymtabCount() {
+ int getSymtabCount() {
return symbolCount;
}
- public int getStrtabSize() {
+ int getStrtabSize() {
return strTabNrOfBytes;
}
// Return a byte array that contains the symbol table entries
- public byte[] getSymtabArray() {
- ByteBuffer symtabData = PECoffByteBuffer.allocate(symbolCount*IMAGE_SYMBOL.totalsize);
+ byte[] getSymtabArray() {
+ ByteBuffer symtabData = PECoffByteBuffer.allocate(symbolCount * IMAGE_SYMBOL.totalsize);
symtabData.order(ByteOrder.LITTLE_ENDIAN);
// copy all symbols
- for (int i = 0; i < symbolCount; i++ ) {
+ for (int i = 0; i < symbolCount; i++) {
PECoffSymbol sym = symbols.get(i);
- byte [] arr = sym.getArray();
+ byte[] arr = sym.getArray();
symtabData.put(arr);
}
return (symtabData.array());
}
// Return the string table array
- public byte[] getStrtabArray() {
- byte [] strs = strTabContent.toString().getBytes();
+ byte[] getStrtabArray() {
+ byte[] strs = strTabContent.toString().getBytes();
// Update the size of the string table
ByteBuffer buff = ByteBuffer.wrap(strs);
@@ -145,7 +144,7 @@ public class PECoffSymtab {
return (strs);
}
- public byte[] getDirectiveArray() {
+ byte[] getDirectiveArray() {
return (directives.toString().getBytes());
}
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffTargetInfo.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffTargetInfo.java
index 9c40f64733f..a0d871da04b 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffTargetInfo.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/pecoff/PECoffTargetInfo.java
@@ -24,14 +24,13 @@
package jdk.tools.jaotc.binformat.pecoff;
import java.nio.ByteOrder;
-import jdk.tools.jaotc.binformat.pecoff.PECoff;
import jdk.tools.jaotc.binformat.pecoff.PECoff.IMAGE_FILE_HEADER;
/**
* Class that abstracts MACH-O target details.
*
*/
-public class PECoffTargetInfo {
+final class PECoffTargetInfo {
/**
* Target architecture.
*/
@@ -63,12 +62,11 @@ public class PECoffTargetInfo {
}
}
- public static char getPECoffArch() {
+ static char getPECoffArch() {
return arch;
}
- public static String getOsName() {
+ static String getOsName() {
return osName;
}
}
-
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTBackend.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTBackend.java
index 9f71f1cad7e..906784020bc 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTBackend.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTBackend.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -52,7 +52,7 @@ import jdk.vm.ci.meta.ProfilingInfo;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.TriState;
-public class AOTBackend {
+final class AOTBackend {
private final Main main;
private final OptionValues graalOptions;
private final HotSpotBackend backend;
@@ -60,28 +60,26 @@ public class AOTBackend {
private final HotSpotCodeCacheProvider codeCache;
private final PhaseSuite graphBuilderSuite;
private final HighTierContext highTierContext;
- private final GraalFilters filters;
- public AOTBackend(Main main, OptionValues graalOptions, HotSpotBackend backend, GraalFilters filters) {
+ AOTBackend(Main main, OptionValues graalOptions, HotSpotBackend backend) {
this.main = main;
this.graalOptions = graalOptions;
this.backend = backend;
- this.filters = filters;
providers = backend.getProviders();
codeCache = providers.getCodeCache();
graphBuilderSuite = initGraphBuilderSuite(backend, main.options.compileWithAssertions);
highTierContext = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.ALL);
}
- public PhaseSuite getGraphBuilderSuite() {
+ PhaseSuite getGraphBuilderSuite() {
return graphBuilderSuite;
}
- public HotSpotBackend getBackend() {
+ HotSpotBackend getBackend() {
return backend;
}
- public HotSpotProviders getProviders() {
+ HotSpotProviders getProviders() {
return providers;
}
@@ -96,7 +94,7 @@ public class AOTBackend {
}
@SuppressWarnings("try")
- public CompilationResult compileMethod(ResolvedJavaMethod resolvedMethod, DebugContext debug) {
+ CompilationResult compileMethod(ResolvedJavaMethod resolvedMethod, DebugContext debug) {
StructuredGraph graph = buildStructuredGraph(resolvedMethod, debug);
if (graph != null) {
return compileGraph(resolvedMethod, graph, debug);
@@ -118,7 +116,7 @@ public class AOTBackend {
graphBuilderSuite.apply(graph, highTierContext);
return graph;
} catch (Throwable e) {
- handleError(javaMethod, e, " (building graph)");
+ main.handleError(javaMethod, e, " (building graph)");
}
return null;
}
@@ -135,20 +133,11 @@ public class AOTBackend {
compilationResult, CompilationResultBuilderFactory.Default);
} catch (Throwable e) {
- handleError(resolvedMethod, e, " (compiling graph)");
+ main.handleError(resolvedMethod, e, " (compiling graph)");
}
return null;
}
- /**
- * Returns whether the VM is a debug build.
- *
- * @return true is debug VM, false otherwise
- */
- public boolean isDebugVM() {
- return backend.getRuntime().getVMConfig().cAssertions;
- }
-
private static PhaseSuite initGraphBuilderSuite(HotSpotBackend backend, boolean compileWithAssertions) {
PhaseSuite graphBuilderSuite = backend.getSuites().getDefaultGraphBuilderSuite().copy();
ListIterator> iterator = graphBuilderSuite.findPhase(GraphBuilderPhase.class);
@@ -165,39 +154,12 @@ public class AOTBackend {
return graphBuilderSuite;
}
- private void handleError(ResolvedJavaMethod resolvedMethod, Throwable e, String message) {
- String methodName = MiscUtils.uniqueMethodName(resolvedMethod);
-
- if (main.options.debug) {
- main.printError("Failed compilation: " + methodName + ": " + e);
- }
-
- // Ignore some exceptions when meta-compiling Graal.
- if (filters.shouldIgnoreException(e)) {
- return;
- }
-
- Main.writeLog("Failed compilation of method " + methodName + message);
-
- if (!main.options.debug) {
- main.printError("Failed compilation: " + methodName + ": " + e);
- }
-
- if (main.options.verbose) {
- e.printStackTrace(main.log);
- }
-
- if (main.options.exitOnError) {
- System.exit(1);
- }
- }
-
- public void printCompiledMethod(HotSpotResolvedJavaMethod resolvedMethod, CompilationResult compResult) {
+ void printCompiledMethod(HotSpotResolvedJavaMethod resolvedMethod, CompilationResult compResult) {
// This is really not installing the method.
InstalledCode installedCode = codeCache.addCode(resolvedMethod, HotSpotCompiledCodeBuilder.createCompiledCode(codeCache, null, null, compResult), null, null);
String disassembly = codeCache.disassemble(installedCode);
if (disassembly != null) {
- main.printlnDebug(disassembly);
+ main.printer.printlnDebug(disassembly);
}
}
}
diff --git a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTCompilationTask.java b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTCompilationTask.java
index 9a1aef5c2b5..999e37e879e 100644
--- a/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTCompilationTask.java
+++ b/hotspot/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/AOTCompilationTask.java
@@ -48,7 +48,7 @@ import jdk.vm.ci.runtime.JVMCICompiler;
* compilation of classes. It also defines methods that parse compilation result of Graal to create
* target-independent representation {@code BinaryContainer} of the intended target binary.
*/
-public class AOTCompilationTask implements Runnable, Comparable