From a3f2d08801c5a54048faca52f422bcededf81b2a Mon Sep 17 00:00:00 2001
From: Sven Gothel
+ * Implies {@link #isJavaSE()}.
+ *
+ * Note: We claim Android is compatible.
+ *
16
*/
- public static final int getE_identArrayLength() {
- return 16;
- }
-
- /** Setter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
- public Ehdr setE_ident(final int offset, byte[] val) {
- final int arrayLength = 16;
- if( offset + val.length > arrayLength ) { throw new IndexOutOfBoundsException("offset "+offset+" + val.length "+val.length+" > array-length "+arrayLength); };
- final int elemSize = Buffers.SIZEOF_BYTE;
- final ByteBuffer destB = getBuffer();
- final int bTotal = arrayLength * elemSize;
- if( bTotal > e_ident_size[mdIdx] ) { throw new IndexOutOfBoundsException("bTotal "+bTotal+" > size "+e_ident_size[mdIdx]+", elemSize "+elemSize+" * "+arrayLength); };
- int bOffset = e_ident_offset[mdIdx];
- final int bLimes = bOffset + bTotal;
- if( bLimes > destB.limit() ) { throw new IndexOutOfBoundsException("bLimes "+bLimes+" > buffer.limit "+destB.limit()+", elemOff "+bOffset+", elemSize "+elemSize+" * "+arrayLength); };
- bOffset += elemSize * offset;
- accessor.setBytesAt(bOffset, val);
- return this;
- }
-
- /** Getter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
- public ByteBuffer getE_ident() {
- return accessor.slice(e_ident_offset[mdIdx], Buffers.SIZEOF_BYTE * 16);
- }
-
- /** Getter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
- public byte[] getE_ident(final int offset, byte result[]) {
- final int arrayLength = 16;
- if( offset + result.length > arrayLength ) { throw new IndexOutOfBoundsException("offset "+offset+" + result.length "+result.length+" > array-length "+arrayLength); };
- return accessor.getBytesAt(e_ident_offset[mdIdx] + (Buffers.SIZEOF_BYTE * offset), result);
- }
-
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_type(short val) {
- accessor.setShortAt(e_type_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_type() {
- return accessor.getShortAt(e_type_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_machine(short val) {
- accessor.setShortAt(e_machine_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_machine() {
- return accessor.getShortAt(e_machine_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
- public Ehdr setE_version(int val) {
- accessor.setIntAt(e_version_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
- public int getE_version() {
- return accessor.getIntAt(e_version_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
- public Ehdr setE_entry(long val) {
- accessor.setLongAt(e_entry_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- return this;
- }
-
- /** Getter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
- public long getE_entry() {
- return accessor.getLongAt(e_entry_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- }
-
- /** Setter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
- public Ehdr setE_phoff(long val) {
- accessor.setLongAt(e_phoff_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- return this;
- }
-
- /** Getter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
- public long getE_phoff() {
- return accessor.getLongAt(e_phoff_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- }
-
- /** Setter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
- public Ehdr setE_shoff(long val) {
- accessor.setLongAt(e_shoff_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- return this;
- }
-
- /** Getter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
- public long getE_shoff() {
- return accessor.getLongAt(e_shoff_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
- }
-
- /** Setter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
- public Ehdr setE_flags(int val) {
- accessor.setIntAt(e_flags_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
- public int getE_flags() {
- return accessor.getIntAt(e_flags_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_ehsize(short val) {
- accessor.setShortAt(e_ehsize_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_ehsize() {
- return accessor.getShortAt(e_ehsize_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_phentsize(short val) {
- accessor.setShortAt(e_phentsize_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_phentsize() {
- return accessor.getShortAt(e_phentsize_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_phnum(short val) {
- accessor.setShortAt(e_phnum_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_phnum() {
- return accessor.getShortAt(e_phnum_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_shentsize(short val) {
- accessor.setShortAt(e_shentsize_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_shentsize() {
- return accessor.getShortAt(e_shentsize_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_shnum(short val) {
- accessor.setShortAt(e_shnum_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_shnum() {
- return accessor.getShortAt(e_shnum_offset[mdIdx]);
- }
-
- /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public Ehdr setE_shstrndx(short val) {
- accessor.setShortAt(e_shstrndx_offset[mdIdx], val);
- return this;
- }
-
- /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
- public short getE_shstrndx() {
- return accessor.getShortAt(e_shstrndx_offset[mdIdx]);
- }
-}
diff --git a/src/java/jogamp/common/os/elf/Ehdr_p1.java b/src/java/jogamp/common/os/elf/Ehdr_p1.java
new file mode 100644
index 0000000..0d23a0a
--- /dev/null
+++ b/src/java/jogamp/common/os/elf/Ehdr_p1.java
@@ -0,0 +1,118 @@
+/* !---- DO NOT EDIT: This file autogenerated by com/jogamp/gluegen/JavaEmitter.java on Sun Feb 01 03:27:25 CET 2015 ----! */
+
+
+package jogamp.common.os.elf;
+
+import java.nio.*;
+
+import com.jogamp.gluegen.runtime.*;
+import com.jogamp.common.os.*;
+import com.jogamp.common.nio.*;
+import jogamp.common.os.MachineDescriptionRuntime;
+
+
+public class Ehdr_p1 {
+
+ StructAccessor accessor;
+
+ private static final int mdIdx = 0;
+ private final MachineDescription md;
+
+ private static final int[] Ehdr_p1_size = new int[] { 24 /* ARMle_EABI */, 24 /* X86_32_UNIX */, 24 /* LP64_UNIX */, 24 /* X86_32_MACOS */, 24 /* X86_32_WINDOWS */, 24 /* X86_64_WINDOWS */, 24 /* SPARC_32_SUNOS */ };
+ private static final int[] e_ident_offset = new int[] { 0 /* ARMle_EABI */, 0 /* X86_32_UNIX */, 0 /* LP64_UNIX */, 0 /* X86_32_MACOS */, 0 /* X86_32_WINDOWS */, 0 /* X86_64_WINDOWS */, 0 /* SPARC_32_SUNOS */ };
+ private static final int[] e_ident_size = new int[] { 16 /* ARMle_EABI */, 16 /* X86_32_UNIX */, 16 /* LP64_UNIX */, 16 /* X86_32_MACOS */, 16 /* X86_32_WINDOWS */, 16 /* X86_64_WINDOWS */, 16 /* SPARC_32_SUNOS */ };
+ private static final int[] e_type_offset = new int[] { 16 /* ARMle_EABI */, 16 /* X86_32_UNIX */, 16 /* LP64_UNIX */, 16 /* X86_32_MACOS */, 16 /* X86_32_WINDOWS */, 16 /* X86_64_WINDOWS */, 16 /* SPARC_32_SUNOS */ };
+//private static final int[] e_type_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_machine_offset = new int[] { 18 /* ARMle_EABI */, 18 /* X86_32_UNIX */, 18 /* LP64_UNIX */, 18 /* X86_32_MACOS */, 18 /* X86_32_WINDOWS */, 18 /* X86_64_WINDOWS */, 18 /* SPARC_32_SUNOS */ };
+//private static final int[] e_machine_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_version_offset = new int[] { 20 /* ARMle_EABI */, 20 /* X86_32_UNIX */, 20 /* LP64_UNIX */, 20 /* X86_32_MACOS */, 20 /* X86_32_WINDOWS */, 20 /* X86_64_WINDOWS */, 20 /* SPARC_32_SUNOS */ };
+//private static final int[] e_version_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+
+ public static int size() {
+ return Ehdr_p1_size[mdIdx];
+ }
+
+ public static Ehdr_p1 create() {
+ return create(Buffers.newDirectByteBuffer(size()));
+ }
+
+ public static Ehdr_p1 create(java.nio.ByteBuffer buf) {
+ return new Ehdr_p1(buf);
+ }
+
+ Ehdr_p1(java.nio.ByteBuffer buf) {
+ md = MachineDescription.StaticConfig.values()[mdIdx].md;
+ accessor = new StructAccessor(buf);
+ }
+
+ public java.nio.ByteBuffer getBuffer() {
+ return accessor.getBuffer();
+ }
+
+ /** Getter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
+ public static final int getE_identArrayLength() {
+ return 16;
+ }
+
+ /** Setter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
+ public Ehdr_p1 setE_ident(final int offset, byte[] val) {
+ final int arrayLength = 16;
+ if( offset + val.length > arrayLength ) { throw new IndexOutOfBoundsException("offset "+offset+" + val.length "+val.length+" > array-length "+arrayLength); };
+ final int elemSize = Buffers.SIZEOF_BYTE;
+ final ByteBuffer destB = getBuffer();
+ final int bTotal = arrayLength * elemSize;
+ if( bTotal > e_ident_size[mdIdx] ) { throw new IndexOutOfBoundsException("bTotal "+bTotal+" > size "+e_ident_size[mdIdx]+", elemSize "+elemSize+" * "+arrayLength); };
+ int bOffset = e_ident_offset[mdIdx];
+ final int bLimes = bOffset + bTotal;
+ if( bLimes > destB.limit() ) { throw new IndexOutOfBoundsException("bLimes "+bLimes+" > buffer.limit "+destB.limit()+", elemOff "+bOffset+", elemSize "+elemSize+" * "+arrayLength); };
+ bOffset += elemSize * offset;
+ accessor.setBytesAt(bOffset, val);
+ return this;
+ }
+
+ /** Getter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
+ public ByteBuffer getE_ident() {
+ return accessor.slice(e_ident_offset[mdIdx], Buffers.SIZEOF_BYTE * 16);
+ }
+
+ /** Getter for native field: CType['char *', size [fixed false, lnx64 16], [array*1]], with array length of 16
*/
+ public byte[] getE_ident(final int offset, byte result[]) {
+ final int arrayLength = 16;
+ if( offset + result.length > arrayLength ) { throw new IndexOutOfBoundsException("offset "+offset+" + result.length "+result.length+" > array-length "+arrayLength); };
+ return accessor.getBytesAt(e_ident_offset[mdIdx] + (Buffers.SIZEOF_BYTE * offset), result);
+ }
+
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p1 setE_type(short val) {
+ accessor.setShortAt(e_type_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_type() {
+ return accessor.getShortAt(e_type_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p1 setE_machine(short val) {
+ accessor.setShortAt(e_machine_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_machine() {
+ return accessor.getShortAt(e_machine_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
+ public Ehdr_p1 setE_version(int val) {
+ accessor.setIntAt(e_version_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
+ public int getE_version() {
+ return accessor.getIntAt(e_version_offset[mdIdx]);
+ }
+}
diff --git a/src/java/jogamp/common/os/elf/Ehdr_p2.java b/src/java/jogamp/common/os/elf/Ehdr_p2.java
new file mode 100644
index 0000000..9dc561a
--- /dev/null
+++ b/src/java/jogamp/common/os/elf/Ehdr_p2.java
@@ -0,0 +1,176 @@
+/* !---- DO NOT EDIT: This file autogenerated by com/jogamp/gluegen/JavaEmitter.java on Sun Feb 01 03:27:25 CET 2015 ----! */
+
+
+package jogamp.common.os.elf;
+
+import java.nio.*;
+
+import com.jogamp.gluegen.runtime.*;
+import com.jogamp.common.os.*;
+import com.jogamp.common.nio.*;
+import jogamp.common.os.MachineDescriptionRuntime;
+
+
+public class Ehdr_p2 {
+
+ StructAccessor accessor;
+
+ private final int mdIdx;
+ private final MachineDescription md;
+
+ private static final int[] Ehdr_p2_size = new int[] { 28 /* ARMle_EABI */, 28 /* X86_32_UNIX */, 40 /* LP64_UNIX */, 28 /* X86_32_MACOS */, 28 /* X86_32_WINDOWS */, 40 /* X86_64_WINDOWS */, 28 /* SPARC_32_SUNOS */ };
+ private static final int[] e_entry_offset = new int[] { 0 /* ARMle_EABI */, 0 /* X86_32_UNIX */, 0 /* LP64_UNIX */, 0 /* X86_32_MACOS */, 0 /* X86_32_WINDOWS */, 0 /* X86_64_WINDOWS */, 0 /* SPARC_32_SUNOS */ };
+//private static final int[] e_entry_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] e_phoff_offset = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+//private static final int[] e_phoff_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] e_shoff_offset = new int[] { 8 /* ARMle_EABI */, 8 /* X86_32_UNIX */, 16 /* LP64_UNIX */, 8 /* X86_32_MACOS */, 8 /* X86_32_WINDOWS */, 16 /* X86_64_WINDOWS */, 8 /* SPARC_32_SUNOS */ };
+//private static final int[] e_shoff_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] e_flags_offset = new int[] { 12 /* ARMle_EABI */, 12 /* X86_32_UNIX */, 24 /* LP64_UNIX */, 12 /* X86_32_MACOS */, 12 /* X86_32_WINDOWS */, 24 /* X86_64_WINDOWS */, 12 /* SPARC_32_SUNOS */ };
+//private static final int[] e_flags_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] e_ehsize_offset = new int[] { 16 /* ARMle_EABI */, 16 /* X86_32_UNIX */, 28 /* LP64_UNIX */, 16 /* X86_32_MACOS */, 16 /* X86_32_WINDOWS */, 28 /* X86_64_WINDOWS */, 16 /* SPARC_32_SUNOS */ };
+//private static final int[] e_ehsize_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_phentsize_offset = new int[] { 18 /* ARMle_EABI */, 18 /* X86_32_UNIX */, 30 /* LP64_UNIX */, 18 /* X86_32_MACOS */, 18 /* X86_32_WINDOWS */, 30 /* X86_64_WINDOWS */, 18 /* SPARC_32_SUNOS */ };
+//private static final int[] e_phentsize_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_phnum_offset = new int[] { 20 /* ARMle_EABI */, 20 /* X86_32_UNIX */, 32 /* LP64_UNIX */, 20 /* X86_32_MACOS */, 20 /* X86_32_WINDOWS */, 32 /* X86_64_WINDOWS */, 20 /* SPARC_32_SUNOS */ };
+//private static final int[] e_phnum_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_shentsize_offset = new int[] { 22 /* ARMle_EABI */, 22 /* X86_32_UNIX */, 34 /* LP64_UNIX */, 22 /* X86_32_MACOS */, 22 /* X86_32_WINDOWS */, 34 /* X86_64_WINDOWS */, 22 /* SPARC_32_SUNOS */ };
+//private static final int[] e_shentsize_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_shnum_offset = new int[] { 24 /* ARMle_EABI */, 24 /* X86_32_UNIX */, 36 /* LP64_UNIX */, 24 /* X86_32_MACOS */, 24 /* X86_32_WINDOWS */, 36 /* X86_64_WINDOWS */, 24 /* SPARC_32_SUNOS */ };
+//private static final int[] e_shnum_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+ private static final int[] e_shstrndx_offset = new int[] { 26 /* ARMle_EABI */, 26 /* X86_32_UNIX */, 38 /* LP64_UNIX */, 26 /* X86_32_MACOS */, 26 /* X86_32_WINDOWS */, 38 /* X86_64_WINDOWS */, 26 /* SPARC_32_SUNOS */ };
+//private static final int[] e_shstrndx_size = new int[] { 2 /* ARMle_EABI */, 2 /* X86_32_UNIX */, 2 /* LP64_UNIX */, 2 /* X86_32_MACOS */, 2 /* X86_32_WINDOWS */, 2 /* X86_64_WINDOWS */, 2 /* SPARC_32_SUNOS */ };
+
+ public java.nio.ByteBuffer getBuffer() {
+ return accessor.getBuffer();
+ }
+
+ /** Setter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
+ public Ehdr_p2 setE_entry(long val) {
+ accessor.setLongAt(e_entry_offset[mdIdx], val, md.longSizeInBytes());
+ return this;
+ }
+
+ /** Getter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
+ public long getE_entry() {
+ return accessor.getLongAt(e_entry_offset[mdIdx], md.longSizeInBytes());
+ }
+
+ /** Setter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
+ public Ehdr_p2 setE_phoff(long val) {
+ accessor.setLongAt(e_phoff_offset[mdIdx], val, md.longSizeInBytes());
+ return this;
+ }
+
+ /** Getter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
+ public long getE_phoff() {
+ return accessor.getLongAt(e_phoff_offset[mdIdx], md.longSizeInBytes());
+ }
+
+ /** Setter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
+ public Ehdr_p2 setE_shoff(long val) {
+ accessor.setLongAt(e_shoff_offset[mdIdx], val, md.longSizeInBytes());
+ return this;
+ }
+
+ /** Getter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
+ public long getE_shoff() {
+ return accessor.getLongAt(e_shoff_offset[mdIdx], md.longSizeInBytes());
+ }
+
+ /** Setter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
+ public Ehdr_p2 setE_flags(int val) {
+ accessor.setIntAt(e_flags_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
+ public int getE_flags() {
+ return accessor.getIntAt(e_flags_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_ehsize(short val) {
+ accessor.setShortAt(e_ehsize_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_ehsize() {
+ return accessor.getShortAt(e_ehsize_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_phentsize(short val) {
+ accessor.setShortAt(e_phentsize_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_phentsize() {
+ return accessor.getShortAt(e_phentsize_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_phnum(short val) {
+ accessor.setShortAt(e_phnum_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_phnum() {
+ return accessor.getShortAt(e_phnum_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_shentsize(short val) {
+ accessor.setShortAt(e_shentsize_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_shentsize() {
+ return accessor.getShortAt(e_shentsize_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_shnum(short val) {
+ accessor.setShortAt(e_shnum_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_shnum() {
+ return accessor.getShortAt(e_shnum_offset[mdIdx]);
+ }
+
+ /** Setter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public Ehdr_p2 setE_shstrndx(short val) {
+ accessor.setShortAt(e_shstrndx_offset[mdIdx], val);
+ return this;
+ }
+
+ /** Getter for native field: CType['uint16_t', size [fixed true, lnx64 2], [int]] */
+ public short getE_shstrndx() {
+ return accessor.getShortAt(e_shstrndx_offset[mdIdx]);
+ }
+
+ // --- Begin CustomJavaCode .cfg declarations
+ public static int size(final int mdIdx) {
+ return Ehdr_p2_size[mdIdx];
+ }
+
+ public static Ehdr_p2 create(final int mdIdx) {
+ return create(mdIdx, Buffers.newDirectByteBuffer(size(mdIdx)));
+ }
+
+ public static Ehdr_p2 create(final int mdIdx, final java.nio.ByteBuffer buf) {
+ return new Ehdr_p2(mdIdx, buf);
+ }
+
+ Ehdr_p2(final int mdIdx, final java.nio.ByteBuffer buf) {
+ this.mdIdx = mdIdx;
+ this.md = MachineDescription.StaticConfig.values()[mdIdx].md;
+ this.accessor = new StructAccessor(buf);
+ }
+ // ---- End CustomJavaCode .cfg declarations
+}
diff --git a/src/java/jogamp/common/os/elf/ElfHeader.java b/src/java/jogamp/common/os/elf/ElfHeader.java
deleted file mode 100644
index 60b6d50..0000000
--- a/src/java/jogamp/common/os/elf/ElfHeader.java
+++ /dev/null
@@ -1,654 +0,0 @@
-/**
- * Copyright 2013 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-package jogamp.common.os.elf;
-
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-
-import static jogamp.common.os.elf.IOUtils.readBytes;
-import static jogamp.common.os.elf.IOUtils.seek;
-import static jogamp.common.os.elf.IOUtils.shortToInt;
-import static jogamp.common.os.elf.IOUtils.toHexString;
-
-/**
- * ELF ABI Header
- * - * References: - *
- * This byte identifies the version of the ABI to which the object is targeted. - * This field is used to distinguish among incompatible versions of an ABI. - * The interpretation of this version number is dependent on the ABI identified by the EI_OSABI field. - * Applications conforming to this specification use the value 0. - *
- */ - public static final int EI_ABIVERSION = 8; - - /** - * ident byte #9 .. ? - *- * Start of padding. - * These bytes are reserved and set to zero. - * Programs which read them should ignore them. - * The value for EI_PAD will change in the future if currently unused bytes are given meanings. - *
- */ - public static final int EI_PAD = 9; - - /** - * This masks an 8-bit version number, the version of the ABI to which this - * ELF file conforms. This ABI is version 5. A value of 0 denotes unknown conformance. - * {@value} - */ - public static final int EF_ARM_ABIMASK = 0xFF000000; - public static final int EF_ARM_ABISHIFT = 24; - - /** - * ARM ABI version 5. - * {@value} - */ - public static final int EF_ARM_ABI5 = 0x05000000; - - /** - * The ELF file contains BE-8 code, suitable for execution on an ARM - * Architecture v6 processor. This flag must only be set on an executable file. - * {@value} - */ - public static final int EF_ARM_BE8 = 0x00800000; - - /** - * Legacy code (ABI version 4 and earlier) generated by gcc-arm-xxx might - * use these bits. - * {@value} - */ - public static final int EF_ARM_GCCMASK = 0x00400FFF; - - /** - * Set in executable file headers (e_type = ET_EXEC or ET_DYN) to note that - * the executable file was built to conform to the hardware floating-point - * procedure-call standard. - *- * Compatible with legacy (pre version 5) gcc use as EF_ARM_VFP_FLOAT. - *
- *- * Note: This is not used (anymore) - *
- * {@value} - */ - public static final int EF_ARM_ABI_FLOAT_HARD = 0x00000400; - - /** - * Set in executable file headers (e_type = ET_EXEC or ET_DYN) to note - * explicitly that the executable file was built to conform to the software - * floating-point procedure-call standard (the base standard). If both - * {@link #EF_ARM_ABI_FLOAT_HARD} and {@link #EF_ARM_ABI_FLOAT_SOFT} are clear, - * conformance to the base procedure-call standard is implied. - *- * Compatible with legacy (pre version 5) gcc use as EF_ARM_SOFT_FLOAT. - *
- *- * Note: This is not used (anymore) - *
- * {@value} - */ - public static final int EF_ARM_ABI_FLOAT_SOFT = 0x00000200; - - /** An unknown type - {@value} */ - public static final short ET_NONE = 0; - /** A relocatable file - {@value} */ - public static final short ET_REL = 1; - /** An executable file - {@value} */ - public static final short ET_EXEC = 2; - /** A shared object - {@value} */ - public static final short ET_DYN = 3; - /** A core file - {@value} */ - public static final short ET_CORE = 4; - - public static final short EM_NONE = 0; - public static final short EM_M32 = 1; - public static final short EM_SPARC = 2; - public static final short EM_386 = 3; - public static final short EM_68K = 4; - public static final short EM_88K = 5; - public static final short EM_486 = 6; - public static final short EM_860 = 7; - public static final short EM_MIPS = 8; - public static final short EM_S370 = 9; - public static final short EM_MIPS_RS3_LE = 10; - public static final short EM_PARISC = 15; - public static final short EM_res016 = 16; - public static final short EM_VPP550 = 17; - public static final short EM_SPARC32PLUS = 18; - public static final short EM_960 = 19; - public static final short EM_PPC = 20; - public static final short EM_PPC64 = 21; - public static final short EM_S390 = 22; - public static final short EM_SPU = 23; - public static final short EM_V800 = 36; - public static final short EM_FR20 = 37; - public static final short EM_RH32 = 38; - public static final short EM_MCORE = 39; - public static final short EM_RCE = 39; - public static final short EM_ARM = 40; - public static final short EM_OLD_ALPHA = 41; - public static final short EM_SH = 42; - public static final short EM_SPARCV9 = 43; - public static final short EM_TRICORE = 44; - public static final short EM_ARC = 45; - public static final short EM_H8_300 = 46; - public static final short EM_H8_300H = 47; - public static final short EM_H8S = 48; - public static final short EM_H8_500 = 49; - public static final short EM_IA_64 = 50; - public static final short EM_MIPS_X = 51; - public static final short EM_COLDFIRE = 52; - public static final short EM_68HC12 = 53; - public static final short EM_MMA = 54; - public static final short EM_PCP = 55; - public static final short EM_NCPU = 56; - public static final short EM_NDR1 = 57; - public static final short EM_STARCORE = 58; - public static final short EM_ME16 = 59; - public static final short EM_ST100 = 60; - public static final short EM_TINYJ = 61; - public static final short EM_X86_64 = 62; - public static final short EM_PDSP = 63; - public static final short EM_PDP10 = 64; - public static final short EM_PDP11 = 65; - public static final short EM_FX66 = 66; - public static final short EM_ST9PLUS = 67; - public static final short EM_ST7 = 68; - public static final short EM_68HC16 = 69; - public static final short EM_68HC11 = 70; - public static final short EM_68HC08 = 71; - public static final short EM_68HC05 = 72; - public static final short EM_SVX = 73; - public static final short EM_ST19 = 74; - public static final short EM_VAX = 75; - public static final short EM_CRIS = 76; - public static final short EM_JAVELIN = 77; - public static final short EM_FIREPATH = 78; - public static final short EM_ZSP = 79; - public static final short EM_MMIX = 80; - public static final short EM_HUANY = 81; - public static final short EM_PRISM = 82; - public static final short EM_AVR = 83; - public static final short EM_FR30 = 84; - public static final short EM_D10V = 85; - public static final short EM_D30V = 86; - public static final short EM_V850 = 87; - public static final short EM_M32R = 88; - public static final short EM_MN10300 = 89; - public static final short EM_MN10200 = 90; - public static final short EM_PJ = 91; - public static final short EM_OPENRISC = 92; - public static final short EM_ARC_A5 = 93; - public static final short EM_XTENSA = 94; - public static final short EM_VIDEOCORE = 95; - public static final short EM_TMM_GPP = 96; - public static final short EM_NS32K = 97; - public static final short EM_TPC = 98; - public static final short EM_SNP1K = 99; - public static final short EM_ST200 = 100; - public static final short EM_IP2K = 101; - public static final short EM_MAX = 102; - public static final short EM_CR = 103; - public static final short EM_F2MC16 = 104; - public static final short EM_MSP430 = 105; - public static final short EM_BLACKFIN = 106; - public static final short EM_SE_C33 = 107; - public static final short EM_SEP = 108; - public static final short EM_ARCA = 109; - public static final short EM_UNICORE = 110; - public static final short EM_EXCESS = 111; - public static final short EM_DXP = 112; - public static final short EM_ALTERA_NIOS2 = 113; - public static final short EM_CRX = 114; - public static final short EM_XGATE = 115; - public static final short EM_C166 = 116; - public static final short EM_M16C = 117; - public static final short EM_DSPIC30F = 118; - public static final short EM_CE = 119; - public static final short EM_M32C = 120; - public static final short EM_TSK3000 = 131; - public static final short EM_RS08 = 132; - public static final short EM_res133 = 133; - public static final short EM_ECOG2 = 134; - public static final short EM_SCORE = 135; - public static final short EM_SCORE7 = 135; - public static final short EM_DSP24 = 136; - public static final short EM_VIDEOCORE3 = 137; - public static final short EM_LATTICEMICO32 = 138; - public static final short EM_SE_C17 = 139; - public static final short EM_TI_C6000 = 140; - public static final short EM_TI_C2000 = 141; - public static final short EM_TI_C5500 = 142; - public static final short EM_MMDSP_PLUS = 160; - public static final short EM_CYPRESS_M8C = 161; - public static final short EM_R32C = 162; - public static final short EM_TRIMEDIA = 163; - public static final short EM_QDSP6 = 164; - public static final short EM_8051 = 165; - public static final short EM_STXP7X = 166; - public static final short EM_NDS32 = 167; - public static final short EM_ECOG1 = 168; - public static final short EM_ECOG1X = 168; - public static final short EM_MAXQ30 = 169; - public static final short EM_XIMO16 = 170; - public static final short EM_MANIK = 171; - public static final short EM_CRAYNV2 = 172; - public static final short EM_RX = 173; - public static final short EM_METAG = 174; - public static final short EM_MCST_ELBRUS = 175; - public static final short EM_ECOG16 = 176; - public static final short EM_CR16 = 177; - public static final short EM_ETPU = 178; - public static final short EM_SLE9X = 179; - public static final short EM_L1OM = 180; - public static final short EM_INTEL181 = 181; - public static final short EM_INTEL182 = 182; - public static final short EM_AARCH64 = 183; - public static final short EM_ARM184 = 184; - public static final short EM_AVR32 = 185; - public static final short EM_STM8 = 186; - public static final short EM_TILE64 = 187; - public static final short EM_TILEPRO = 188; - public static final short EM_MICROBLAZE = 189; - public static final short EM_CUDA = 190; - - public static final boolean isIdentityValid(final byte[] ident) { - return ELFMAG0 == ident[0] && - ELFMAG1 == ident[1] && - ELFMAG2 == ident[2] && - ELFMAG3 == ident[3] ; - } - - /** Public access to the raw elf header */ - public final Ehdr d; - - /** Public access to the {@link SectionHeader} */ - public final SectionHeader[] sht; - - private final String string; - private final byte[] E_ident; - - /** - * Note: The input stream shall stay untouch to be able to read sections! - * - * @param in input stream of a binary file at position zero - * @return - * @throws IOException if reading from the given input stream fails or less then ELF Header size bytes - * @throws IllegalArgumentException if the given input stream does not represent an ELF Header - */ - public static ElfHeader read(final RandomAccessFile in) throws IOException, IllegalArgumentException { - final int eh_sz = Ehdr.size(); - final byte[] buf = new byte[eh_sz]; - readBytes (in, buf, 0, eh_sz); - final ElfHeader eh = new ElfHeader(ByteBuffer.wrap(buf, 0, buf.length), in); - return eh; - } - - /** - * @param buf ELF Header bytes - * @throws IllegalArgumentException if the given buffer does not represent an ELF Header - * @throws IOException - */ - ElfHeader(final java.nio.ByteBuffer buf, final RandomAccessFile in) throws IllegalArgumentException, IOException { - d = Ehdr.create(buf); - E_ident = d.getE_ident(0, new byte[Ehdr.getE_identArrayLength()]); - if( !isIdentityValid(E_ident) ) { - throw new IllegalArgumentException("Buffer is not an ELF Header"); - } - sht = readSectionHeaderTable(in); - string = toStringImpl(); - } - - public final short getSize() { return d.getE_ehsize(); } - - /** - * Returns the architecture class in bits, - * 32 for {@link #ELFCLASS32}, 64 for {@link #ELFCLASS64} - * and 0 for {@link #ELFCLASSNONE}. - */ - public final int getArchClassBits() { - switch( E_ident[EI_CLASS] ) { - case ELFCLASS32: return 32; - case ELFCLASS64: return 64; - default: return 0; - } - } - - /** - * Returns the processor's data encoding, i.e. - * {@link #ELFDATA2LSB}, {@link #ELFDATA2MSB} or {@link #ELFDATANONE}; - */ - public final byte getDataEncodingMode() { - return E_ident[EI_DATA]; - } - - /** Returns the ELF file version, should be {@link #EV_CURRENT}. */ - public final byte getVersion() { - return E_ident[EI_VERSION]; - } - - /** Returns the operating system and ABI for this file, 3 == Linux. Note: Often not used. */ - public final byte getOSABI() { - return E_ident[EI_OSABI]; - } - - /** Returns the version of the {@link #getOSABI() OSABI} for this file. */ - public final byte getOSABIVersion() { - return E_ident[EI_ABIVERSION]; - } - - /** Returns the object file type, e.g. {@link #ET_EXEC}, .. */ - public final short getType() { - return d.getE_type(); - } - - /** Returns the required architecture for the file, e.g. {@link #EM_386}, .. */ - public final short getMachine() { - return d.getE_machine(); - } - - /** - * Returns true if {@link #getMachine() machine} is a 32 bit ARM CPU - * of type {@link #EM_ARM}. */ - public final boolean isArm() { - return getMachine() == EM_ARM; - } - - /** - * Returns true if {@link #getMachine() machine} is a 64 bit AARCH64 ARM CPU - * of type {@link #EM_AARCH64}. */ - public final boolean isAARCH64() { - return getMachine() == EM_AARCH64; - } - - /** - * Returns true if {@link #getMachine() machine} is a 32 or 64 bit Intel CPU - * of type {@link #EM_386}, {@link #EM_486} or {@link #EM_X86_64}. */ - public final boolean isX86_32() { - final short m = getMachine(); - return EM_386 == m || - EM_486 == m || - EM_X86_64 == m; - } - - /** - * Returns true if {@link #getMachine() machine} is a 64 bit AMD/Intel x86_64 CPU - * of type {@link #EM_X86_64}. */ - public final boolean isX86_64() { - return getMachine() == EM_X86_64; - } - - /** - * Returns true if {@link #getMachine() machine} is a 64 bit Intel Itanium CPU - * of type {@link #EM_IA_64}. */ - public final boolean isIA64() { - return getMachine() == EM_IA_64; - } - - /** - * Returns true if {@link #getMachine() machine} is a 32 or 64 bit MIPS CPU - * of type {@link #EM_MIPS}, {@link #EM_MIPS_X} or {@link #EM_MIPS_RS3_LE}. */ - public final boolean isMips() { - final short m = getMachine(); - return EM_MIPS == m || - EM_MIPS_X == m || - EM_MIPS_RS3_LE == m; - } - - /** Returns the processor-specific flags associated with the file. */ - public final int getFlags() { - return d.getE_flags(); - } - - /** Returns the ARM EABI version from {@link #getFlags() flags}, maybe 0 if not an ARM EABI. */ - public byte getArmABI() { - return (byte) ( ( ( EF_ARM_ABIMASK & d.getE_flags() ) >> EF_ARM_ABISHIFT ) & 0xff ); - } - - /** Returns the ARM EABI legacy GCC {@link #getFlags() flags}, maybe 0 if not an ARM EABI or not having legacy GCC flags. */ - public int getArmLegacyGCCFlags() { - final int f = d.getE_flags(); - return 0 != ( EF_ARM_ABIMASK & f ) ? ( EF_ARM_GCCMASK & f ) : 0; - } - - /** - * Returns the ARM EABI float mode from {@link #getFlags() flags}, - * i.e. 1 for {@link #EF_ARM_ABI_FLOAT_SOFT}, 2 for {@link #EF_ARM_ABI_FLOAT_HARD} - * or 0 for none. - *- * Note: This is not used (anymore) - *
- */ - public byte getArmFloatMode() { - final int f = d.getE_flags(); - if( 0 != ( EF_ARM_ABIMASK & f ) ) { - if( ( EF_ARM_ABI_FLOAT_HARD & f ) != 0 ) { - return 2; - } - if( ( EF_ARM_ABI_FLOAT_SOFT & f ) != 0 ) { - return 1; - } - } - return 0; - } - - /** Returns the 1st occurence of matching SectionHeader {@link SectionHeader#getType() type}, or null if not exists. */ - public final SectionHeader getSectionHeader(final int type) { - for(int i=0; i+ * References: + *
+ * This byte identifies the version of the ABI to which the object is targeted. + * This field is used to distinguish among incompatible versions of an ABI. + * The interpretation of this version number is dependent on the ABI identified by the EI_OSABI field. + * Applications conforming to this specification use the value 0. + *
+ */ + public static final int EI_ABIVERSION = 8; + + /** + * ident byte #9 .. ? + *+ * Start of padding. + * These bytes are reserved and set to zero. + * Programs which read them should ignore them. + * The value for EI_PAD will change in the future if currently unused bytes are given meanings. + *
+ */ + public static final int EI_PAD = 9; + + /** An unknown type - {@value} */ + public static final short ET_NONE = 0; + /** A relocatable file - {@value} */ + public static final short ET_REL = 1; + /** An executable file - {@value} */ + public static final short ET_EXEC = 2; + /** A shared object - {@value} */ + public static final short ET_DYN = 3; + /** A core file - {@value} */ + public static final short ET_CORE = 4; + + public static final short EM_NONE = 0; + public static final short EM_M32 = 1; + public static final short EM_SPARC = 2; + public static final short EM_386 = 3; + public static final short EM_68K = 4; + public static final short EM_88K = 5; + public static final short EM_486 = 6; + public static final short EM_860 = 7; + public static final short EM_MIPS = 8; + public static final short EM_S370 = 9; + public static final short EM_MIPS_RS3_LE = 10; + public static final short EM_PARISC = 15; + public static final short EM_res016 = 16; + public static final short EM_VPP550 = 17; + public static final short EM_SPARC32PLUS = 18; + public static final short EM_960 = 19; + public static final short EM_PPC = 20; + public static final short EM_PPC64 = 21; + public static final short EM_S390 = 22; + public static final short EM_SPU = 23; + public static final short EM_V800 = 36; + public static final short EM_FR20 = 37; + public static final short EM_RH32 = 38; + public static final short EM_MCORE = 39; + public static final short EM_RCE = 39; + public static final short EM_ARM = 40; + public static final short EM_OLD_ALPHA = 41; + public static final short EM_SH = 42; + public static final short EM_SPARCV9 = 43; + public static final short EM_TRICORE = 44; + public static final short EM_ARC = 45; + public static final short EM_H8_300 = 46; + public static final short EM_H8_300H = 47; + public static final short EM_H8S = 48; + public static final short EM_H8_500 = 49; + public static final short EM_IA_64 = 50; + public static final short EM_MIPS_X = 51; + public static final short EM_COLDFIRE = 52; + public static final short EM_68HC12 = 53; + public static final short EM_MMA = 54; + public static final short EM_PCP = 55; + public static final short EM_NCPU = 56; + public static final short EM_NDR1 = 57; + public static final short EM_STARCORE = 58; + public static final short EM_ME16 = 59; + public static final short EM_ST100 = 60; + public static final short EM_TINYJ = 61; + public static final short EM_X86_64 = 62; + public static final short EM_PDSP = 63; + public static final short EM_PDP10 = 64; + public static final short EM_PDP11 = 65; + public static final short EM_FX66 = 66; + public static final short EM_ST9PLUS = 67; + public static final short EM_ST7 = 68; + public static final short EM_68HC16 = 69; + public static final short EM_68HC11 = 70; + public static final short EM_68HC08 = 71; + public static final short EM_68HC05 = 72; + public static final short EM_SVX = 73; + public static final short EM_ST19 = 74; + public static final short EM_VAX = 75; + public static final short EM_CRIS = 76; + public static final short EM_JAVELIN = 77; + public static final short EM_FIREPATH = 78; + public static final short EM_ZSP = 79; + public static final short EM_MMIX = 80; + public static final short EM_HUANY = 81; + public static final short EM_PRISM = 82; + public static final short EM_AVR = 83; + public static final short EM_FR30 = 84; + public static final short EM_D10V = 85; + public static final short EM_D30V = 86; + public static final short EM_V850 = 87; + public static final short EM_M32R = 88; + public static final short EM_MN10300 = 89; + public static final short EM_MN10200 = 90; + public static final short EM_PJ = 91; + public static final short EM_OPENRISC = 92; + public static final short EM_ARC_A5 = 93; + public static final short EM_XTENSA = 94; + public static final short EM_VIDEOCORE = 95; + public static final short EM_TMM_GPP = 96; + public static final short EM_NS32K = 97; + public static final short EM_TPC = 98; + public static final short EM_SNP1K = 99; + public static final short EM_ST200 = 100; + public static final short EM_IP2K = 101; + public static final short EM_MAX = 102; + public static final short EM_CR = 103; + public static final short EM_F2MC16 = 104; + public static final short EM_MSP430 = 105; + public static final short EM_BLACKFIN = 106; + public static final short EM_SE_C33 = 107; + public static final short EM_SEP = 108; + public static final short EM_ARCA = 109; + public static final short EM_UNICORE = 110; + public static final short EM_EXCESS = 111; + public static final short EM_DXP = 112; + public static final short EM_ALTERA_NIOS2 = 113; + public static final short EM_CRX = 114; + public static final short EM_XGATE = 115; + public static final short EM_C166 = 116; + public static final short EM_M16C = 117; + public static final short EM_DSPIC30F = 118; + public static final short EM_CE = 119; + public static final short EM_M32C = 120; + public static final short EM_TSK3000 = 131; + public static final short EM_RS08 = 132; + public static final short EM_res133 = 133; + public static final short EM_ECOG2 = 134; + public static final short EM_SCORE = 135; + public static final short EM_SCORE7 = 135; + public static final short EM_DSP24 = 136; + public static final short EM_VIDEOCORE3 = 137; + public static final short EM_LATTICEMICO32 = 138; + public static final short EM_SE_C17 = 139; + public static final short EM_TI_C6000 = 140; + public static final short EM_TI_C2000 = 141; + public static final short EM_TI_C5500 = 142; + public static final short EM_MMDSP_PLUS = 160; + public static final short EM_CYPRESS_M8C = 161; + public static final short EM_R32C = 162; + public static final short EM_TRIMEDIA = 163; + public static final short EM_QDSP6 = 164; + public static final short EM_8051 = 165; + public static final short EM_STXP7X = 166; + public static final short EM_NDS32 = 167; + public static final short EM_ECOG1 = 168; + public static final short EM_ECOG1X = 168; + public static final short EM_MAXQ30 = 169; + public static final short EM_XIMO16 = 170; + public static final short EM_MANIK = 171; + public static final short EM_CRAYNV2 = 172; + public static final short EM_RX = 173; + public static final short EM_METAG = 174; + public static final short EM_MCST_ELBRUS = 175; + public static final short EM_ECOG16 = 176; + public static final short EM_CR16 = 177; + public static final short EM_ETPU = 178; + public static final short EM_SLE9X = 179; + public static final short EM_L1OM = 180; + public static final short EM_INTEL181 = 181; + public static final short EM_INTEL182 = 182; + public static final short EM_AARCH64 = 183; + public static final short EM_ARM184 = 184; + public static final short EM_AVR32 = 185; + public static final short EM_STM8 = 186; + public static final short EM_TILE64 = 187; + public static final short EM_TILEPRO = 188; + public static final short EM_MICROBLAZE = 189; + public static final short EM_CUDA = 190; + + public static final boolean isIdentityValid(final byte[] ident) { + return ELFMAG0 == ident[0] && + ELFMAG1 == ident[1] && + ELFMAG2 == ident[2] && + ELFMAG3 == ident[3] ; + } + + /** Public access to the raw elf header part-1 (CPU/ABI independent read) */ + public final Ehdr_p1 raw; + private final byte[] E_ident; + + /** Lower case CPUType name */ + public final String cpuName; + public final CPUType cpuType; + public final ABIType abiType; + + public final MachineDescription.StaticConfig machDesc; + + /** + * Note: The input stream shall stay untouch to be able to read sections! + * @param osType TODO + * @param in input stream of a binary file at position zero + * + * @return + * @throws IOException if reading from the given input stream fails or less then ELF Header size bytes + * @throws IllegalArgumentException if the given input stream does not represent an ELF Header + */ + public static ElfHeaderPart1 read(final OSType osType, final RandomAccessFile in) throws IOException, IllegalArgumentException { + return new ElfHeaderPart1(osType, in); + } + + /** + * @param osType TODO + * @param buf ELF Header bytes + * @throws IllegalArgumentException if the given buffer does not represent an ELF Header + * @throws IOException + */ + ElfHeaderPart1(final OSType osType, final RandomAccessFile in) throws IllegalArgumentException, IOException { + { + final byte[] buf = new byte[Ehdr_p1.size()]; + readBytes (in, buf, 0, buf.length); + final ByteBuffer eh1Bytes = ByteBuffer.wrap(buf, 0, buf.length); + raw = Ehdr_p1.create(eh1Bytes); + } + E_ident = raw.getE_ident(0, new byte[Ehdr_p1.getE_identArrayLength()]); + if( !isIdentityValid(E_ident) ) { + throw new IllegalArgumentException("Buffer is not an ELF Header"); + } + + final short machine = getMachine(); + switch ( machine ) { + case EM_ARM: + cpuName = "arm"; // lowest 32bit denominator, ok for now + abiType = ABIType.GENERIC_ABI; + break; + case EM_AARCH64: + cpuName = "aarch64"; + abiType = ABIType.EABI_AARCH64; + break; + case EM_X86_64: + cpuName = "x86_64"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_386: + cpuName = "i386"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_486: + cpuName = "i486"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_IA_64: + cpuName = "ia64"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_MIPS: + cpuName = "mips"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_MIPS_X: + cpuName = "mips-x"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_MIPS_RS3_LE: + cpuName = "mips-rs3-le"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_PPC: + cpuName = "ppc"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_PPC64: + cpuName = "ppc64"; + abiType = ABIType.GENERIC_ABI; + break; + case EM_SH: // Hitachi SuperH ? + default: + throw new IllegalArgumentException("CPUType and ABIType could not be determined"); + } + cpuType = CPUType.query(cpuName.toLowerCase()); + machDesc = MachineDescriptionRuntime.get(osType, cpuType, isLittleEndian()); + if(DEBUG) { + System.err.println("ELF-1: cpuName "+cpuName+" -> "+cpuType+", "+abiType+", machDesc "+machDesc.toShortString()); + } + } + + /** + * Returns the architecture class in bits, + * 32 for {@link #ELFCLASS32}, 64 for {@link #ELFCLASS64} + * and 0 for {@link #ELFCLASSNONE}. + */ + public final int getArchClassBits() { + switch( E_ident[EI_CLASS] ) { + case ELFCLASS32: return 32; + case ELFCLASS64: return 64; + default: return 0; + } + } + + /** + * Returns the processor's data encoding, i.e. + * {@link #ELFDATA2LSB}, {@link #ELFDATA2MSB} or {@link #ELFDATANONE}; + */ + public final byte getDataEncodingMode() { + return E_ident[EI_DATA]; + } + + /** + * Returns whether the processor's {@link #getDataEncodingMode() data encoding} is {@link #ELFDATA2LSB}. + */ + public final boolean isLittleEndian() { return ELFDATA2LSB == E_ident[EI_DATA]; } + /** + * Returns whether the processor's {@link #getDataEncodingMode() data encoding} is {@link #ELFDATA2MSB}. + */ + public final boolean isBigEndian() { return ELFDATA2MSB == E_ident[EI_DATA]; } + /** + * Returns whether the processor's {@link #getDataEncodingMode() data encoding} is {@link #ELFDATANONE}. + */ + public final boolean isNoneEndian() { return ELFDATANONE == E_ident[EI_DATA]; } + + /** Returns the ELF file version, should be {@link #EV_CURRENT}. */ + public final byte getVersion() { + return E_ident[EI_VERSION]; + } + + /** Returns the operating system and ABI for this file, 3 == Linux. Note: Often not used. */ + public final byte getOSABI() { + return E_ident[EI_OSABI]; + } + + /** Returns the version of the {@link #getOSABI() OSABI} for this file. */ + public final byte getOSABIVersion() { + return E_ident[EI_ABIVERSION]; + } + + /** Returns the object file type, e.g. {@link #ET_EXEC}, .. */ + public final short getType() { + return raw.getE_type(); + } + + /** Returns the required architecture for the file, e.g. {@link #EM_386}, .. */ + public final short getMachine() { + return raw.getE_machine(); + } + + @Override + public final String toString() { + final int enc = getDataEncodingMode(); + final String encS; + switch(enc) { + case ELFDATA2LSB: encS = "LSB"; break; + case ELFDATA2MSB: encS = "MSB"; break; + default: encS = "NON"; break; /* ELFDATANONE */ + } + final int type = getType(); + final String typeS; + switch(type) { + case ET_REL: typeS = "reloc"; break; + case ET_EXEC: typeS = "exec"; break; + case ET_DYN: typeS = "shared"; break; + case ET_CORE: typeS = "core"; break; + default: typeS = "none"; break; /* ET_NONE */ + } + return "ELF-1[vers "+getVersion()+", machine["+getMachine()+", "+cpuType+", "+abiType+", machDesc "+machDesc.toShortString()+"], bits "+getArchClassBits()+", enc "+encS+ + ", abi[os "+getOSABI()+", vers "+getOSABIVersion()+"], type "+typeS+"]"; + } +} diff --git a/src/java/jogamp/common/os/elf/ElfHeaderPart2.java b/src/java/jogamp/common/os/elf/ElfHeaderPart2.java new file mode 100644 index 0000000..320b8b4 --- /dev/null +++ b/src/java/jogamp/common/os/elf/ElfHeaderPart2.java @@ -0,0 +1,374 @@ +/** + * Copyright 2013 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ +package jogamp.common.os.elf; + +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; + +import com.jogamp.common.os.Platform.ABIType; +import com.jogamp.common.os.Platform.CPUFamily; +import com.jogamp.common.os.Platform.CPUType; + +import static jogamp.common.os.elf.IOUtils.readBytes; +import static jogamp.common.os.elf.IOUtils.seek; +import static jogamp.common.os.elf.IOUtils.shortToInt; +import static jogamp.common.os.elf.IOUtils.toHexString; + +/** + * ELF ABI Header Part-2 + *+ * Part-2 can only be read w/ knowledge of CPUType! + *
+ *+ * References: + *
+ * Compatible with legacy (pre version 5) gcc use as EF_ARM_VFP_FLOAT. + *
+ *+ * Note: This is not used (anymore) + *
+ * {@value} + */ + public static final int EF_ARM_ABI_FLOAT_HARD = 0x00000400; + + /** + * Set in executable file headers (e_type = ET_EXEC or ET_DYN) to note + * explicitly that the executable file was built to conform to the software + * floating-point procedure-call standard (the base standard). If both + * {@link #EF_ARM_ABI_FLOAT_HARD} and {@link #EF_ARM_ABI_FLOAT_SOFT} are clear, + * conformance to the base procedure-call standard is implied. + *+ * Compatible with legacy (pre version 5) gcc use as EF_ARM_SOFT_FLOAT. + *
+ *+ * Note: This is not used (anymore) + *
+ * {@value} + */ + public static final int EF_ARM_ABI_FLOAT_SOFT = 0x00000200; + + /** Public access to the elf header part-1 (CPU/ABI independent read) */ + public final ElfHeaderPart1 eh1; + + /** Public access to the raw elf header part-2 (CPU/ABI dependent read) */ + public final Ehdr_p2 raw; + + /** Lower case CPUType name */ + public final String cpuName; + public final CPUType cpuType; + public final ABIType abiType; + + /** Public access to the {@link SectionHeader} */ + public final SectionHeader[] sht; + + /** + * Note: The input stream shall stay untouch to be able to read sections! + * + * @param in input stream of a binary file at position zero + * @return + * @throws IOException if reading from the given input stream fails or less then ELF Header size bytes + * @throws IllegalArgumentException if the given input stream does not represent an ELF Header + */ + public static ElfHeaderPart2 read(final ElfHeaderPart1 eh1, final RandomAccessFile in) throws IOException, IllegalArgumentException { + return new ElfHeaderPart2(eh1, in); + } + + /** + * @param buf ELF Header bytes + * @throws IllegalArgumentException if the given buffer does not represent an ELF Header + * @throws IOException + */ + ElfHeaderPart2(final ElfHeaderPart1 eh1, final RandomAccessFile in) throws IllegalArgumentException, IOException { + this.eh1 = eh1; + // + // Part-2 + // + { + final byte[] buf = new byte[Ehdr_p2.size(eh1.machDesc.ordinal())]; + readBytes (in, buf, 0, buf.length); + final ByteBuffer eh2Bytes = ByteBuffer.wrap(buf, 0, buf.length); + raw = Ehdr_p2.create(eh1.machDesc.ordinal(), eh2Bytes); + } + sht = readSectionHeaderTable(in); + + if( CPUFamily.ARM == eh1.cpuType.family && eh1.cpuType.is32Bit ) { + // AArch64, has no SHT_ARM_ATTRIBUTES or SHT_AARCH64_ATTRIBUTES SectionHeader defined in our builds! + String armCpuName = null; + String armCpuRawName = null; + boolean abiVFPArgsAcceptsVFPVariant = false; + final SectionHeader sh = getSectionHeader(SectionHeader.SHT_ARM_ATTRIBUTES); + if(ElfHeaderPart1.DEBUG) { + System.err.println("ELF-2: Got ARM Attribs Section Header: "+sh); + } + if( null != sh ) { + final SectionArmAttributes sArmAttrs = (SectionArmAttributes) sh.readSection(in); + if(ElfHeaderPart1.DEBUG) { + System.err.println("ELF-2: Got ARM Attribs Section Block : "+sArmAttrs); + } + final SectionArmAttributes.Attribute cpuNameArgsAttr = sArmAttrs.get(SectionArmAttributes.Tag.CPU_name); + if( null != cpuNameArgsAttr && cpuNameArgsAttr.isNTBS() ) { + armCpuName = cpuNameArgsAttr.getNTBS(); + } + final SectionArmAttributes.Attribute cpuRawNameArgsAttr = sArmAttrs.get(SectionArmAttributes.Tag.CPU_raw_name); + if( null != cpuRawNameArgsAttr && cpuRawNameArgsAttr.isNTBS() ) { + armCpuRawName = cpuRawNameArgsAttr.getNTBS(); + } + final SectionArmAttributes.Attribute abiVFPArgsAttr = sArmAttrs.get(SectionArmAttributes.Tag.ABI_VFP_args); + if( null != abiVFPArgsAttr ) { + abiVFPArgsAcceptsVFPVariant = SectionArmAttributes.abiVFPArgsAcceptsVFPVariant(abiVFPArgsAttr.getULEB128()); + } + } + { + String _cpuName; + if( null != armCpuName && armCpuName.length() > 0 ) { + _cpuName = armCpuName.toLowerCase().replace(' ', '-'); + } else if( null != armCpuRawName && armCpuRawName.length() > 0 ) { + _cpuName = armCpuRawName.toLowerCase().replace(' ', '-'); + } else { + _cpuName = eh1.cpuName; + } + + // 1st-try: native name + CPUType _cpuType = queryCPUTypeSafe(_cpuName); + if( null == _cpuType ) { + // 2nd-try: "arm-" + native name + _cpuName = "arm-"+_cpuName; + _cpuType = queryCPUTypeSafe(_cpuName); + if( null == _cpuType ) { + // finally: Use ELF-1 + _cpuName = eh1.cpuName; + _cpuType = queryCPUTypeSafe(_cpuName); + if( null == _cpuType ) { + throw new InternalError("XXX: "+_cpuName+", "+eh1); // shall not happen + } + } + } + cpuName = _cpuName; + cpuType = _cpuType; + if(ElfHeaderPart1.DEBUG) { + System.err.println("ELF-2: abiARM cpuName "+_cpuName+"[armCpuName "+armCpuName+", armCpuRawName "+armCpuRawName+"] -> "+cpuName+" -> "+cpuType+", abiVFPArgsAcceptsVFPVariant "+abiVFPArgsAcceptsVFPVariant); + } + } + if( cpuType.is32Bit ) { // always true, see above! + abiType = abiVFPArgsAcceptsVFPVariant ? ABIType.EABI_GNU_ARMHF : ABIType.EABI_GNU_ARMEL; + } else { + abiType = eh1.abiType; + } + } else { + cpuName = eh1.cpuName; + cpuType = eh1.cpuType; + abiType = eh1.abiType; + } + if(ElfHeaderPart1.DEBUG) { + System.err.println("ELF-2: cpuName "+cpuName+" -> "+cpuType+", "+abiType); + } + } + private static CPUType queryCPUTypeSafe(final String cpuName) { + CPUType res = null; + try { + res = CPUType.query(cpuName); + } catch (final Throwable t) { + if(ElfHeaderPart1.DEBUG) { + System.err.println("ELF-2: queryCPUTypeSafe("+cpuName+"): "+t.getMessage()); + } + } + return res; + } + + public final short getSize() { return raw.getE_ehsize(); } + + /** Returns the processor-specific flags associated with the file. */ + public final int getFlags() { + return raw.getE_flags(); + } + + /** Returns the ARM EABI version from {@link #getFlags() flags}, maybe 0 if not an ARM EABI. */ + public byte getArmABI() { + return (byte) ( ( ( EF_ARM_ABIMASK & raw.getE_flags() ) >> EF_ARM_ABISHIFT ) & 0xff ); + } + + /** Returns the ARM EABI legacy GCC {@link #getFlags() flags}, maybe 0 if not an ARM EABI or not having legacy GCC flags. */ + public int getArmLegacyGCCFlags() { + final int f = raw.getE_flags(); + return 0 != ( EF_ARM_ABIMASK & f ) ? ( EF_ARM_GCCMASK & f ) : 0; + } + + /** + * Returns the ARM EABI float mode from {@link #getFlags() flags}, + * i.e. 1 for {@link #EF_ARM_ABI_FLOAT_SOFT}, 2 for {@link #EF_ARM_ABI_FLOAT_HARD} + * or 0 for none. + *+ * Note: This is not used (anymore) + *
+ */ + public byte getArmFloatMode() { + final int f = raw.getE_flags(); + if( 0 != ( EF_ARM_ABIMASK & f ) ) { + if( ( EF_ARM_ABI_FLOAT_HARD & f ) != 0 ) { + return 2; + } + if( ( EF_ARM_ABI_FLOAT_SOFT & f ) != 0 ) { + return 1; + } + } + return 0; + } + + /** Returns the 1st occurence of matching SectionHeader {@link SectionHeader#getType() type}, or null if not exists. */ + public final SectionHeader getSectionHeader(final int type) { + for(int i=0; isb_off
,
@@ -215,7 +243,7 @@ public class SectionArmAttributes extends Section {
* @throws IndexOutOfBoundsException if offset + remaining > sb.length
.
* @throws IllegalArgumentException if section parsing failed, i.e. incompatible version or data.
*/
- static Listsb_off
,
@@ -268,7 +298,10 @@ public class SectionArmAttributes extends Section {
* @throws IndexOutOfBoundsException if offset + remaining > sb.length
.
* @throws IllegalArgumentException if section parsing failed, i.e. incompatible version or data.
*/
- static void parseSub(final byte[] in, final int offset, final int remaining, final int[] offset_post, final Listnull
if not read. */
@@ -232,9 +242,9 @@ public class SectionHeader {
* @throws IllegalArgumentException if section offset or size mismatch including size > {@link Integer#MAX_VALUE}
*/
public Section readSection(final RandomAccessFile in) throws IOException, IllegalArgumentException {
- final int s_size = long2Int(d.getSh_size());
+ final int s_size = long2Int(raw.getSh_size());
if( 0 == s_size || 0 > s_size ) {
- throw new IllegalArgumentException("Shdr["+idx+"] has invalid int size: "+d.getSh_size()+" -> "+s_size);
+ throw new IllegalArgumentException("Shdr["+idx+"] has invalid int size: "+raw.getSh_size()+" -> "+s_size);
}
final byte[] s_buf = new byte[s_size];
return readSectionImpl(in, s_buf, 0, s_size);
@@ -252,9 +262,9 @@ public class SectionHeader {
* @throws IllegalArgumentException if requested read length is > section size
*/
public Section readSection(final RandomAccessFile in, final byte[] b, final int b_off, final int r_len) throws IOException, IllegalArgumentException {
- final int s_size = long2Int(d.getSh_size());
+ final int s_size = long2Int(raw.getSh_size());
if( 0 == s_size || 0 > s_size ) {
- throw new IllegalArgumentException("Shdr["+idx+"] has invalid int size: "+d.getSh_size()+" -> "+s_size);
+ throw new IllegalArgumentException("Shdr["+idx+"] has invalid int size: "+raw.getSh_size()+" -> "+s_size);
}
if( r_len > s_size ) {
throw new IllegalArgumentException("Shdr["+idx+"] has only "+s_size+" bytes, while read request is of "+r_len+" bytes");
@@ -263,7 +273,7 @@ public class SectionHeader {
}
Section readSectionImpl(final RandomAccessFile in, final byte[] b, final int b_off, final int r_len) throws IOException, IllegalArgumentException {
- final long s_off = d.getSh_offset();
+ final long s_off = raw.getSh_offset();
seek(in, s_off);
readBytes(in, b, b_off, r_len);
if( SectionHeader.SHT_ARM_ATTRIBUTES == getType() ) {
diff --git a/src/java/jogamp/common/os/elf/Shdr.java b/src/java/jogamp/common/os/elf/Shdr.java
index e5fe147..0b75fd6 100644
--- a/src/java/jogamp/common/os/elf/Shdr.java
+++ b/src/java/jogamp/common/os/elf/Shdr.java
@@ -1,4 +1,4 @@
-/* !---- DO NOT EDIT: This file autogenerated by com/jogamp/gluegen/JavaEmitter.java on Fri Jan 30 06:44:16 CET 2015 ----! */
+/* !---- DO NOT EDIT: This file autogenerated by com/jogamp/gluegen/JavaEmitter.java on Sun Feb 01 03:27:25 CET 2015 ----! */
package jogamp.common.os.elf;
@@ -15,45 +15,30 @@ public class Shdr {
StructAccessor accessor;
- private static final int mdIdx = MachineDescriptionRuntime.getStatic().ordinal();
-
- private static final int[] Shdr_size = new int[] { 40 /* ARMle_EABI */, 40 /* X86_32_UNIX */, 64 /* X86_64_UNIX */, 40 /* X86_32_MACOS */, 40 /* X86_32_WINDOWS */, 64 /* X86_64_WINDOWS */, 40 /* SPARC_32_SUNOS */ };
- private static final int[] sh_name_offset = new int[] { 0 /* ARMle_EABI */, 0 /* X86_32_UNIX */, 0 /* X86_64_UNIX */, 0 /* X86_32_MACOS */, 0 /* X86_32_WINDOWS */, 0 /* X86_64_WINDOWS */, 0 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_name_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_type_offset = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_type_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_flags_offset = new int[] { 8 /* ARMle_EABI */, 8 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 8 /* X86_32_MACOS */, 8 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 8 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_flags_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_addr_offset = new int[] { 12 /* ARMle_EABI */, 12 /* X86_32_UNIX */, 16 /* X86_64_UNIX */, 12 /* X86_32_MACOS */, 12 /* X86_32_WINDOWS */, 16 /* X86_64_WINDOWS */, 12 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_addr_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_offset_offset = new int[] { 16 /* ARMle_EABI */, 16 /* X86_32_UNIX */, 24 /* X86_64_UNIX */, 16 /* X86_32_MACOS */, 16 /* X86_32_WINDOWS */, 24 /* X86_64_WINDOWS */, 16 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_offset_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_size_offset = new int[] { 20 /* ARMle_EABI */, 20 /* X86_32_UNIX */, 32 /* X86_64_UNIX */, 20 /* X86_32_MACOS */, 20 /* X86_32_WINDOWS */, 32 /* X86_64_WINDOWS */, 20 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_size_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_link_offset = new int[] { 24 /* ARMle_EABI */, 24 /* X86_32_UNIX */, 40 /* X86_64_UNIX */, 24 /* X86_32_MACOS */, 24 /* X86_32_WINDOWS */, 40 /* X86_64_WINDOWS */, 24 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_link_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_info_offset = new int[] { 28 /* ARMle_EABI */, 28 /* X86_32_UNIX */, 44 /* X86_64_UNIX */, 28 /* X86_32_MACOS */, 28 /* X86_32_WINDOWS */, 44 /* X86_64_WINDOWS */, 28 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_info_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_addralign_offset = new int[] { 32 /* ARMle_EABI */, 32 /* X86_32_UNIX */, 48 /* X86_64_UNIX */, 32 /* X86_32_MACOS */, 32 /* X86_32_WINDOWS */, 48 /* X86_64_WINDOWS */, 32 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_addralign_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
- private static final int[] sh_entsize_offset = new int[] { 36 /* ARMle_EABI */, 36 /* X86_32_UNIX */, 56 /* X86_64_UNIX */, 36 /* X86_32_MACOS */, 36 /* X86_32_WINDOWS */, 56 /* X86_64_WINDOWS */, 36 /* SPARC_32_SUNOS */ };
-//private static final int[] sh_entsize_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* X86_64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
-
- public static int size() {
- return Shdr_size[mdIdx];
- }
-
- public static Shdr create() {
- return create(Buffers.newDirectByteBuffer(size()));
- }
-
- public static Shdr create(java.nio.ByteBuffer buf) {
- return new Shdr(buf);
- }
-
- Shdr(java.nio.ByteBuffer buf) {
- accessor = new StructAccessor(buf);
- }
+ private final int mdIdx;
+ private final MachineDescription md;
+
+ private static final int[] Shdr_size = new int[] { 40 /* ARMle_EABI */, 40 /* X86_32_UNIX */, 64 /* LP64_UNIX */, 40 /* X86_32_MACOS */, 40 /* X86_32_WINDOWS */, 64 /* X86_64_WINDOWS */, 40 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_name_offset = new int[] { 0 /* ARMle_EABI */, 0 /* X86_32_UNIX */, 0 /* LP64_UNIX */, 0 /* X86_32_MACOS */, 0 /* X86_32_WINDOWS */, 0 /* X86_64_WINDOWS */, 0 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_name_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_type_offset = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_type_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_flags_offset = new int[] { 8 /* ARMle_EABI */, 8 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 8 /* X86_32_MACOS */, 8 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 8 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_flags_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_addr_offset = new int[] { 12 /* ARMle_EABI */, 12 /* X86_32_UNIX */, 16 /* LP64_UNIX */, 12 /* X86_32_MACOS */, 12 /* X86_32_WINDOWS */, 16 /* X86_64_WINDOWS */, 12 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_addr_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_offset_offset = new int[] { 16 /* ARMle_EABI */, 16 /* X86_32_UNIX */, 24 /* LP64_UNIX */, 16 /* X86_32_MACOS */, 16 /* X86_32_WINDOWS */, 24 /* X86_64_WINDOWS */, 16 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_offset_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_size_offset = new int[] { 20 /* ARMle_EABI */, 20 /* X86_32_UNIX */, 32 /* LP64_UNIX */, 20 /* X86_32_MACOS */, 20 /* X86_32_WINDOWS */, 32 /* X86_64_WINDOWS */, 20 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_size_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_link_offset = new int[] { 24 /* ARMle_EABI */, 24 /* X86_32_UNIX */, 40 /* LP64_UNIX */, 24 /* X86_32_MACOS */, 24 /* X86_32_WINDOWS */, 40 /* X86_64_WINDOWS */, 24 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_link_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_info_offset = new int[] { 28 /* ARMle_EABI */, 28 /* X86_32_UNIX */, 44 /* LP64_UNIX */, 28 /* X86_32_MACOS */, 28 /* X86_32_WINDOWS */, 44 /* X86_64_WINDOWS */, 28 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_info_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 4 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 4 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_addralign_offset = new int[] { 32 /* ARMle_EABI */, 32 /* X86_32_UNIX */, 48 /* LP64_UNIX */, 32 /* X86_32_MACOS */, 32 /* X86_32_WINDOWS */, 48 /* X86_64_WINDOWS */, 32 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_addralign_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
+ private static final int[] sh_entsize_offset = new int[] { 36 /* ARMle_EABI */, 36 /* X86_32_UNIX */, 56 /* LP64_UNIX */, 36 /* X86_32_MACOS */, 36 /* X86_32_WINDOWS */, 56 /* X86_64_WINDOWS */, 36 /* SPARC_32_SUNOS */ };
+//private static final int[] sh_entsize_size = new int[] { 4 /* ARMle_EABI */, 4 /* X86_32_UNIX */, 8 /* LP64_UNIX */, 4 /* X86_32_MACOS */, 4 /* X86_32_WINDOWS */, 8 /* X86_64_WINDOWS */, 4 /* SPARC_32_SUNOS */ };
public java.nio.ByteBuffer getBuffer() {
return accessor.getBuffer();
@@ -83,46 +68,46 @@ public class Shdr {
/** Setter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_flags(long val) {
- accessor.setLongAt(sh_flags_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_flags_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_flags() {
- return accessor.getLongAt(sh_flags_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_flags_offset[mdIdx], md.longSizeInBytes());
}
/** Setter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_addr(long val) {
- accessor.setLongAt(sh_addr_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_addr_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_Addr' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_addr() {
- return accessor.getLongAt(sh_addr_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_addr_offset[mdIdx], md.longSizeInBytes());
}
/** Setter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_offset(long val) {
- accessor.setLongAt(sh_offset_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_offset_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_Off' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_offset() {
- return accessor.getLongAt(sh_offset_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_offset_offset[mdIdx], md.longSizeInBytes());
}
/** Setter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_size(long val) {
- accessor.setLongAt(sh_size_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_size_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_size() {
- return accessor.getLongAt(sh_size_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_size_offset[mdIdx], md.longSizeInBytes());
}
/** Setter for native field: CType['uint32_t', size [fixed true, lnx64 4], [int]] */
@@ -149,23 +134,43 @@ public class Shdr {
/** Setter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_addralign(long val) {
- accessor.setLongAt(sh_addralign_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_addralign_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_addralign() {
- return accessor.getLongAt(sh_addralign_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_addralign_offset[mdIdx], md.longSizeInBytes());
}
/** Setter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public Shdr setSh_entsize(long val) {
- accessor.setLongAt(sh_entsize_offset[mdIdx], val, MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ accessor.setLongAt(sh_entsize_offset[mdIdx], val, md.longSizeInBytes());
return this;
}
/** Getter for native field: CType['ElfN_size' (typedef), size [fixed false, lnx64 8], [int]] */
public long getSh_entsize() {
- return accessor.getLongAt(sh_entsize_offset[mdIdx], MachineDescriptionRuntime.getStatic().md.longSizeInBytes());
+ return accessor.getLongAt(sh_entsize_offset[mdIdx], md.longSizeInBytes());
+ }
+
+ // --- Begin CustomJavaCode .cfg declarations
+ public static int size(final int mdIdx) {
+ return Shdr_size[mdIdx];
+ }
+
+ public static Shdr create(final int mdIdx) {
+ return create(mdIdx, Buffers.newDirectByteBuffer(size(mdIdx)));
+ }
+
+ public static Shdr create(final int mdIdx, final java.nio.ByteBuffer buf) {
+ return new Shdr(mdIdx, buf);
+ }
+
+ Shdr(final int mdIdx, final java.nio.ByteBuffer buf) {
+ this.mdIdx = mdIdx;
+ this.md = MachineDescription.StaticConfig.values()[mdIdx].md;
+ this.accessor = new StructAccessor(buf);
}
+ // ---- End CustomJavaCode .cfg declarations
}
--
cgit v1.2.3