aList = new ArrayList<>();
- int offset = 0;
- for (int i = 0; i < bytes.length; i++) {
- if (bytes[i] == 0) {
- aList.add(new String(bytes, offset, i - offset));
- offset = i + 1;
- }
- }
- return aList.toArray(new String[0]);
- }
-
- public Coff(String filename) throws IOException {
- this(new RandomAccessFile(filename, "r"), 0); //$NON-NLS-1$
- }
-
- public Coff(RandomAccessFile file, long offset) throws IOException {
- commonSetup(file, offset);
- }
-
- void commonSetup(RandomAccessFile file, long offset) throws IOException {
- startingOffset = offset;
- rfile = file;
- try {
- filehdr = new FileHeader(rfile, offset);
- if (filehdr.f_opthdr > 0) {
- opthdr = new OptionalHeader(rfile, startingOffset + 20);
- }
- } finally {
- if (filehdr == null) {
- rfile.close();
- }
- }
- }
-
- public static void main(String[] args) {
- try {
- Coff coff = new Coff(args[0]);
- System.out.println(coff);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java
deleted file mode 100644
index d9a26c206d7..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java
+++ /dev/null
@@ -1,905 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2016 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- * Markus Schorn (Wind River Systems)
- *******************************************************************************/
-
-package org.eclipse.cdt.utils.coff;
-
-import java.io.IOException;
-import java.io.RandomAccessFile;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.IAddressFactory;
-import org.eclipse.cdt.core.ISymbolReader;
-import org.eclipse.cdt.utils.Addr32Factory;
-import org.eclipse.cdt.utils.coff.Coff.FileHeader;
-import org.eclipse.cdt.utils.coff.Coff.OptionalHeader;
-import org.eclipse.cdt.utils.coff.Coff.SectionHeader;
-import org.eclipse.cdt.utils.coff.Coff.Symbol;
-import org.eclipse.cdt.utils.coff.Exe.ExeHeader;
-import org.eclipse.cdt.utils.debug.dwarf.DwarfReader;
-import org.eclipse.cdt.utils.debug.stabs.StabsReader;
-
-/**
- * The PE file header consists of an MS-DOS stub, the PE signalture, the COFF file Header
- * and an Optional Header.
- *
- * +-------------------+
- * | DOS-stub |
- * +-------------------+
- * | file-header |
- * +-------------------+
- * | optional header |
- * |- - - - - - - - - -|
- * | |
- * | data directories |
- * | |
- * +-------------------+
- * | |
- * | section headers |
- * | |
- * +-------------------+
- * | |
- * | section 1 |
- * | |
- * +-------------------+
- * | |
- * | section 2 |
- * | |
- * +-------------------+
- * | |
- * | ... |
- * | |
- * +-------------------+
- * | |
- * | section n |
- * | |
- * +-------------------+
- *
- */
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PE64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PE implements AutoCloseable {
-
- public static final String NL = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
- RandomAccessFile rfile;
- String filename;
- ExeHeader exeHeader;
- DOSHeader dosHeader;
- FileHeader fileHeader;
- OptionalHeader optionalHeader;
- NTOptionalHeader ntHeader;
- ImageDataDirectory[] dataDirectories;
- SectionHeader[] scnhdrs;
- Symbol[] symbolTable;
- byte[] stringTable;
-
- public static class Attribute {
- public static final int PE_TYPE_EXE = 1;
- public static final int PE_TYPE_SHLIB = 2;
- public static final int PE_TYPE_OBJ = 3;
- public static final int PE_TYPE_CORE = 4;
-
- String cpu;
- int type;
- int word;
- boolean bDebug;
- boolean isle;
- IAddressFactory addrFactory;
-
- public String getCPU() {
- return cpu;
- }
-
- public int getType() {
- return type;
- }
-
- public boolean hasDebug() {
- return bDebug;
- }
-
- public boolean isLittleEndian() {
- return isle;
- }
-
- public int getWord() {
- return word;
- }
- }
-
- /**
- */
- public static class DOSHeader {
- final static int DOSHDRSZ = 100;
- byte[] e_res = new byte[8]; /* Reserved words, all 0x0. */
- byte[] e_oemid = new byte[2]; /* OEM identifier (for e_oeminfo), 0x0. */
- byte[] e_oeminfo = new byte[2]; /* OEM information; e_oemid specific, 0x0. */
- byte[] e_res2 = new byte[20]; /* Reserved words, all 0x0. */
- int e_lfanew; /* 4 byte File address of new exe header, offset 60(0x3c), 0x80. */
- byte[] dos_message = new byte[64]; /* Other stuff, always follow DOS header. */
-
- public DOSHeader(RandomAccessFile file) throws IOException {
- this(file, file.getFilePointer());
- }
-
- public DOSHeader(RandomAccessFile file, long offset) throws IOException {
- file.seek(offset);
- byte[] hdr = new byte[DOSHDRSZ];
- file.readFully(hdr);
- ReadMemoryAccess memory = new ReadMemoryAccess(hdr, true);
- commonSetup(memory);
- }
-
- public DOSHeader(byte[] hdr, boolean little) throws IOException {
- ReadMemoryAccess memory = new ReadMemoryAccess(hdr, little);
- commonSetup(memory);
- }
-
- public DOSHeader(ReadMemoryAccess memory) throws IOException {
- commonSetup(memory);
- }
-
- public void commonSetup(ReadMemoryAccess memory) throws IOException {
- if (memory.getSize() < DOSHDRSZ) {
- throw new IOException("Not a Dos Header"); //$NON-NLS-1$
- }
- memory.getBytes(e_res);
- memory.getBytes(e_oemid);
- memory.getBytes(e_oeminfo);
- memory.getBytes(e_res2);
- e_lfanew = memory.getInt();
- memory.getBytes(dos_message);
- }
-
- @Override
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- buffer.append("DOS STUB VALUES").append(NL); //$NON-NLS-1$
- buffer.append("e_lfanew = ").append(e_lfanew).append(NL); //$NON-NLS-1$
- buffer.append(new String(dos_message)).append(NL);
- return buffer.toString();
- }
- }
-
- public static class IMAGE_DEBUG_DIRECTORY {
- final int DEBUGDIRSZ = 28;
- public int Characteristics;
- public int TimeDateStamp;
- public short MajorVersion;
- public short MinorVersion;
- public int Type;
- public int SizeOfData;
- public int AddressOfRawData;
- public int PointerToRawData;
-
- public IMAGE_DEBUG_DIRECTORY(RandomAccessFile file, long offset) throws IOException {
- file.seek(offset);
- byte[] dir = new byte[DEBUGDIRSZ];
- file.readFully(dir);
- ReadMemoryAccess memory = new ReadMemoryAccess(dir, true);
- Characteristics = memory.getInt();
- TimeDateStamp = memory.getInt();
- MajorVersion = memory.getShort();
- MinorVersion = memory.getShort();
- Type = memory.getInt();
- SizeOfData = memory.getInt();
- AddressOfRawData = memory.getInt();
- PointerToRawData = memory.getInt();
- }
- }
-
- public static class IMAGE_DATA_DIRECTORY {
-
- public int VirtualAddress;
- public int Size;
- }
-
- public static class NTOptionalHeader {
-
- public final static int NTHDRSZ = 196;
- public int ImageBase; // 4 bytes.
- public int SectionAlignment; // 4 bytes.
- public int FileAlignment; // 4 bytes.
- public short MajorOperatingSystemVersion; // 2 bytes.
- public short MinorOperatingSystemVersion; // 2 bytes.
- public short MajorImageVersion; // 2 bytes.
- public short MinorImageVersion; // 2 bytes.
- public short MajorSubsystemVersion; // 2 bytes.
- public short MinorSubsystemVersion; // 2 bytes.
- public byte[] Reserved = new byte[4]; // 4 bytes.
- public int SizeOfImage; // 4 bytes.
- public int SizeOfHeaders; // 4 bytes.
- public int CheckSum; // 4 bytes.
- public short Subsystem; // 2 bytes.
- public short DLLCharacteristics; // 2 bytes.
- public int SizeOfStackReserve; // 4 bytes.
- public int SizeOfStackCommit; // 4 bytes.
- public int SizeOfHeapReserve; // 4 bytes.
- public int SizeOfHeapCommit; // 4 bytes.
- public int LoaderFlags; // 4 bytes.
- public int NumberOfRvaAndSizes; // 4 bytes.
- public IMAGE_DATA_DIRECTORY DataDirectory[];
-
- public NTOptionalHeader(RandomAccessFile file) throws IOException {
- this(file, file.getFilePointer());
- }
-
- public NTOptionalHeader(RandomAccessFile file, long offset) throws IOException {
- file.seek(offset);
- byte[] hdr = new byte[NTHDRSZ];
- file.readFully(hdr);
- ReadMemoryAccess memory = new ReadMemoryAccess(hdr, true);
- ImageBase = memory.getInt();
- SectionAlignment = memory.getInt();
- FileAlignment = memory.getInt();
- MajorOperatingSystemVersion = memory.getShort();
- MinorOperatingSystemVersion = memory.getShort();
- MajorImageVersion = memory.getShort();
- MinorImageVersion = memory.getShort();
- MajorSubsystemVersion = memory.getShort();
- MinorSubsystemVersion = memory.getShort();
- memory.getBytes(Reserved);
- SizeOfImage = memory.getInt();
- SizeOfHeaders = memory.getInt();
- CheckSum = memory.getInt();
- Subsystem = memory.getShort();
- DLLCharacteristics = memory.getShort();
- SizeOfStackReserve = memory.getInt();
- SizeOfStackCommit = memory.getInt();
- SizeOfHeapReserve = memory.getInt();
- SizeOfHeapCommit = memory.getInt();
- LoaderFlags = memory.getInt();
- NumberOfRvaAndSizes = memory.getInt();
-
- DataDirectory = new IMAGE_DATA_DIRECTORY[NumberOfRvaAndSizes]; // 8*16=128 bytes
- for (int i = 0; i < NumberOfRvaAndSizes; i++) {
- DataDirectory[i] = new IMAGE_DATA_DIRECTORY();
- DataDirectory[i].VirtualAddress = memory.getInt();
- DataDirectory[i].Size = memory.getInt();
- }
- }
-
- @Override
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- buffer.append("NT OPTIONAL HEADER VALUES").append(NL); //$NON-NLS-1$
- buffer.append("ImageBase = ").append(ImageBase).append(NL); //$NON-NLS-1$
- buffer.append("SexctionAlignement = ").append(SectionAlignment).append(NL); //$NON-NLS-1$
- buffer.append("FileAlignment = ").append(FileAlignment).append(NL); //$NON-NLS-1$
- buffer.append("MajorOSVersion = ").append(MajorOperatingSystemVersion).append(NL); //$NON-NLS-1$
- buffer.append("MinorOSVersion = ").append(MinorOperatingSystemVersion).append(NL); //$NON-NLS-1$
- buffer.append("MajorImageVersion = ").append(MajorImageVersion).append(NL); //$NON-NLS-1$
- buffer.append("MinorImageVersion = ").append(MinorImageVersion).append(NL); //$NON-NLS-1$
- buffer.append("MajorSubVersion = ").append(MajorSubsystemVersion).append(NL); //$NON-NLS-1$
- buffer.append("MinorSubVersion = ").append(MinorSubsystemVersion).append(NL); //$NON-NLS-1$
- buffer.append("Reserved = ").append(Reserved).append(NL); //$NON-NLS-1$
- buffer.append("SizeOfImage = ").append(SizeOfImage).append(NL); //$NON-NLS-1$
- buffer.append("SizeOfHeaders = ").append(SizeOfHeaders).append(NL); //$NON-NLS-1$
- buffer.append("CheckSum = ").append(CheckSum).append(NL); //$NON-NLS-1$
- buffer.append("Subsystem = ").append(Subsystem).append(NL); //$NON-NLS-1$
- buffer.append("DLL = ").append(DLLCharacteristics).append(NL); //$NON-NLS-1$
- buffer.append("StackReserve = ").append(SizeOfStackReserve).append(NL); //$NON-NLS-1$
- buffer.append("StackCommit = ").append(SizeOfStackCommit).append(NL); //$NON-NLS-1$
- buffer.append("HeapReserve = ").append(SizeOfHeapReserve).append(NL); //$NON-NLS-1$
- buffer.append("HeapCommit = ").append(SizeOfHeapCommit).append(NL); //$NON-NLS-1$
- buffer.append("LoaderFlags = ").append(LoaderFlags).append(NL); //$NON-NLS-1$
- buffer.append("#Rva size = ").append(NumberOfRvaAndSizes).append(NL); //$NON-NLS-1$
- return buffer.toString();
- }
- }
-
- public class ImageDataDirectory {
- public int rva;
- public int size;
-
- public ImageDataDirectory(int r, int s) {
- rva = r;
- size = s;
- }
-
- @Override
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- buffer.append("rva = ").append(rva).append(" "); //$NON-NLS-1$ //$NON-NLS-2$
- buffer.append("size = ").append(size).append(NL); //$NON-NLS-1$
- return buffer.toString();
- }
- }
-
- public class ImportDirectoryEntry {
- public final static int ENTRYSZ = 20;
- public int rva;
- public int timestamp;
- public int forwarder;
- public int name;
- public int thunk;
-
- public ImportDirectoryEntry(RandomAccessFile file) throws IOException {
- this(file, file.getFilePointer());
- }
-
- public ImportDirectoryEntry(RandomAccessFile file, long offset) throws IOException {
- file.seek(offset);
- byte[] bytes = new byte[ENTRYSZ];
- file.readFully(bytes);
- ReadMemoryAccess memory = new ReadMemoryAccess(bytes, true);
- rva = memory.getInt();
- timestamp = memory.getInt();
- forwarder = memory.getInt();
- name = memory.getInt();
- thunk = memory.getInt();
- }
-
- @Override
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- buffer.append("rva = ").append(rva); //$NON-NLS-1$
- buffer.append(" timestamp = ").append(timestamp); //$NON-NLS-1$
- buffer.append(" forwarder = ").append(forwarder); //$NON-NLS-1$
- buffer.append(" name = ").append(name); //$NON-NLS-1$
- buffer.append(" thunk = ").append(thunk).append(NL); //$NON-NLS-1$
- return buffer.toString();
- }
- }
-
- public PE(String filename) throws IOException {
- this(filename, 0);
- }
-
- public PE(String filename, long pos) throws IOException {
- this(filename, pos, true);
- }
-
- public PE(String filename, long pos, boolean filter) throws IOException {
- try {
- rfile = new RandomAccessFile(filename, "r"); //$NON-NLS-1$
- this.filename = filename;
- rfile.seek(pos);
-
- // Object files do not have exe/dos header.
- try {
- exeHeader = new ExeHeader(rfile);
- dosHeader = new DOSHeader(rfile);
- // Jump the Coff header, and Check the sig.
- rfile.seek(dosHeader.e_lfanew);
- byte[] sig = new byte[4];
- rfile.readFully(sig);
- if (!((sig[0] == 'P') && (sig[1] == 'E') && (sig[2] == '\0') && (sig[3] == '\0'))) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notPE")); //$NON-NLS-1$
- }
- } catch (IOException e) {
- rfile.seek(pos);
- }
-
- fileHeader = new Coff.FileHeader(rfile, rfile.getFilePointer());
-
- // Check if this a valid machine.
- if (!isValidMachine(fileHeader.f_magic)) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.unknownFormat")); //$NON-NLS-1$
- }
-
- if (fileHeader.f_opthdr > 0) {
- optionalHeader = new Coff.OptionalHeader(rfile, rfile.getFilePointer());
- ntHeader = new NTOptionalHeader(rfile, rfile.getFilePointer());
- }
- } finally {
- if (rfile != null) {
- rfile.close();
- rfile = null;
- }
- }
- }
-
- public static boolean isValidMachine(int magic) {
- // Check if this a valid machine.
- switch (magic) {
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA:
- case PEConstants.IMAGE_FILE_MACHINE_ARM:
- case PEConstants.IMAGE_FILE_MACHINE_ARM2:
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA64:
- case PEConstants.IMAGE_FILE_MACHINE_AMD64:
- case PEConstants.IMAGE_FILE_MACHINE_I386:
- case PEConstants.IMAGE_FILE_MACHINE_IA64:
- case PEConstants.IMAGE_FILE_MACHINE_M68K:
- case PEConstants.IMAGE_FILE_MACHINE_MIPS16:
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU:
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU16:
- case PEConstants.IMAGE_FILE_MACHINE_POWERPC:
- case PEConstants.IMAGE_FILE_MACHINE_R3000:
- case PEConstants.IMAGE_FILE_MACHINE_R4000:
- case PEConstants.IMAGE_FILE_MACHINE_R10000:
- case PEConstants.IMAGE_FILE_MACHINE_SH3:
- case PEConstants.IMAGE_FILE_MACHINE_SH4:
- case PEConstants.IMAGE_FILE_MACHINE_THUMB:
- // Ok;
- return true;
- //throw new IOException("Unknow machine/format");
- }
- return false;
- }
-
- public static Attribute getAttributes(FileHeader filhdr) {
- Attribute attrib = new Attribute();
- // Machine type.
- switch (filhdr.f_magic) {
- case PEConstants.IMAGE_FILE_MACHINE_UNKNOWN:
- attrib.cpu = "none"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA:
- attrib.cpu = "alpha"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_ARM:
- case PEConstants.IMAGE_FILE_MACHINE_ARM2:
- attrib.cpu = "arm"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA64:
- attrib.cpu = "arm64"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_AMD64:
- attrib.cpu = "amd64"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_I386:
- attrib.cpu = "x86"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_IA64:
- attrib.cpu = "ia64"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_M68K:
- attrib.cpu = "m68k"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_MIPS16:
- attrib.cpu = "mips16"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU:
- attrib.cpu = "mipsfpu"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU16:
- attrib.cpu = "mipsfpu16"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_POWERPC:
- attrib.cpu = "powerpc"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_R3000:
- attrib.cpu = "r3000"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_R4000:
- attrib.cpu = "r4000"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_R10000:
- attrib.cpu = "r10000"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_SH3:
- attrib.cpu = "sh3"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_SH4:
- attrib.cpu = "sh4"; //$NON-NLS-1$
- break;
- case PEConstants.IMAGE_FILE_MACHINE_THUMB:
- attrib.cpu = "thumb"; //$NON-NLS-1$
- break;
- }
-
- /* PE characteristics, FileHeader.f_flags. */
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_DLL) != 0) {
- attrib.type = Attribute.PE_TYPE_SHLIB;
- } else if ((filhdr.f_flags & PEConstants.IMAGE_FILE_EXECUTABLE_IMAGE) != 0) {
- attrib.type = Attribute.PE_TYPE_EXE;
- } else {
- attrib.type = Attribute.PE_TYPE_OBJ;
- }
-
- // For PE always assume little endian unless otherwise.
- attrib.isle = true;
- // Little Endian.
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_BYTES_REVERSED_LO) != 0) {
- attrib.isle = true;
- }
- // Big Endian.
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_BYTES_REVERSED_HI) != 0) {
- attrib.isle = false;
- }
-
- // No debug information.
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_DEBUG_STRIPPED) != 0) {
- attrib.bDebug = false;
- } else {
- attrib.bDebug = true;
- }
-
- // sizeof word.
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_16BIT_MACHINE) != 0) {
- attrib.word = 16;
- }
- if ((filhdr.f_flags & PEConstants.IMAGE_FILE_32BIT_MACHINE) != 0) {
- attrib.word = 32;
- }
-
- attrib.addrFactory = new Addr32Factory();
- return attrib;
- }
-
- public static boolean isExeHeader(byte[] e_signature) {
- if (e_signature == null || e_signature.length < 2 || e_signature[0] != 'M' || e_signature[1] != 'Z')
- return false;
- return true;
- }
-
- public Attribute getAttribute() throws IOException {
- return getAttributes(getFileHeader());
- }
-
- public static Attribute getAttribute(byte[] data) throws IOException {
- ReadMemoryAccess memory = new ReadMemoryAccess(data, true);
- int idx = 0;
- try {
- //Exe.ExeHeader exeHdr = new Exe.ExeHeader(memory);
- new Exe.ExeHeader(memory);
- DOSHeader dosHdr = new DOSHeader(memory);
- // Jump the Coff header, and Check the sig.
- idx = dosHdr.e_lfanew;
- if (idx + 4 < data.length) {
- if (!((data[idx + 0] == 'P') && (data[idx + 1] == 'E') && (data[idx + 2] == '\0')
- && (data[idx + 3] == '\0'))) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notPE")); //$NON-NLS-1$
- }
- idx += 4;
- }
- } catch (IOException e) {
- }
- if (idx < data.length) {
- byte[] bytes = new byte[data.length - idx];
- System.arraycopy(data, idx, bytes, 0, data.length - idx);
- Coff.FileHeader filehdr = new Coff.FileHeader(bytes, true);
- if (isValidMachine(filehdr.f_magic)) {
- return getAttributes(filehdr);
- }
- }
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notPE")); //$NON-NLS-1$
- }
-
- public static Attribute getAttribute(String file) throws IOException {
- try (PE pe = new PE(file)) {
- return pe.getAttribute();
- }
- }
-
- @Override
- public void close() {
- dispose();
- }
-
- public void dispose() {
- if (rfile != null) {
- try {
- rfile.close();
- } catch (IOException e) {
- }
- rfile = null;
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- try {
- dispose();
- } finally {
- super.finalize();
- }
- }
-
- public ExeHeader getExeHeader() {
- return exeHeader;
- }
-
- public DOSHeader getDOSHeader() {
- return dosHeader;
- }
-
- public FileHeader getFileHeader() {
- return fileHeader;
- }
-
- public OptionalHeader getOptionalHeader() {
- return optionalHeader;
- }
-
- public NTOptionalHeader getNTOptionalHeader() {
- return ntHeader;
- }
-
- public ImageDataDirectory[] getImageDataDirectories() throws IOException {
- if (dataDirectories == null) {
- RandomAccessFile accessFile = getRandomAccessFile();
- long offset = 0;
- if (dosHeader != null) {
- offset = dosHeader.e_lfanew + 4/*NT SIG*/;
- }
- offset += FileHeader.FILHSZ + OptionalHeader.AOUTHDRSZ + NTOptionalHeader.NTHDRSZ;
- accessFile.seek(offset);
- dataDirectories = new ImageDataDirectory[PEConstants.IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
- byte[] data = new byte[dataDirectories.length * (4 + 4)];
- accessFile.readFully(data);
- ReadMemoryAccess memory = new ReadMemoryAccess(data, true);
- for (int i = 0; i < dataDirectories.length; i++) {
- int rva = memory.getInt();
- int size = memory.getInt();
- dataDirectories[i] = new ImageDataDirectory(rva, size);
- }
- }
- return dataDirectories;
- }
-
- public SectionHeader[] getSectionHeaders() throws IOException {
- if (scnhdrs == null) {
- RandomAccessFile accessFile = getRandomAccessFile();
- scnhdrs = new SectionHeader[fileHeader.f_nscns];
- long offset = 0;
- if (dosHeader != null) {
- offset = dosHeader.e_lfanew + 4 /* NT SIG */;
- }
- offset += FileHeader.FILHSZ + fileHeader.f_opthdr;
- for (int i = 0; i < scnhdrs.length; i++, offset += SectionHeader.SCNHSZ) {
- scnhdrs[i] = new SectionHeader(accessFile, offset);
- }
- }
- return scnhdrs;
- }
-
- public Symbol[] getSymbols() throws IOException {
- if (symbolTable == null) {
- SectionHeader[] secHeaders = getSectionHeaders();
- NTOptionalHeader ntHeader = getNTOptionalHeader();
-
- RandomAccessFile accessFile = getRandomAccessFile();
- long offset = fileHeader.f_symptr;
- symbolTable = new Symbol[fileHeader.f_nsyms];
- for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
- Symbol newSym = new Symbol(accessFile, offset, (fileHeader.f_flags & FileHeader.F_AR32WR) == 0);
-
- // Now convert section offset of the symbol to image offset.
- if (newSym.n_scnum >= 1 && newSym.n_scnum <= secHeaders.length) // valid section #
- newSym.n_value += secHeaders[newSym.n_scnum - 1].s_vaddr;
-
- // convert to absolute address.
- if (ntHeader != null)
- newSym.n_value += ntHeader.ImageBase;
-
- symbolTable[i] = newSym;
- }
- }
- return symbolTable;
- }
-
- public byte[] getStringTable() throws IOException {
- if (stringTable == null) {
- if (fileHeader.f_nsyms > 0) {
- RandomAccessFile accessFile = getRandomAccessFile();
- long symbolsize = Symbol.SYMSZ * fileHeader.f_nsyms;
- long offset = fileHeader.f_symptr + symbolsize;
- accessFile.seek(offset);
- byte[] bytes = new byte[4];
- accessFile.readFully(bytes);
- int str_len = ReadMemoryAccess.getIntLE(bytes);
- if (str_len > 4 && str_len < accessFile.length()) {
- str_len -= 4;
- stringTable = new byte[str_len];
- accessFile.seek(offset + 4);
- accessFile.readFully(stringTable);
- } else {
- stringTable = new byte[0];
- }
- } else {
- stringTable = new byte[0];
- }
- }
- return stringTable;
- }
-
- @Override
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- if (exeHeader != null) {
- buffer.append(exeHeader);
- }
- if (dosHeader != null) {
- buffer.append(dosHeader);
- }
- buffer.append(fileHeader);
- if (optionalHeader != null) {
- buffer.append(optionalHeader);
- }
- if (ntHeader != null) {
- buffer.append(ntHeader);
- }
- try {
- ImageDataDirectory[] dirs = getImageDataDirectories();
- for (int i = 0; i < dirs.length; i++) {
- buffer.append("Entry ").append(i); //$NON-NLS-1$
- buffer.append(" ").append(dirs[i]); //$NON-NLS-1$
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- SectionHeader[] sections = getSectionHeaders();
- for (int i = 0; i < sections.length; i++) {
- buffer.append(sections[i]);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- Symbol[] symbols = getSymbols();
- for (int i = 0; i < symbols.length; i++) {
- buffer.append(symbols[i]);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- byte[] bytes = getStringTable();
- String[] strings = Coff.getStringTable(bytes);
- for (int i = 0; i < strings.length; i++) {
- buffer.append(strings[i]);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return buffer.toString();
- }
-
- RandomAccessFile getRandomAccessFile() throws IOException {
- if (rfile == null) {
- rfile = new RandomAccessFile(filename, "r"); //$NON-NLS-1$
- }
- return rfile;
- }
-
- private ISymbolReader createCodeViewReader() {
- final int IMAGE_DIRECTORY_ENTRY_DEBUG = 6;
-
- try {
- // the debug directory is the 6th entry
- NTOptionalHeader ntHeader = getNTOptionalHeader();
- if (ntHeader == null || ntHeader.NumberOfRvaAndSizes < IMAGE_DIRECTORY_ENTRY_DEBUG)
- return null;
-
- int debugDir = ntHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;
- if (debugDir == 0)
- return null;
-
- int debugFormats = ntHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size / 28;
- if (debugFormats == 0)
- return null;
-
- SectionHeader[] sections = getSectionHeaders();
-
- // loop through the section headers to find the .rdata section
- for (int i = 0; i < sections.length; i++) {
- String name = new String(sections[i].s_name).trim();
- if (name.equals(".rdata")) { //$NON-NLS-1$
- // figure out the file offset of the debug ddirectory entries
- int offsetInto_rdata = debugDir - sections[i].s_vaddr;
- int fileOffset = sections[i].s_scnptr + offsetInto_rdata;
- RandomAccessFile accessFile = getRandomAccessFile();
-
- // loop through the debug directories looking for CodeView (type 2)
- for (int j = 0; j < debugFormats; j++) {
- PE.IMAGE_DEBUG_DIRECTORY dir = new PE.IMAGE_DEBUG_DIRECTORY(accessFile, fileOffset);
-
- if ((2 == dir.Type) && (dir.SizeOfData > 0)) {
- // CodeView found, seek to actual data
- int debugBase = dir.PointerToRawData;
- accessFile.seek(debugBase);
-
- // sanity check. the first four bytes of the CodeView
- // data should be "NB11"
- String s2 = accessFile.readLine();
- if (s2.startsWith("NB11")) { //$NON-NLS-1$
- Attribute att = getAttribute();
- return new CodeViewReader(filename, debugBase, att.isLittleEndian());
- }
- }
- fileOffset += dir.DEBUGDIRSZ;
- }
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return null;
- }
-
- private ISymbolReader createStabsReader() {
- ISymbolReader symReader = null;
- try {
- SectionHeader[] sections = getSectionHeaders();
- byte[] stab = null;
- byte[] stabstr = null;
-
- // loop through the section headers looking for stabs info
- for (int i = 0; i < sections.length; i++) {
- String name = new String(sections[i].s_name).trim();
- if (name.equals(".stab")) { //$NON-NLS-1$
- stab = sections[i].getRawData();
- }
- if (name.equals(".stabstr")) { //$NON-NLS-1$
- stabstr = sections[i].getRawData();
- }
- }
-
- // if we found both sections then proceed
- if (stab != null && stabstr != null) {
- Attribute att = getAttribute();
- symReader = new StabsReader(stab, stabstr, att.isLittleEndian());
- }
-
- } catch (IOException e) {
- }
- return symReader;
- }
-
- public ISymbolReader getSymbolReader() {
- ISymbolReader reader = null;
- reader = createStabsReader();
- if (reader == null) {
- reader = createCodeViewReader();
- }
- if (reader == null) {
- reader = createDwarfReader();
- }
- return reader;
- }
-
- private ISymbolReader createDwarfReader() {
- DwarfReader reader = null;
- // Check if Dwarf data exists
- try {
- reader = new DwarfReader(this);
- } catch (IOException e) {
- // No Dwarf data in the Elf.
- }
- return reader;
- }
-
- /**
- * @since 5.1
- */
- public String getStringTableEntry(int offset) throws IOException {
- byte[] bytes = getStringTable();
- offset = offset - 4;
- for (int i = offset; i < bytes.length; i++) {
- if (bytes[i] == 0) {
- return new String(bytes, offset, i - offset);
- }
- }
-
- return ""; //$NON-NLS-1$
- }
-
- /**
- * @since 5.1
- */
- public String getFilename() {
- return filename;
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PEArchive.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PEArchive.java
deleted file mode 100644
index 33a26f029ae..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PEArchive.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2016 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.Vector;
-
-import org.eclipse.cdt.core.CCorePlugin;
-
-/**
- * The AR
class is used for parsing standard ELF archive (ar) files.
- *
- * Each object within the archive is represented by an ARHeader class. Each of
- * of these objects can then be turned into an PE object for performing PE
- * class operations.
- * @deprecated - use org.eclipse.cdt.ui.utils.AR
- * @see ARHeader
- */
-@Deprecated
-public class PEArchive implements AutoCloseable {
-
- protected String filename;
- protected RandomAccessFile rfile;
- protected long strtbl_pos = -1;
- private ARHeader[] headers;
-
- @Override
- public void close() {
- dispose();
- }
-
- public void dispose() {
- try {
- if (rfile != null) {
- rfile.close();
- rfile = null;
- }
- } catch (IOException e) {
- }
- }
-
- /**
- * Do not leak fds.
- */
- @Override
- protected void finalize() throws Throwable {
- try {
- dispose();
- } finally {
- super.finalize();
- }
- }
-
- /**
- * The ARHeader
class is used to store the per-object file
- * archive headers. It can also create an PE object for inspecting
- * the object file data.
- */
- public class ARHeader {
-
- private String object_name;
- // private String modification_time;
- // private String uid;
- // private String gid;
- // private String mode;
- private long size;
- private long elf_offset;
-
- /**
- * Remove the padding from the archive header strings.
- */
- private String removeBlanks(String str) {
- while (str.charAt(str.length() - 1) == ' ')
- str = str.substring(0, str.length() - 1);
- return str;
- }
-
- /**
- * Look up the name stored in the archive's string table based
- * on the offset given.
- *
- * Maintains rfile
file location.
- *
- * @param offset
- * Offset into the string table for first character of the name.
- * @throws IOException
- * offset
not in string table bounds.
- */
- private String nameFromStringTable(long offset) throws IOException {
- StringBuilder name = new StringBuilder(0);
- long pos = rfile.getFilePointer();
-
- try {
- if (strtbl_pos != -1) {
- byte temp;
- rfile.seek(strtbl_pos + offset);
- while ((temp = rfile.readByte()) != '\n')
- name.append((char) temp);
- }
- } finally {
- rfile.seek(pos);
- }
-
- return name.toString();
- }
-
- /**
- * Creates a new archive header object.
- *
- * Assumes that rfile is already at the correct location in the file.
- *
- * @throws IOException
- * There was an error processing the header data from the file.
- */
- public ARHeader() throws IOException {
- byte[] object_name = new byte[16];
- byte[] modification_time = new byte[12];
- byte[] uid = new byte[6];
- byte[] gid = new byte[6];
- byte[] mode = new byte[8];
- byte[] size = new byte[10];
- byte[] trailer = new byte[2];
-
- //
- // Read in the archive header data. Fixed sizes.
- //
- rfile.read(object_name);
- rfile.read(modification_time);
- rfile.read(uid);
- rfile.read(gid);
- rfile.read(mode);
- rfile.read(size);
- rfile.read(trailer);
-
- //
- // Save this location so we can create the PE object later.
- //
- elf_offset = rfile.getFilePointer();
-
- //
- // Convert the raw bytes into strings and numbers.
- //
- this.object_name = removeBlanks(new String(object_name));
- // this.modification_time = new String(modification_time);
- // this.uid = new String(uid);
- // this.gid = new String(gid);
- // this.mode = new String(mode);
- this.size = Long.parseLong(removeBlanks(new String(size)));
-
- //
- // If the name is of the format "/", get name from the
- // string table.
- //
- if (strtbl_pos != -1 && this.object_name.length() > 1 && this.object_name.charAt(0) == '/') {
- try {
- long offset = Long.parseLong(this.object_name.substring(1));
- this.object_name = nameFromStringTable(offset);
- } catch (java.lang.Exception e) {
- }
- }
-
- //
- // Strip the trailing / from the object name.
- //
- int len = this.object_name.length();
- if (len > 2 && this.object_name.charAt(len - 1) == '/') {
- this.object_name = this.object_name.substring(0, len - 1);
- }
-
- }
-
- /** Get the name of the object file */
- public String getObjectName() {
- return object_name;
- }
-
- /** Get the size of the object file . */
- public long getSize() {
- return size;
- }
-
- /**
- * Create an new PE object for the object file.
- *
- * @throws IOException
- * Not a valid PE object file.
- * @return A new PE object.
- * @see PE#PE( String, long )
- */
- public PE getPE() throws IOException {
- return new PE(filename, elf_offset);
- }
-
- public PE getPE(boolean filter_on) throws IOException {
- return new PE(filename, elf_offset, filter_on);
- }
-
- public byte[] getObjectData() throws IOException {
- byte[] temp = new byte[(int) size];
- rfile.seek(elf_offset);
- rfile.read(temp);
- return temp;
- }
- }
-
- public static boolean isARHeader(byte[] ident) {
- if (ident == null || ident.length < 7 || ident[0] != '!' || ident[1] != '<' || ident[2] != 'a'
- || ident[3] != 'r' || ident[4] != 'c' || ident[5] != 'h' || ident[6] != '>')
- return false;
- return true;
- }
-
- /**
- * Creates a new AR
object from the contents of
- * the given file.
- *
- * @param filename The file to process.
- * @throws IOException The file is not a valid archive.
- */
- public PEArchive(String filename) throws IOException {
- this.filename = filename;
- rfile = new RandomAccessFile(filename, "r"); //$NON-NLS-1$
- String hdr = rfile.readLine();
- if (hdr == null || hdr.compareTo("!") != 0) { //$NON-NLS-1$
- rfile.close();
- throw new IOException(CCorePlugin.getResourceString("Util.exception.invalidArchive")); //$NON-NLS-1$
- }
- }
-
- /** Load the headers from the file (if required). */
- private void loadHeaders() throws IOException {
- if (headers != null)
- return;
-
- Vector v = new Vector<>();
- try {
- //
- // Check for EOF condition
- //
- while (rfile.getFilePointer() < rfile.length()) {
- ARHeader header = new ARHeader();
- String name = header.getObjectName();
-
- long pos = rfile.getFilePointer();
-
- //
- // If the name starts with a / it is specical.
- //
- if (name.charAt(0) != '/')
- v.add(header);
-
- //
- // If the name is "//" then this is the string table section.
- //
- if (name.compareTo("//") == 0) //$NON-NLS-1$
- strtbl_pos = pos;
-
- //
- // Compute the location of the next header in the archive.
- //
- pos += header.getSize();
- if ((pos % 2) != 0)
- pos++;
-
- rfile.seek(pos);
- }
- } catch (IOException e) {
- }
- headers = v.toArray(new ARHeader[0]);
- }
-
- /**
- * Get an array of all the object file headers for this archive.
- *
- * @throws IOException
- * Unable to process the archive file.
- * @return An array of headers, one for each object within the archive.
- * @see ARHeader
- */
- public ARHeader[] getHeaders() throws IOException {
- loadHeaders();
- return headers;
- }
-
- private boolean stringInStrings(String str, String[] set) {
- for (String element : set)
- if (str.compareTo(element) == 0)
- return true;
- return false;
- }
-
- public String[] extractFiles(String outdir, String[] names) throws IOException {
- Vector names_used = new Vector<>();
- String object_name;
- int count;
-
- loadHeaders();
-
- count = 0;
- for (ARHeader header : headers) {
- object_name = header.getObjectName();
- if (names != null && !stringInStrings(object_name, names))
- continue;
-
- object_name = "" + count + "_" + object_name; //$NON-NLS-1$ //$NON-NLS-2$
- count++;
-
- byte[] data = header.getObjectData();
- File output = new File(outdir, object_name);
- names_used.add(object_name);
-
- RandomAccessFile rfile = new RandomAccessFile(output, "rw"); //$NON-NLS-1$
- rfile.write(data);
- rfile.close();
- }
-
- return names_used.toArray(new String[0]);
- }
-
- public String[] extractFiles(String outdir) throws IOException {
- return extractFiles(outdir, null);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryArchive.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryArchive.java
deleted file mode 100644
index 5f90c00410d..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryArchive.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
-import org.eclipse.cdt.utils.AR.ARHeader;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinPEBinaryArchive64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class CygwinPEBinaryArchive extends PEBinaryArchive {
-
- /**
- * @param parser
- * @param path
- * @throws IOException
- */
- public CygwinPEBinaryArchive(PEParser parser, IPath path) throws IOException {
- super(parser, path);
- }
-
- @Override
- protected void addArchiveMembers(ARHeader[] headers, ArrayList children2) {
- for (int i = 0; i < headers.length; i++) {
- IBinaryObject bin = new CygwinPEBinaryObject(getBinaryParser(), getPath(), headers[i]);
- children.add(bin);
- }
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryExecutable.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryExecutable.java
deleted file mode 100644
index 27853d19c1d..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryExecutable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryExecutable;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinPEBinaryExecutable64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class CygwinPEBinaryExecutable extends CygwinPEBinaryObject implements IBinaryExecutable {
-
- /**
- * @param parser
- * @param path
- * @param executable
- */
- public CygwinPEBinaryExecutable(IBinaryParser parser, IPath path, int executable) {
- super(parser, path, IBinaryFile.EXECUTABLE);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java
deleted file mode 100644
index 20c5de6ac8c..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.cdt.core.CConventions;
-import org.eclipse.cdt.core.IAddress;
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.ISymbol;
-import org.eclipse.cdt.utils.AR.ARHeader;
-import org.eclipse.cdt.utils.Addr2line;
-import org.eclipse.cdt.utils.Addr32;
-import org.eclipse.cdt.utils.CPPFilt;
-import org.eclipse.cdt.utils.CygPath;
-import org.eclipse.cdt.utils.ICygwinToolsFactroy;
-import org.eclipse.cdt.utils.NM;
-import org.eclipse.cdt.utils.Objdump;
-import org.eclipse.cdt.utils.Symbol;
-import org.eclipse.cdt.utils.coff.Coff;
-import org.eclipse.cdt.utils.coff.PE;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinPEBinaryObject64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class CygwinPEBinaryObject extends PEBinaryObject {
-
- private Addr2line autoDisposeAddr2line;
- private Addr2line symbolLoadingAddr2line;
- private CygPath symbolLoadingCygPath;
- private CPPFilt symbolLoadingCPPFilt;
- long starttime;
-
- /**
- * @param parser
- * @param path
- * @param header
- */
- public CygwinPEBinaryObject(IBinaryParser parser, IPath path, ARHeader header) {
- super(parser, path, header);
- }
-
- public CygwinPEBinaryObject(IBinaryParser parser, IPath path, int type) {
- super(parser, path, type);
- }
-
- public Addr2line getAddr2line(boolean autodisposing) {
- if (!autodisposing) {
- return getAddr2line();
- }
- if (autoDisposeAddr2line == null) {
- autoDisposeAddr2line = getAddr2line();
- if (autoDisposeAddr2line != null) {
- starttime = System.currentTimeMillis();
- Runnable worker = () -> {
-
- long diff = System.currentTimeMillis() - starttime;
- while (diff < 10000) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e) {
- break;
- }
- diff = System.currentTimeMillis() - starttime;
- }
- stopAddr2Line();
- };
- new Thread(worker, "Addr2line Reaper").start(); //$NON-NLS-1$
- }
- } else {
- starttime = System.currentTimeMillis(); // reset autodispose timeout
- }
- return autoDisposeAddr2line;
- }
-
- synchronized void stopAddr2Line() {
- if (autoDisposeAddr2line != null) {
- autoDisposeAddr2line.dispose();
- }
- autoDisposeAddr2line = null;
- }
-
- private Addr2line getAddr2line() {
- ICygwinToolsFactroy factory = getBinaryParser().getAdapter(ICygwinToolsFactroy.class);
- if (factory != null) {
- return factory.getAddr2line(getPath());
- }
- return null;
- }
-
- protected CPPFilt getCPPFilt() {
- ICygwinToolsFactroy factory = getBinaryParser().getAdapter(ICygwinToolsFactroy.class);
- if (factory != null) {
- return factory.getCPPFilt();
- }
- return null;
- }
-
- protected Objdump getObjdump() {
- ICygwinToolsFactroy factory = getBinaryParser().getAdapter(ICygwinToolsFactroy.class);
- if (factory != null) {
- return factory.getObjdump(getPath());
- }
- return null;
- }
-
- protected CygPath getCygPath() {
- ICygwinToolsFactroy factory = getBinaryParser().getAdapter(ICygwinToolsFactroy.class);
- if (factory != null) {
- return factory.getCygPath();
- }
- return null;
- }
-
- /**
- */
- protected NM getNM() {
- ICygwinToolsFactroy factory = getBinaryParser().getAdapter(ICygwinToolsFactroy.class);
- if (factory != null) {
- return factory.getNM(getPath());
- }
- return null;
- }
-
- /**
- * @throws IOException
- * @see org.eclipse.cdt.core.IBinaryParser.IBinaryFile#getContents()
- */
- @Override
- public InputStream getContents() throws IOException {
- InputStream stream = null;
- Objdump objdump = getObjdump();
- if (objdump != null) {
- try {
- byte[] contents = objdump.getOutput();
- stream = new ByteArrayInputStream(contents);
- } catch (IOException e) {
- // Nothing
- }
- }
- if (stream == null) {
- stream = super.getContents();
- }
- return stream;
- }
-
- @Override
- protected void loadSymbols(PE pe) throws IOException {
- symbolLoadingAddr2line = getAddr2line(false);
- symbolLoadingCPPFilt = getCPPFilt();
- symbolLoadingCygPath = getCygPath();
-
- ArrayList list = new ArrayList<>();
- super.loadSymbols(pe, list);
-
- // Add any global symbols
- NM nm = getNM();
- if (nm != null) {
- NM.AddressNamePair[] pairs = nm.getBSSSymbols();
- for (int i = 0; i < pairs.length; ++i) {
- addSymbol(pairs[i], list, ISymbol.VARIABLE);
- }
- pairs = nm.getDataSymbols();
- for (int i = 0; i < pairs.length; ++i) {
- addSymbol(pairs[i], list, ISymbol.VARIABLE);
- }
- }
- // pairs = nm.getTextSymbols();
- // for (int i = 0; i < pairs.length; ++i) {
- // addSymbol(pairs[i], list, ISymbol.FUNCTION);
- // }
- symbols = list.toArray(NO_SYMBOLS);
- Arrays.sort(symbols);
- list.clear();
-
- if (symbolLoadingAddr2line != null) {
- symbolLoadingAddr2line.dispose();
- symbolLoadingAddr2line = null;
- }
- if (symbolLoadingCPPFilt != null) {
- symbolLoadingCPPFilt.dispose();
- symbolLoadingCPPFilt = null;
- }
- if (symbolLoadingCygPath != null) {
- symbolLoadingCygPath.dispose();
- symbolLoadingCygPath = null;
- }
- }
-
- private void addSymbol(NM.AddressNamePair p, List list, int type) {
- String name = p.name;
- if (name != null && name.length() > 0 && CConventions.isValidIdentifier(name)) {
- IAddress addr = new Addr32(p.address);
- int size = 4;
- if (symbolLoadingCPPFilt != null) {
- try {
- name = symbolLoadingCPPFilt.getFunction(name);
- } catch (IOException e1) {
- symbolLoadingCPPFilt.dispose();
- symbolLoadingCPPFilt = null;
- }
- }
- if (symbolLoadingAddr2line != null) {
- try {
- String filename = symbolLoadingAddr2line.getFileName(addr);
- // Addr2line returns the funny "??" when it can not find
- // the file.
- if (filename != null && filename.equals("??")) { //$NON-NLS-1$
- filename = null;
- }
- if (filename != null) {
- try {
- if (symbolLoadingCygPath != null) {
- filename = symbolLoadingCygPath.getFileName(filename);
- }
- } catch (IOException e) {
- symbolLoadingCygPath.dispose();
- symbolLoadingCygPath = null;
- }
- }
- IPath file = filename != null ? new Path(filename) : Path.EMPTY;
- int startLine = symbolLoadingAddr2line.getLineNumber(addr);
- int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(size - 1));
- list.add(new CygwinSymbol(this, name, type, addr, size, file, startLine, endLine));
- } catch (IOException e) {
- symbolLoadingAddr2line.dispose();
- symbolLoadingAddr2line = null;
- }
- }
- }
- }
-
- @Override
- protected void addSymbols(Coff.Symbol[] peSyms, byte[] table, List list) {
- for (Coff.Symbol peSym : peSyms) {
- if (peSym.isFunction() || peSym.isPointer() || peSym.isArray()) {
- String name = peSym.getName(table);
- if (name == null || name.trim().length() == 0 || !Character.isJavaIdentifierStart(name.charAt(0))) {
- continue;
- }
- int type = peSym.isFunction() ? ISymbol.FUNCTION : ISymbol.VARIABLE;
- IAddress addr = new Addr32(peSym.n_value);
- int size = 4;
- if (symbolLoadingCPPFilt != null) {
- try {
- name = symbolLoadingCPPFilt.getFunction(name);
- } catch (IOException e1) {
- symbolLoadingCPPFilt.dispose();
- symbolLoadingCPPFilt = null;
- }
- }
- if (symbolLoadingAddr2line != null) {
- try {
- String filename = symbolLoadingAddr2line.getFileName(addr);
- // Addr2line returns the funny "??" when it can not find
- // the file.
- if (filename != null && filename.equals("??")) { //$NON-NLS-1$
- filename = null;
- }
-
- if (filename != null) {
- try {
- if (symbolLoadingCygPath != null) {
- filename = symbolLoadingCygPath.getFileName(filename);
- }
- } catch (IOException e) {
- symbolLoadingCygPath.dispose();
- symbolLoadingCygPath = null;
- }
- }
- IPath file = filename != null ? new Path(filename) : Path.EMPTY;
- int startLine = symbolLoadingAddr2line.getLineNumber(addr);
- int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(size - 1));
- list.add(new CygwinSymbol(this, name, type, addr, size, file, startLine, endLine));
- } catch (IOException e) {
- symbolLoadingAddr2line.dispose();
- symbolLoadingAddr2line = null;
- // the symbol still needs to be added
- list.add(new CygwinSymbol(this, name, type, addr, size));
- }
- } else {
- list.add(new CygwinSymbol(this, name, type, addr, size));
- }
-
- }
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public T getAdapter(Class adapter) {
- if (adapter == Addr2line.class) {
- return (T) getAddr2line(false);
- } else if (adapter == CPPFilt.class) {
- return (T) getCPPFilt();
- } else if (adapter == CygPath.class) {
- return (T) getCygPath();
- }
- return super.getAdapter(adapter);
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryShared.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryShared.java
deleted file mode 100644
index 8c0faeb0750..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryShared.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryShared;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinPEBinaryShared64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class CygwinPEBinaryShared extends CygwinPEBinaryObject implements IBinaryShared {
-
- protected CygwinPEBinaryShared(IBinaryParser parser, IPath path) {
- super(parser, path, IBinaryFile.SHARED);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEParser.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEParser.java
deleted file mode 100644
index d44b19231c2..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEParser.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- * Anton Leherbauer (Wind River Systems)
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.utils.DefaultCygwinToolFactory;
-import org.eclipse.cdt.utils.ICygwinToolsFactroy;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinPEParser64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class CygwinPEParser extends PEParser {
-
- private DefaultCygwinToolFactory toolFactory;
-
- /**
- * @see org.eclipse.cdt.core.IBinaryParser#getFormat()
- */
- @Override
- public String getFormat() {
- return "Cygwin PE"; //$NON-NLS-1$
- }
-
- @Override
- protected IBinaryArchive createBinaryArchive(IPath path) throws IOException {
- return new CygwinPEBinaryArchive(this, path);
- }
-
- @Override
- protected IBinaryExecutable createBinaryExecutable(IPath path) {
- return new CygwinPEBinaryExecutable(this, path, IBinaryFile.EXECUTABLE);
- }
-
- @Override
- protected IBinaryObject createBinaryCore(IPath path) {
- return new CygwinPEBinaryObject(this, path, IBinaryFile.CORE);
- }
-
- @Override
- protected IBinaryObject createBinaryObject(IPath path) {
- return new CygwinPEBinaryObject(this, path, IBinaryFile.OBJECT);
- }
-
- @Override
- protected IBinaryShared createBinaryShared(IPath path) {
- return new CygwinPEBinaryShared(this, path);
- }
-
- protected DefaultCygwinToolFactory createToolFactory() {
- return new DefaultCygwinToolFactory(this);
- }
-
- @Override
- public T getAdapter(Class adapter) {
- if (adapter.isAssignableFrom(ICygwinToolsFactroy.class)) {
- if (toolFactory == null) {
- toolFactory = createToolFactory();
- }
- return adapter.cast(toolFactory);
- }
- return super.getAdapter(adapter);
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java
deleted file mode 100644
index 3aae202adda..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Jul 6, 2004
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.core.IAddress;
-import org.eclipse.cdt.utils.Addr2line;
-import org.eclipse.cdt.utils.Symbol;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link CygwinSymbol64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-class CygwinSymbol extends Symbol {
-
- /**
- * @param binary
- * @param name
- * @param type
- * @param addr
- * @param size
- * @param sourceFile
- * @param startLine
- * @param endLine
- */
- public CygwinSymbol(CygwinPEBinaryObject binary, String name, int type, IAddress addr, long size, IPath sourceFile,
- int startLine, int endLine) {
- super(binary, name, type, addr, size, sourceFile, startLine, endLine);
- }
-
- /**
- * @param binary
- * @param name
- * @param type
- * @param addr
- * @param size
- */
- public CygwinSymbol(CygwinPEBinaryObject binary, String name, int type, IAddress addr, long size) {
- super(binary, name, type, addr, size);
- }
-
- @Override
- public int getLineNumber(long offset) {
- int line = -1;
- Addr2line addr2line = ((CygwinPEBinaryObject) binary).getAddr2line(true);
- if (addr2line != null) {
- try {
- return addr2line.getLineNumber(getAddress().add(offset));
- } catch (IOException e) {
- // ignore
- }
- }
- return line;
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryArchive.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryArchive.java
deleted file mode 100644
index 8d833997de2..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryArchive.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2012 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.eclipse.cdt.core.IBinaryParser.IBinaryArchive;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
-import org.eclipse.cdt.utils.AR;
-import org.eclipse.cdt.utils.AR.ARHeader;
-import org.eclipse.cdt.utils.BinaryFile;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PEBinaryArchive64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PEBinaryArchive extends BinaryFile implements IBinaryArchive {
-
- ArrayList children;
-
- public PEBinaryArchive(PEParser parser, IPath path) throws IOException {
- super(parser, path, IBinaryFile.ARCHIVE);
- try (AR ar = new AR(path.toOSString())) {
- // create the object just to check file type
- }
- children = new ArrayList<>(5);
- }
-
- /**
- * @see org.eclipse.cdt.core.IBinaryParser.IBinaryArchive#getObjects()
- */
- @Override
- public IBinaryObject[] getObjects() {
- if (hasChanged()) {
- children.clear();
- AR ar = null;
- try {
- ar = new AR(getPath().toOSString());
- AR.ARHeader[] headers = ar.getHeaders();
- addArchiveMembers(headers, children);
- } catch (IOException e) {
- //e.printStackTrace();
- }
- if (ar != null) {
- ar.dispose();
- }
- children.trimToSize();
- }
- return children.toArray(new IBinaryObject[0]);
- }
-
- /**
- * @param headers
- * @param children2
- */
- protected void addArchiveMembers(ARHeader[] headers, ArrayList children2) {
- for (int i = 0; i < headers.length; i++) {
- IBinaryObject bin = new PEBinaryObject(getBinaryParser(), getPath(), headers[i]);
- children.add(bin);
- }
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryExecutable.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryExecutable.java
deleted file mode 100644
index 7a79a6d1486..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryExecutable.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryExecutable;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PEBinaryExecutable64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PEBinaryExecutable extends PEBinaryObject implements IBinaryExecutable {
-
- public PEBinaryExecutable(IBinaryParser parser, IPath path) {
- super(parser, path, IBinaryFile.EXECUTABLE);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java
deleted file mode 100644
index adeee3a10cd..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.cdt.core.IAddressFactory;
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.cdt.core.IBinaryParser.ISymbol;
-import org.eclipse.cdt.core.ISymbolReader;
-import org.eclipse.cdt.utils.AR;
-import org.eclipse.cdt.utils.Addr32;
-import org.eclipse.cdt.utils.Addr32Factory;
-import org.eclipse.cdt.utils.BinaryObjectAdapter;
-import org.eclipse.cdt.utils.Symbol;
-import org.eclipse.cdt.utils.coff.Coff;
-import org.eclipse.cdt.utils.coff.PE;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PEBinaryObject64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PEBinaryObject extends BinaryObjectAdapter {
-
- BinaryObjectInfo info;
- IAddressFactory addressFactory;
- ISymbol[] symbols;
- AR.ARHeader header;
-
- public PEBinaryObject(IBinaryParser parser, IPath path, AR.ARHeader header) {
- super(parser, path, IBinaryFile.OBJECT);
- }
-
- public PEBinaryObject(IBinaryParser parser, IPath p, int type) {
- super(parser, p, type);
- }
-
- @Override
- public String getName() {
- if (header != null) {
- return header.getObjectName();
- }
- return super.getName();
- }
-
- @Override
- public InputStream getContents() throws IOException {
- if (getPath() != null && header != null) {
- return new ByteArrayInputStream(header.getObjectData());
- }
- return super.getContents();
- }
-
- @Override
- public ISymbol[] getSymbols() {
- if (hasChanged() || symbols == null) {
- try {
- loadAll();
- } catch (IOException e) {
- symbols = NO_SYMBOLS;
- }
- }
- return symbols;
- }
-
- @Override
- protected BinaryObjectInfo getBinaryObjectInfo() {
- if (hasChanged() || info == null) {
- try {
- loadInfo();
- } catch (IOException e) {
- info = new BinaryObjectInfo();
- }
- }
- return info;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public T getAdapter(Class adapter) {
- if (adapter.equals(PE.class)) {
- try {
- if (header != null) {
- return (T) new PE(getPath().toOSString(), header.getObjectDataOffset());
- }
- return (T) new PE(getPath().toOSString());
- } catch (IOException e) {
- }
- }
- if (adapter.equals(ISymbolReader.class)) {
- try (PE pe = getAdapter(PE.class)) {
- if (pe != null) {
- return (T) pe.getSymbolReader();
- }
- }
- }
- return super.getAdapter(adapter);
- }
-
- protected PE getPE() throws IOException {
- if (header != null) {
- return new PE(getPath().toOSString(), header.getObjectDataOffset());
- }
- return new PE(getPath().toOSString());
- }
-
- protected void loadAll() throws IOException {
- try (PE pe = getPE()) {
- loadInfo(pe);
- loadSymbols(pe);
- }
- }
-
- protected void loadInfo() throws IOException {
- try (PE pe = getPE()) {
- loadInfo(pe);
- }
- }
-
- protected void loadInfo(PE pe) throws IOException {
- info = new BinaryObjectInfo();
- PE.Attribute attribute = pe.getAttribute();
- info.isLittleEndian = attribute.isLittleEndian();
- info.hasDebug = attribute.hasDebug();
- info.cpu = attribute.getCPU();
- }
-
- protected void loadSymbols(PE pe) throws IOException {
- ArrayList list = new ArrayList<>();
- loadSymbols(pe, list);
- symbols = list.toArray(NO_SYMBOLS);
- Arrays.sort(symbols);
- list.clear();
- }
-
- protected void loadSymbols(PE pe, List list) throws IOException {
- Coff.Symbol[] peSyms = pe.getSymbols();
- byte[] table = pe.getStringTable();
- addSymbols(peSyms, table, list);
- }
-
- protected void addSymbols(Coff.Symbol[] peSyms, byte[] table, List list) {
- for (org.eclipse.cdt.utils.coff.Coff.Symbol peSym : peSyms) {
- if (peSym.isFunction() || peSym.isPointer() || peSym.isArray()) {
- String name = peSym.getName(table);
- if (name == null || name.trim().length() == 0 || !Character.isJavaIdentifierStart(name.charAt(0))) {
- continue;
- }
- int type = peSym.isFunction() ? ISymbol.FUNCTION : ISymbol.VARIABLE;
- list.add(new Symbol(this, name, type, new Addr32(peSym.n_value), peSym.getSize()));
- }
- }
- }
-
- @Override
- public IAddressFactory getAddressFactory() {
- if (addressFactory == null) {
- addressFactory = new Addr32Factory();
- }
- return addressFactory;
- }
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryShared.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryShared.java
deleted file mode 100644
index 79f8a67d5b4..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryShared.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.coff.parser;
-
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryShared;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PEBinaryShared64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PEBinaryShared extends PEBinaryObject implements IBinaryShared {
-
- public PEBinaryShared(IBinaryParser parser, IPath p) {
- super(parser, p, IBinaryFile.SHARED);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEParser.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEParser.java
deleted file mode 100644
index d1550fa4486..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEParser.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2012 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.cdt.utils.coff.parser;
-
-import java.io.EOFException;
-import java.io.IOException;
-
-import org.eclipse.cdt.core.AbstractCExtension;
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.utils.AR;
-import org.eclipse.cdt.utils.coff.PE;
-import org.eclipse.cdt.utils.coff.PE.Attribute;
-import org.eclipse.cdt.utils.coff.PEConstants;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @deprecated Deprecated as of CDT 6.9. Use 64 bit version {@link PEParser64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class PEParser extends AbstractCExtension implements IBinaryParser {
-
- @Override
- public IBinaryFile getBinary(IPath path) throws IOException {
- return getBinary(null, path);
- }
-
- @Override
- public IBinaryFile getBinary(byte[] hints, IPath path) throws IOException {
- if (path == null) {
- throw new IOException(CCorePlugin.getResourceString("Util.exception.nullPath")); //$NON-NLS-1$
- }
-
- IBinaryFile binary = null;
- try {
- PE.Attribute attribute = null;
- if (hints != null && hints.length > 0) {
- try {
- attribute = PE.getAttribute(hints);
- } catch (EOFException e) {
- // continue to try
- }
- }
- // the hints may have to small, keep on trying.
- if (attribute == null) {
- attribute = PE.getAttribute(path.toOSString());
- }
-
- if (attribute != null) {
- switch (attribute.getType()) {
- case Attribute.PE_TYPE_EXE:
- binary = createBinaryExecutable(path);
- break;
-
- case Attribute.PE_TYPE_SHLIB:
- binary = createBinaryShared(path);
- break;
-
- case Attribute.PE_TYPE_OBJ:
- binary = createBinaryObject(path);
- break;
-
- case Attribute.PE_TYPE_CORE:
- binary = createBinaryCore(path);
- break;
- }
- }
- } catch (IOException e) {
- // Is it an Archive?
- binary = createBinaryArchive(path);
- }
-
- return binary;
- }
-
- @Override
- public String getFormat() {
- return "PE"; //$NON-NLS-1$
- }
-
- @Override
- public boolean isBinary(byte[] array, IPath path) {
- boolean isBin = PE.isExeHeader(array) || AR.isARHeader(array);
- // It maybe an object file try the known machine types.
- if (!isBin && array.length > 1) {
- int f_magic = (((array[1] & 0xff) << 8) | (array[0] & 0xff));
- switch (f_magic) {
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA:
- case PEConstants.IMAGE_FILE_MACHINE_ARM:
- case PEConstants.IMAGE_FILE_MACHINE_ALPHA64:
- case PEConstants.IMAGE_FILE_MACHINE_I386:
- case PEConstants.IMAGE_FILE_MACHINE_IA64:
- case PEConstants.IMAGE_FILE_MACHINE_M68K:
- case PEConstants.IMAGE_FILE_MACHINE_MIPS16:
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU:
- case PEConstants.IMAGE_FILE_MACHINE_MIPSFPU16:
- case PEConstants.IMAGE_FILE_MACHINE_POWERPC:
- case PEConstants.IMAGE_FILE_MACHINE_R3000:
- case PEConstants.IMAGE_FILE_MACHINE_R4000:
- case PEConstants.IMAGE_FILE_MACHINE_R10000:
- case PEConstants.IMAGE_FILE_MACHINE_SH3:
- case PEConstants.IMAGE_FILE_MACHINE_SH4:
- case PEConstants.IMAGE_FILE_MACHINE_THUMB:
- case PEConstants.IMAGE_FILE_MACHINE_ARM2:
- // Ok;
- isBin = true;
- break;
- }
- }
- return isBin;
- }
-
- @Override
- public int getHintBufferSize() {
- return 512;
- }
-
- protected IBinaryExecutable createBinaryExecutable(IPath path) {
- return new PEBinaryExecutable(this, path);
- }
-
- protected IBinaryObject createBinaryCore(IPath path) {
- return new PEBinaryObject(this, path, IBinaryFile.CORE);
- }
-
- protected IBinaryObject createBinaryObject(IPath path) {
- return new PEBinaryObject(this, path, IBinaryFile.OBJECT);
- }
-
- protected IBinaryShared createBinaryShared(IPath path) {
- return new PEBinaryShared(this, path);
- }
-
- protected IBinaryArchive createBinaryArchive(IPath path) throws IOException {
- return new PEBinaryArchive(this, path);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java
index 2e7f0322eb8..78fea6a9629 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java
@@ -26,9 +26,7 @@
import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.utils.coff.Coff.SectionHeader;
import org.eclipse.cdt.utils.coff.Coff64;
-import org.eclipse.cdt.utils.coff.PE;
import org.eclipse.cdt.utils.coff.PE64;
import org.eclipse.cdt.utils.debug.DebugUnknownType;
import org.eclipse.cdt.utils.debug.IDebugEntryRequestor;
@@ -195,13 +193,6 @@ public Dwarf(Elf exe) throws IOException {
init(exe);
}
- /**
- * @since 5.1
- */
- public Dwarf(PE exe) throws IOException {
- init(exe);
- }
-
/**
* @since 6.9
*/
@@ -301,35 +292,6 @@ public void init(Elf exe) throws IOException {
}
}
- /**
- * @since 5.1
- */
- public void init(PE exe) throws IOException {
-
- isLE = true;
- SectionHeader[] sections = exe.getSectionHeaders();
-
- for (int i = 0; i < sections.length; i++) {
- String name = new String(sections[i].s_name).trim();
- if (name.startsWith("/")) //$NON-NLS-1$
- {
- int stringTableOffset = Integer.parseInt(name.substring(1));
- name = exe.getStringTableEntry(stringTableOffset);
- }
- for (String element : Dwarf.DWARF_SCNNAMES) {
- if (name.equals(element)) {
- try {
- dwarfSections.put(element, sections[i].mapSectionData());
- } catch (Exception e) {
- e.printStackTrace();
- CCorePlugin.log(e);
- }
- }
- }
- }
-
- }
-
/**
* @since 6.9
*/
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java
index 20564a52723..d040fbe1112 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java
@@ -31,8 +31,7 @@
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICompileOptionsFinder;
import org.eclipse.cdt.core.ISymbolReader;
-import org.eclipse.cdt.utils.coff.Coff.SectionHeader;
-import org.eclipse.cdt.utils.coff.PE;
+import org.eclipse.cdt.utils.coff.Coff64.SectionHeader;
import org.eclipse.cdt.utils.coff.PE64;
import org.eclipse.cdt.utils.debug.IDebugEntryRequestor;
import org.eclipse.cdt.utils.elf.Elf;
@@ -71,13 +70,6 @@ public DwarfReader(Elf exe) throws IOException {
super(exe);
}
- /**
- * @since 5.1
- */
- public DwarfReader(PE exe) throws IOException {
- super(exe);
- }
-
/**
* @since 6.9
*/
@@ -259,7 +251,7 @@ public void init(Elf exe) throws IOException {
}
@Override
- public void init(PE exe) throws IOException {
+ public void init(PE64 exe) throws IOException {
isLE = true;
SectionHeader[] sections = exe.getSectionHeaders();
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/stabs/Stabs.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/stabs/Stabs.java
index 69ecba5cc61..1406838f8f2 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/stabs/Stabs.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/stabs/Stabs.java
@@ -21,9 +21,9 @@
import java.util.List;
import java.util.Map;
-import org.eclipse.cdt.utils.coff.Coff.SectionHeader;
-import org.eclipse.cdt.utils.coff.PE;
-import org.eclipse.cdt.utils.coff.PE.Attribute;
+import org.eclipse.cdt.utils.coff.Coff64.SectionHeader;
+import org.eclipse.cdt.utils.coff.PE64;
+import org.eclipse.cdt.utils.coff.PE64.Attribute;
import org.eclipse.cdt.utils.debug.DebugArrayType;
import org.eclipse.cdt.utils.debug.DebugBaseType;
import org.eclipse.cdt.utils.debug.DebugCrossRefType;
@@ -71,7 +71,7 @@ public Stabs(String file) throws IOException {
try (Elf exe = new Elf(file)) {
init(exe);
} catch (IOException e) {
- try (PE exe = new PE(file)) {
+ try (PE64 exe = new PE64(file)) {
init(exe);
}
}
@@ -104,7 +104,7 @@ void init(Elf exe) throws IOException {
}
}
- void init(PE exe) throws IOException {
+ void init(PE64 exe) throws IOException {
byte[] data = null;
byte[] stabstr = null;
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/AR.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/AR.java
deleted file mode 100644
index bb88792ac09..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/AR.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2016 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.utils.elf;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.Vector;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.utils.ERandomAccessFile;
-
-/**
- * The AR
class is used for parsing standard ELF archive (ar) files.
- *
- * Each object within the archive is represented by an ARHeader class. Each of
- * of these objects can then be turned into an Elf object for performing Elf
- * class operations.
- * @deprecated use org.eclipse.cdt.utils.AR
- * @see ARHeader
- */
-@Deprecated
-public class AR implements AutoCloseable {
-
- protected String filename;
- protected ERandomAccessFile efile;
- protected long strtbl_pos = -1;
- private ARHeader[] headers;
-
- @Override
- public void close() {
- dispose();
- }
-
- public void dispose() {
- try {
- if (efile != null) {
- efile.close();
- efile = null;
- }
- } catch (IOException e) {
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- try {
- dispose();
- } finally {
- super.finalize();
- }
- }
-
- /**
- * The ARHeader
class is used to store the per-object file
- * archive headers. It can also create an Elf object for inspecting
- * the object file data.
- */
- public class ARHeader {
-
- private String object_name;
- // private String modification_time;
- // private String uid;
- // private String gid;
- // private String mode;
- private long size;
- private long elf_offset;
-
- /**
- * Remove the padding from the archive header strings.
- */
- private String removeBlanks(String str) {
- while (str.charAt(str.length() - 1) == ' ')
- str = str.substring(0, str.length() - 1);
- return str;
- }
-
- /**
- * Look up the name stored in the archive's string table based
- * on the offset given.
- *
- * Maintains efile
file location.
- *
- * @param offset
- * Offset into the string table for first character of the name.
- * @throws IOException
- * offset
not in string table bounds.
- */
- private String nameFromStringTable(long offset) throws IOException {
- StringBuilder name = new StringBuilder(0);
- long pos = efile.getFilePointer();
-
- try {
- if (strtbl_pos != -1) {
- byte temp;
- efile.seek(strtbl_pos + offset);
- while ((temp = efile.readByte()) != '\n')
- name.append((char) temp);
- }
- } finally {
- efile.seek(pos);
- }
-
- return name.toString();
- }
-
- /**
- * Creates a new archive header object.
- *
- * Assumes that efile is already at the correct location in the file.
- *
- * @throws IOException
- * There was an error processing the header data from the file.
- */
- public ARHeader() throws IOException {
- byte[] object_name = new byte[16];
- byte[] modification_time = new byte[12];
- byte[] uid = new byte[6];
- byte[] gid = new byte[6];
- byte[] mode = new byte[8];
- byte[] size = new byte[10];
- byte[] trailer = new byte[2];
-
- //
- // Read in the archive header data. Fixed sizes.
- //
- efile.read(object_name);
- efile.read(modification_time);
- efile.read(uid);
- efile.read(gid);
- efile.read(mode);
- efile.read(size);
- efile.read(trailer);
-
- //
- // Save this location so we can create the Elf object later.
- //
- elf_offset = efile.getFilePointer();
-
- //
- // Convert the raw bytes into strings and numbers.
- //
- this.object_name = removeBlanks(new String(object_name));
- // this.modification_time = new String(modification_time);
- // this.uid = new String(uid);
- // this.gid = new String(gid);
- // this.mode = new String(mode);
- this.size = Long.parseLong(removeBlanks(new String(size)));
-
- //
- // If the name is of the format "/", get name from the
- // string table.
- //
- if (strtbl_pos != -1 && this.object_name.length() > 1 && this.object_name.charAt(0) == '/') {
- try {
- long offset = Long.parseLong(this.object_name.substring(1));
- this.object_name = nameFromStringTable(offset);
- } catch (java.lang.Exception e) {
- }
- }
-
- //
- // Strip the trailing / from the object name.
- //
- int len = this.object_name.length();
- if (len > 2 && this.object_name.charAt(len - 1) == '/') {
- this.object_name = this.object_name.substring(0, len - 1);
- }
-
- }
-
- /** Get the name of the object file */
- public String getObjectName() {
- return object_name;
- }
-
- /** Get the size of the object file . */
- public long getSize() {
- return size;
- }
-
- public String getArchiveName() {
- return filename;
- }
-
- /**
- * Create an new Elf object for the object file.
- *
- * @throws IOException
- * Not a valid Elf object file.
- * @return A new Elf object.
- * @see Elf#Elf( String, long )
- */
- public Elf getElf() throws IOException {
- return new Elf(filename, elf_offset);
- }
-
- public byte[] getObjectData() throws IOException {
- byte[] temp = new byte[(int) size];
- if (efile != null) {
- efile.seek(elf_offset);
- efile.read(temp);
- } else {
- try (ERandomAccessFile tempfile = new ERandomAccessFile(filename, "r")) { //$NON-NLS-1$
- tempfile.seek(elf_offset);
- tempfile.read(temp);
- }
- }
- return temp;
- }
- }
-
- public static boolean isARHeader(byte[] ident) {
- if (ident == null || ident.length < 7 || ident[0] != '!' || ident[1] != '<' || ident[2] != 'a'
- || ident[3] != 'r' || ident[4] != 'c' || ident[5] != 'h' || ident[6] != '>')
- return false;
- return true;
- }
-
- /**
- * Creates a new AR
object from the contents of
- * the given file.
- *
- * @param filename The file to process.
- * @throws IOException The file is not a valid archive.
- */
- public AR(String filename) throws IOException {
- this.filename = filename;
- efile = new ERandomAccessFile(filename, "r"); //$NON-NLS-1$
- String hdr = efile.readLine();
- if (hdr == null || hdr.compareTo("!") != 0) { //$NON-NLS-1$
- efile.close();
- efile = null;
- throw new IOException(CCorePlugin.getResourceString("Util.exception.invalidArchive")); //$NON-NLS-1$
- }
- }
-
- /** Load the headers from the file (if required). */
- private void loadHeaders() throws IOException {
- if (headers != null)
- return;
-
- Vector v = new Vector<>();
- try {
- //
- // Check for EOF condition
- //
- while (efile.getFilePointer() < efile.length()) {
- ARHeader header = new ARHeader();
- String name = header.getObjectName();
-
- long pos = efile.getFilePointer();
-
- //
- // If the name starts with a / it is specical.
- //
- if (name.charAt(0) != '/')
- v.add(header);
-
- //
- // If the name is "//" then this is the string table section.
- //
- if (name.compareTo("//") == 0) //$NON-NLS-1$
- strtbl_pos = pos;
-
- //
- // Compute the location of the next header in the archive.
- //
- pos += header.getSize();
- if ((pos % 2) != 0)
- pos++;
-
- efile.seek(pos);
- }
- } catch (IOException e) {
- }
- headers = v.toArray(new ARHeader[0]);
- }
-
- /**
- * Get an array of all the object file headers for this archive.
- *
- * @throws IOException
- * Unable to process the archive file.
- * @return An array of headers, one for each object within the archive.
- * @see ARHeader
- */
- public ARHeader[] getHeaders() throws IOException {
- loadHeaders();
- return headers;
- }
-
- private boolean stringInStrings(String str, String[] set) {
- for (String element : set)
- if (str.compareTo(element) == 0)
- return true;
- return false;
- }
-
- public String[] extractFiles(String outdir, String[] names) throws IOException {
- Vector names_used = new Vector<>();
- String object_name;
- int count;
-
- loadHeaders();
-
- count = 0;
- for (ARHeader header : headers) {
- object_name = header.getObjectName();
- if (names != null && !stringInStrings(object_name, names))
- continue;
-
- object_name = "" + count + "_" + object_name; //$NON-NLS-1$ //$NON-NLS-2$
- count++;
-
- byte[] data = header.getObjectData();
- File output = new File(outdir, object_name);
- names_used.add(object_name);
-
- RandomAccessFile rfile = new RandomAccessFile(output, "rw"); //$NON-NLS-1$
- rfile.write(data);
- rfile.close();
- }
-
- return names_used.toArray(new String[0]);
- }
-
- public String[] extractFiles(String outdir) throws IOException {
- return extractFiles(outdir, null);
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO.java
deleted file mode 100644
index 891a042cb99..00000000000
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO.java
+++ /dev/null
@@ -1,1692 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2016 QNX Software Systems and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- * Craig Watson.
- * Apple Computer - work on performance optimizations
- *******************************************************************************/
-package org.eclipse.cdt.utils.macho;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.ISymbolReader;
-import org.eclipse.cdt.utils.CPPFilt;
-import org.eclipse.cdt.utils.debug.stabs.StabsReader;
-
-// test checkin
-/**
- * @deprecated Deprecated as of CDT 6.1. Use 64 bit version {@link MachO64}.
- * This class is planned for removal in next major release.
- */
-@Deprecated
-public class MachO implements AutoCloseable {
- protected ERandomAccessFile efile;
-
- protected MachOhdr mhdr;
- protected LoadCommand[] loadcommands;
- protected boolean cppFiltEnabled = true;
- protected CPPFilt cppFilt;
- protected String file;
- protected boolean debugsym = false; /* contains debugging symbols */
-
- private Symbol[] symbols; /* symbols from SymtabCommand */
- private Symbol[] local_symbols; /* local symbols from DySymtabCommand */
- private boolean dynsym = false; /* set if DynSymtabCommand is present */
- Line[] lines; /* line table */
- private ArrayList sections = new ArrayList<>(); /* sections from SegmentCommand */
- SymtabCommand symtab; /* SymtabCommand that contains the symbol table */
-
- protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
- protected static final SymbolComparator symbol_comparator = new SymbolComparator();
-
- public class MachOhdr {
-
- /* values of magic */
- public final static int MH_MAGIC = 0xfeedface; /* the mach magic number */
- public final static int MH_CIGAM = 0xcefaedfe;
- public final static int MH_UNIVERSAL = 0xcafebabe;
-
- /* values of cputype */
- public final static int CPU_TYPE_ANY = -1;
- public final static int CPU_TYPE_VAX = 1;
- public final static int CPU_TYPE_MC680x0 = 6;
- public final static int CPU_TYPE_I386 = 7;
- public final static int CPU_TYPE_MC98000 = 10;
- public final static int CPU_TYPE_HPPA = 11;
- public final static int CPU_TYPE_MC88000 = 13;
- public final static int CPU_TYPE_SPARC = 14;
- public final static int CPU_TYPE_I860 = 15;
- public final static int CPU_TYPE_POWERPC = 18;
-
- /* values of cpusubtype */
- public final static int CPU_SUBTYPE_MULTIPLE = -1;
- public final static int CPU_SUBTYPE_LITTLE_ENDIAN = 0;
- public final static int CPU_SUBTYPE_BIG_ENDIAN = 1;
- public final static int CPU_SUBTYPE_VAX_ALL = 0;
- public final static int CPU_SUBTYPE_VAX780 = 1;
- public final static int CPU_SUBTYPE_VAX785 = 2;
- public final static int CPU_SUBTYPE_VAX750 = 3;
- public final static int CPU_SUBTYPE_VAX730 = 4;
- public final static int CPU_SUBTYPE_UVAXI = 5;
- public final static int CPU_SUBTYPE_UVAXII = 6;
- public final static int CPU_SUBTYPE_VAX8200 = 7;
- public final static int CPU_SUBTYPE_VAX8500 = 8;
- public final static int CPU_SUBTYPE_VAX8600 = 9;
- public final static int CPU_SUBTYPE_VAX8650 = 10;
- public final static int CPU_SUBTYPE_VAX8800 = 11;
- public final static int CPU_SUBTYPE_UVAXIII = 12;
- public final static int CPU_SUBTYPE_MC680x0_ALL = 1;
- public final static int CPU_SUBTYPE_MC68030 = 1;
- public final static int CPU_SUBTYPE_MC68040 = 2;
- public final static int CPU_SUBTYPE_MC68030_ONLY = 3;
- public final static int CPU_SUBTYPE_I386_ALL = 3;
- public final static int CPU_SUBTYPE_386 = 3;
- public final static int CPU_SUBTYPE_486 = 4;
- public final static int CPU_SUBTYPE_486SX = 132;
- public final static int CPU_SUBTYPE_586 = 5;
- public final static int CPU_SUBTYPE_PENT = 5;
- public final static int CPU_SUBTYPE_PENTPRO = 32;
- public final static int CPU_SUBTYPE_PENTII_M3 = 54;
- public final static int CPU_SUBTYPE_PENTII_M5 = 86;
- public final static int CPU_SUBTYPE_MIPS_ALL = 0;
- public final static int CPU_SUBTYPE_MIPS_R2300 = 1;
- public final static int CPU_SUBTYPE_MIPS_R2600 = 2;
- public final static int CPU_SUBTYPE_MIPS_R2800 = 3;
- public final static int CPU_SUBTYPE_MIPS_R2000a = 4;
- public final static int CPU_SUBTYPE_MIPS_R2000 = 5;
- public final static int CPU_SUBTYPE_MIPS_R3000a = 6;
- public final static int CPU_SUBTYPE_MIPS_R3000 = 7;
- public final static int CPU_SUBTYPE_MC98000_ALL = 0;
- public final static int CPU_SUBTYPE_MC98601 = 1;
- public final static int CPU_SUBTYPE_HPPA_ALL = 0;
- public final static int CPU_SUBTYPE_HPPA_7100 = 0;
- public final static int CPU_SUBTYPE_HPPA_7100LC = 1;
- public final static int CPU_SUBTYPE_MC88000_ALL = 0;
- public final static int CPU_SUBTYPE_MC88100 = 1;
- public final static int CPU_SUBTYPE_MC88110 = 2;
- public final static int CPU_SUBTYPE_SPARC_ALL = 0;
- public final static int CPU_SUBTYPE_I860_ALL = 0;
- public final static int CPU_SUBTYPE_I860_860 = 1;
- public final static int CPU_SUBTYPE_POWERPC_ALL = 0;
- public final static int CPU_SUBTYPE_POWERPC_601 = 1;
- public final static int CPU_SUBTYPE_POWERPC_602 = 2;
- public final static int CPU_SUBTYPE_POWERPC_603 = 3;
- public final static int CPU_SUBTYPE_POWERPC_603e = 4;
- public final static int CPU_SUBTYPE_POWERPC_603ev = 5;
- public final static int CPU_SUBTYPE_POWERPC_604 = 6;
- public final static int CPU_SUBTYPE_POWERPC_604e = 7;
- public final static int CPU_SUBTYPE_POWERPC_620 = 8;
- public final static int CPU_SUBTYPE_POWERPC_750 = 9;
- public final static int CPU_SUBTYPE_POWERPC_7400 = 10;
- public final static int CPU_SUBTYPE_POWERPC_7450 = 11;
- public final static int CPU_SUBTYPE_POWERPC_970 = 100;
-
- /* values of filetype */
- public final static int MH_OBJECT = 0x1; /* relocatable object file */
- public final static int MH_EXECUTE = 0x2; /* demand paged executable file */
- public final static int MH_FVMLIB = 0x3; /* fixed VM shared library file */
- public final static int MH_CORE = 0x4; /* core file */
- public final static int MH_PRELOAD = 0x5; /* preloaded executable file */
- public final static int MH_DYLIB = 0x6; /* dynamically bound shared library */
- public final static int MH_DYLINKER = 0x7; /* dynamic link editor */
- public final static int MH_BUNDLE = 0x8; /* dynamically bound bundle file */
- public final static int MH_DYLIB_STUB = 0x9; /* shared library stub for static linking only, no section contents */
-
- /* values of flags */
- public final static int MH_NOUNDEFS = 0x1; /* the object file has no undefined references */
- public final static int MH_INCRLINK = 0x2; /* the object file is the output of an incremental link against a base file and can't be link edited again */
- public final static int MH_DYLDLINK = 0x4; /* the object file is input for the dynamic linker and can't be staticly link edited again */
- public final static int MH_BINDATLOAD = 0x8; /* the object file's undefined references are bound by the dynamic linker when loaded. */
- public final static int MH_PREBOUND = 0x10; /* the file has its dynamic undefined references prebound. */
- public final static int MH_SPLIT_SEGS = 0x20; /* the file has its read-only and read-write segments split */
- public final static int MH_LAZY_INIT = 0x40; /* the shared library init routine is to be run lazily via catching memory faults to its writeable segments (obsolete) */
- public final static int MH_TWOLEVEL = 0x80; /* the image is using two-level name space bindings */
- public final static int MH_FORCE_FLAT = 0x100; /* the executable is forcing all images to use flat name space bindings */
- public final static int MH_NOMULTIDEFS = 0x200; /* this umbrella guarantees no multiple defintions of symbols in its sub-images so the two-level namespace hints can always be used. */
- public final static int MH_NOFIXPREBINDING = 0x400; /* do not have dyld notify the prebinding agent about this executable */
-
- public int magic; /* mach magic number identifier */
- public int cputype; /* cpu specifier */
- public int cpusubtype; /* machine specifier */
- public int filetype; /* type of file */
- public int ncmds; /* number of load commands */
- public int sizeofcmds; /* the size of all the load commands */
- public int flags; /* flags */
-
- protected MachOhdr() throws IOException {
- efile.seek(0);
- efile.setEndian(false);
- magic = efile.readIntE();
- if (magic == MH_CIGAM)
- efile.setEndian(true);
- else if (magic == MH_UNIVERSAL) {
- String arch = System.getProperty("os.arch"); //$NON-NLS-1$
- int numArchives = efile.readIntE();
- while (numArchives-- > 0) {
- int cpuType = efile.readIntE(); // cpuType
- efile.readIntE(); // cpuSubType
- int archiveOffset = efile.readIntE(); // archiveOffset
- efile.readIntE(); // archiveSize
- efile.readIntE(); // archiveAlignment
- if ((cpuType == MachO.MachOhdr.CPU_TYPE_I386 && arch.equalsIgnoreCase("i386")) || //$NON-NLS-1$
- (cpuType == MachO.MachOhdr.CPU_TYPE_POWERPC && arch.equalsIgnoreCase("ppc"))) //$NON-NLS-1$
- {
- efile.seek(archiveOffset);
- magic = efile.readIntE();
- if (magic == MH_CIGAM)
- efile.setEndian(true);
- else if (magic != MH_MAGIC)
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notMACHO")); //$NON-NLS-1$
- break;
- }
- }
- } else if (magic != MH_MAGIC)
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notMACHO")); //$NON-NLS-1$
- cputype = efile.readIntE();
- cpusubtype = efile.readIntE();
- filetype = efile.readIntE();
- ncmds = efile.readIntE();
- sizeofcmds = efile.readIntE();
- flags = efile.readIntE();
- }
-
- protected MachOhdr(byte[] bytes) throws IOException {
- boolean isle = false;
- int offset = 0;
- magic = makeInt(bytes, offset, isle);
- offset += 4;
- if (magic == MH_CIGAM)
- isle = true;
- else if (magic == MH_UNIVERSAL) {
- String arch = System.getProperty("os.arch"); //$NON-NLS-1$
- int numArchives = makeInt(bytes, offset, isle);
- offset += 4;
- while (numArchives-- > 0) {
- int cpuType = makeInt(bytes, offset, isle);
- offset += 4;
- offset += 4; // cpuSubType
- int archiveOffset = makeInt(bytes, offset, isle);
- offset += 4;
- offset += 4; // archiveSize
- offset += 4; // archiveAlignment
- if ((cpuType == MachO.MachOhdr.CPU_TYPE_I386 && arch.equalsIgnoreCase("i386")) || //$NON-NLS-1$
- (cpuType == MachO.MachOhdr.CPU_TYPE_POWERPC && arch.equalsIgnoreCase("ppc"))) //$NON-NLS-1$
- {
- offset = archiveOffset;
- magic = makeInt(bytes, offset, isle);
- offset += 4;
- if (magic == MH_CIGAM)
- isle = true;
- else if (magic != MH_MAGIC)
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notMACHO")); //$NON-NLS-1$
- break;
- }
- }
- } else if (magic != MH_MAGIC)
- throw new IOException(CCorePlugin.getResourceString("Util.exception.notMACHO")); //$NON-NLS-1$
- cputype = makeInt(bytes, offset, isle);
- offset += 4;
- cpusubtype = makeInt(bytes, offset, isle);
- offset += 4;
- filetype = makeInt(bytes, offset, isle);
- offset += 4;
- ncmds = makeInt(bytes, offset, isle);
- offset += 4;
- sizeofcmds = makeInt(bytes, offset, isle);
- offset += 4;
- flags = makeInt(bytes, offset, isle);
- offset += 4;
- }
- }
-
- private static final int makeInt(byte[] val, int offset, boolean isle) throws IOException {
- if (val.length < offset + 4)
- throw new IOException();
- if (isle) {
- return (((val[offset + 3] & 0xff) << 24) | ((val[offset + 2] & 0xff) << 16)
- | ((val[offset + 1] & 0xff) << 8) | (val[offset + 0] & 0xff));
- } else {
- return (((val[offset + 0] & 0xff) << 24) | ((val[offset + 1] & 0xff) << 16)
- | ((val[offset + 2] & 0xff) << 8) | (val[offset + 3] & 0xff));
- }
- }
-
- public class LoadCommand {
- public final static int LC_REQ_DYLD = 0x80000000;
-
- /* values of cmd */
- public final static int LC_SEGMENT = 0x1; /* segment of this file to be mapped */
- public final static int LC_SYMTAB = 0x2; /* link-edit stab symbol table info */
- public final static int LC_SYMSEG = 0x3; /* link-edit gdb symbol table info (obsolete) */
- public final static int LC_THREAD = 0x4; /* thread */
- public final static int LC_UNIXTHREAD = 0x5; /* unix thread (includes a stack) */
- public final static int LC_LOADFVMLIB = 0x6; /* load a specified fixed VM shared library */
- public final static int LC_IDFVMLIB = 0x7; /* fixed VM shared library identification */
- public final static int LC_IDENT = 0x8; /* object identification info (obsolete) */
- public final static int LC_FVMFILE = 0x9; /* fixed VM file inclusion (internal use) */
- public final static int LC_PREPAGE = 0xa; /* prepage command (internal use) */
- public final static int LC_DYSYMTAB = 0xb; /* dynamic link-edit symbol table info */
- public final static int LC_LOAD_DYLIB = 0xc; /* load a dynamically linked shared library */
- public final static int LC_ID_DYLIB = 0xd; /* dynamically linked shared lib ident */
- public final static int LC_LOAD_DYLINKER = 0xe; /* load a dynamic linker */
- public final static int LC_ID_DYLINKER = 0xf; /* dynamic linker identification */
- public final static int LC_PREBOUND_DYLIB = 0x10; /* modules prebound for a dynamically linked shared library */
- public final static int LC_ROUTINES = 0x11; /* image routines */
- public final static int LC_SUB_FRAMEWORK = 0x12; /* sub framework */
- public final static int LC_SUB_UMBRELLA = 0x13; /* sub umbrella */
- public final static int LC_SUB_CLIENT = 0x14; /* sub client */
- public final static int LC_SUB_LIBRARY = 0x15; /* sub library */
- public final static int LC_TWOLEVEL_HINTS = 0x16; /* two-level namespace lookup hints */
- public final static int LC_PREBIND_CKSUM = 0x17; /* prebind checksum */
- /*
- * load a dynamically linked shared library that is allowed to be missing
- * (all symbols are weak imported).
- */
- public final static int LC_LOAD_WEAK_DYLIB = (0x18 | LC_REQ_DYLD);
-
- public int cmd;
- public int cmdsize;
- }
-
- public class UnknownCommand extends LoadCommand {
- }
-
- public class LCStr {
- public long offset;
- public long ptr;
- }
-
- public class SegmentCommand extends LoadCommand {
- /* values of flags */
- public final static long SG_HIGHVM = 0x1;
- public final static long SG_FVMLIB = 0x2;
- public final static long SG_NORELOC = 0x4;
-
- /* VM protection values */
- public final static int VM_PROT_NONE = 0x00;
- public final static int VM_PROT_READ = 0x01; /* read permission */
- public final static int VM_PROT_WRITE = 0x02; /* write permission */
- public final static int VM_PROT_EXECUTE = 0x04; /* execute permission */
- public final static int VM_PROT_DEFAULT = (VM_PROT_READ | VM_PROT_WRITE);
- public final static int VM_PROT_ALL = (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
- public final static int VM_PROT_NO_CHANGE = 0x08;
- public final static int VM_PROT_COPY = 0x10;
- public final static int VM_PROT_WANTS_COPY = 0x10;
-
- public String segname; /* segment name */
- public int vmaddr; /* memory address of this segment */
- public int vmsize; /* memory size of this segment */
- public int fileoff; /* file offset of this segment */
- public int filesize; /* amount to map from the file */
- public int maxprot; /* maximum VM protection */
- public int initprot; /* initial VM protection */
- public int nsects; /* number of sections in segment */
- public int flags; /* flags */
-
- public boolean prot(int val) {
- return (initprot & val) == val;
- }
- }
-
- public class Section {
-
- public final static int SECTION_TYP = 0x000000ff; /* 256 section types */
- public final static int SECTION_ATTRIBUTES = 0xffffff00; /* 24 section attributes */
- public final static int SECTION_ATTRIBUTES_USR = 0xff000000; /* User setable attributes */
-
- /* values of flags */
- public final static int S_REGULAR = 0x0; /* regular section */
- public final static int S_ZEROFILL = 0x1; /* zero fill on demand section */
- public final static int S_CSTRING_LITERALS = 0x2; /* section with only literal C strings*/
- public final static int S_4BYTE_LITERALS = 0x3; /* section with only 4 byte literals */
- public final static int S_8BYTE_LITERALS = 0x4; /* section with only 8 byte literals */
- public final static int S_LITERAL_POINTERS = 0x5; /* section with only pointers to literals */
- public final static int S_NON_LAZY_SYMBOL_POINTERS = 0x6; /* section with only non-lazy symbol pointers */
- public final static int S_LAZY_SYMBOL_POINTERS = 0x7; /* section with only lazy symbol pointers */
- public final static int S_SYMBOL_STUBS = 0x8; /* section with only symbol stubs, byte size of stub in the reserved2 field */
- public final static int S_MOD_INIT_FUNC_POINTERS = 0x9; /* section with only function pointers for initialization*/
- public final static int S_MOD_TERM_FUNC_POINTERS = 0xa; /* section with only function pointers for termination */
- public final static int S_COALESCED = 0xb; /* section contains symbols that are to be coalesced */
- public final static int S_ATTR_PURE_INSTRUCTIONS = 0x80000000; /* section contains only true machine instructions */
- public final static int S_ATTR_NO_TOC = 0x40000000; /* section contains coalesced symbols that are not to be in a ranlib table of contents */
- public final static int S_ATTR_STRIP_STATIC_SYMS = 0x20000000; /* ok to strip static symbols in this section in files with the MH_DYLDLINK flag */
- public final static int SECTION_ATTRIBUTES_SYS = 0x00ffff00; /* system setable attributes */
- public final static int S_ATTR_SOME_INSTRUCTIONS = 0x00000400; /* section contains some machine instructions */
- public final static int S_ATTR_EXT_RELOC = 0x00000200; /* section has external relocation entries */
- public final static int S_ATTR_LOC_RELOC = 0x00000100; /* section has local relocation entries */
-
- public String sectname; /* name of this section */
- public String segname; /* name segment this section goes in */
- public SegmentCommand segment; /* segment this section goes in */
- public int addr; /* memory address of this section */
- public int size; /* size in bytes of this section */
- public int offset; /* file offset of this section */
- public int align; /* section alignment (power of 2) */
- public int reloff; /* file offset of relocation entries */
- public int nreloc; /* number of relocation entries */
- public int flags; /* flags (section type and attributes)*/
- public int reserved1; /* reserved */
- public int reserved2; /* reserved */
-
- public int flags(int mask) {
- return flags & mask;
- }
- }
-
- public class FVMLib {
- public int name; /* library's target pathname */
- public int minor_version; /* library's minor version number */
- public int header_addr; /* library's header address */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class FVMLibCommand extends LoadCommand {
- public FVMLib fvmlib; /* the library identification */
- }
-
- public class DyLib {
- public int name; /* library's path name */
- public int timestamp; /* library's build time stamp */
- public int current_version; /* library's current version number */
- public int compatibility_version; /* library's compatibility vers number*/
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class DyLibCommand extends LoadCommand {
- public DyLib dylib; /* the library identification */
- }
-
- public class SubFrameworkCommand extends LoadCommand {
- public int umbrella; /* the umbrella framework name */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class SubClientCommand extends LoadCommand {
- public int client; /* the client name */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class SubUmbrellaCommand extends LoadCommand {
- public int sub_umbrella; /* the sub_umbrella framework name */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class SubLibraryCommand extends LoadCommand {
- public int sub_library; /* the sub_library name */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class PreboundDyLibCommand extends LoadCommand {
- public int name; /* library's path name */
- public int nmodules; /* number of modules in library */
- public int linked_modules; /* bit vector of linked modules */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class DyLinkerCommand extends LoadCommand {
- public int name; /* dynamic linker's path name */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- public class ThreadCommand extends LoadCommand {
- }
-
- public class RoutinesCommand extends LoadCommand {
- public int init_address; /* address of initialization routine */
- public int init_module; /* index into the module table that the init routine is defined in */
- public int reserved1;
- public int reserved2;
- public int reserved3;
- public int reserved4;
- public int reserved5;
- public int reserved6;
- }
-
- public class SymtabCommand extends LoadCommand {
- public int symoff; /* symbol table offset */
- public int nsyms; /* number of symbol table entries */
- public int stroff; /* string table offset */
- public int strsize; /* string table size in bytes */
- }
-
- public class DySymtabCommand extends LoadCommand {
- public int ilocalsym; /* index to local symbols */
- public int nlocalsym; /* number of local symbols */
- public int iextdefsym; /* index to externally defined symbols */
- public int nextdefsym; /* number of externally defined symbols */
- public int iundefsym; /* index to undefined symbols */
- public int nundefsym; /* number of undefined symbols */
- public int tocoff; /* file offset to table of contents */
- public int ntoc; /* number of entries in table of contents */
- public int modtaboff; /* file offset to module table */
- public int nmodtab; /* number of module table entries */
- public int extrefsymoff; /* offset to referenced symbol table */
- public int nextrefsyms; /* number of referenced symbol table entries */
- public int indirectsymoff; /* file offset to the indirect symbol table */
- public int nindirectsyms; /* number of indirect symbol table entries */
- public int extreloff; /* offset to external relocation entries */
- public int nextrel; /* number of external relocation entries */
- public int locreloff; /* offset to local relocation entries */
- public int nlocrel; /* number of local relocation entries */
- }
-
- public class DyLibTableOfContents {
- public final static int INDIRECT_SYMBOL_LOCAL = 0x80000000;
- public final static int INDIRECT_SYMBOL_ABS = 0x40000000;
- public int symbol_index; /* the defined external symbol (index into the symbol table) */
- public int module_index; /* index into the module table this symbol is defined in */
- }
-
- public class DyLibModule {
- public int module_name; /* the module name (index into string table) */
- public int iextdefsym; /* index into externally defined symbols */
- public int nextdefsym; /* number of externally defined symbols */
- public int irefsym; /* index into reference symbol table */
- public int nrefsym; /* number of reference symbol table entries */
- public int ilocalsym; /* index into symbols for local symbols */
- public int nlocalsym; /* number of local symbols */
- public int iextrel; /* index into external relocation entries */
- public int nextrel; /* number of external relocation entries */
- public int iinit_iterm; /* low 16 bits are the index into the init section, high 16 bits are the index into the term section */
- public int ninit_nterm; /* low 16 bits are the number of init section entries, high 16 bits are the number of term section entries */
- public int objc_module_info_addr; /* for this module address of the start of the (__OBJC,__module_info) section */
- public int objc_module_info_size; /* for this module size of the (__OBJC,__module_info) section */
- }
-
- public class DyLibReference {
- public int isym; /* index into the symbol table */
- public int flags; /* flags to indicate the type of reference */
- }
-
- public class TwoLevelHintsCommand extends LoadCommand {
- public int offset; /* offset to the hint table */
- public int nhints; /* number of hints in the hint table */
- public TwoLevelHint[] hints;
- }
-
- public class TwoLevelHint {
- public int isub_image; /* index into the sub images */
- public int itoc; /* index into the table of contents */
- }
-
- public class PrebindCksumCommand extends LoadCommand {
- public int cksum; /* the check sum or zero */
- }
-
- public class SymSegCommand extends LoadCommand {
- public int offset; /* symbol segment offset */
- public int size; /* symbol segment size in bytes */
- }
-
- public class IdentCommand extends LoadCommand {
- }
-
- public class FVMFileCommand extends LoadCommand {
- public int name; /* files pathname */
- public int header_addr; /* files virtual address */
- public String lc_str_name = null;
-
- @Override
- public String toString() {
- if (lc_str_name == null) {
- return EMPTY_STRING;
- }
- return lc_str_name;
- }
- }
-
- private void commonSetup(String file, long offset, boolean filton) throws IOException {
- this.cppFiltEnabled = filton;
-
- try {
- efile = new ERandomAccessFile(file, "r"); //$NON-NLS-1$
- efile.setFileOffset(offset);
- mhdr = new MachOhdr();
- this.file = file;
- } finally {
- if (mhdr == null) {
- dispose();
- }
- }
- }
-
- protected String string_from_macho_symtab(MachO.SymtabCommand symtab, int index) throws IOException {
- if (index > symtab.strsize) {
- return EMPTY_STRING;
- }
- efile.seek(symtab.stroff + index);
- return getCStr();
- }
-
- public class Symbol implements Comparable