diff --git a/core/org.eclipse.cdt.core/.settings/.api_filters b/core/org.eclipse.cdt.core/.settings/.api_filters
index 4473bcd9f6c..dff36c18149 100644
--- a/core/org.eclipse.cdt.core/.settings/.api_filters
+++ b/core/org.eclipse.cdt.core/.settings/.api_filters
@@ -26,4 +26,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
index d94f7a71079..90e2115453b 100644
--- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.core; singleton:=true
-Bundle-Version: 9.1.100.qualifier
+Bundle-Version: 9.2.0.qualifier
Bundle-Activator: org.eclipse.cdt.core.CCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO64.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO64.java
index c75d28b33f3..01508b2a602 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO64.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/MachO64.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2024 QNX Software Systems and others.
+ * Copyright (c) 2000, 2025 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -13,6 +13,7 @@
* Craig Watson.
* Apple Computer - work on performance optimizations
* Alexander Fedorov (ArSysOp) - fix resource leak (#693)
+ * John Dallaway - extend load command support (#1204)
*******************************************************************************/
package org.eclipse.cdt.utils.macho;
@@ -29,6 +30,7 @@ import org.eclipse.cdt.core.ISymbolReader;
import org.eclipse.cdt.utils.CPPFilt;
import org.eclipse.cdt.utils.debug.stabs.StabConstant;
import org.eclipse.cdt.utils.debug.stabs.StabsReader;
+import org.eclipse.core.runtime.ILog;
/**
* @since 5.2
@@ -75,6 +77,10 @@ public class MachO64 implements AutoCloseable {
public final static int CPU_TYPE_X86_64 = (CPU_TYPE_X86 | CPU_ARCH_ABI64);
public final static int CPU_TYPE_MC98000 = 10;
public final static int CPU_TYPE_HPPA = 11;
+ /** @since 9.2 */
+ public final static int CPU_TYPE_ARM = 12;
+ /** @since 9.2 */
+ public final static int CPU_TYPE_ARM64 = (CPU_TYPE_ARM | CPU_ARCH_ABI64);
public final static int CPU_TYPE_MC88000 = 13;
public final static int CPU_TYPE_SPARC = 14;
public final static int CPU_TYPE_I860 = 15;
@@ -362,11 +368,27 @@ public class MachO64 implements AutoCloseable {
public final static int LC_SEGMENT_64 = 0x19;
public final static int LC_ROUTINES_64 = 0x1a;
public final static int LC_UUID = 0x1b;
+ /** @since 9.2 */
+ public final static int LC_CODE_SIGNATURE = 0x1d;
+ /** @since 9.2 */
+ public final static int LC_FUNCTION_STARTS = 0x26;
+ /** @since 9.2 */
+ public final static int LC_DATA_IN_CODE = 0x29;
+ /** @since 9.2 */
+ public final static int LC_SOURCE_VERSION = 0x2a;
+ /** @since 9.2 */
+ public final static int LC_BUILD_VERSION = 0x32;
/*
* 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);
+ /** @since 9.2 */
+ public final static int LC_MAIN = (0x28 | LC_REQ_DYLD);
+ /** @since 9.2 */
+ public final static int LC_DYLD_EXPORTS_TRIE = (0x33 | LC_REQ_DYLD);
+ /** @since 9.2 */
+ public final static int LC_DYLD_CHAINED_FIXUPS = (0x34 | LC_REQ_DYLD);
public int cmd;
public int cmdsize;
@@ -1104,6 +1126,12 @@ public class MachO64 implements AutoCloseable {
}
switch (mhdr.cputype) {
+ case MachO64.MachOhdr.CPU_TYPE_ARM:
+ attrib.cpu = "arm"; //$NON-NLS-1$
+ break;
+ case MachO64.MachOhdr.CPU_TYPE_ARM64:
+ attrib.cpu = "aarch64"; //$NON-NLS-1$
+ break;
case MachO64.MachOhdr.CPU_TYPE_X86_64:
attrib.cpu = "x86_64"; //$NON-NLS-1$
break;
@@ -1458,6 +1486,7 @@ public class MachO64 implements AutoCloseable {
loadcommands[i] = sscmd;
break;
+ case LoadCommand.LC_MAIN:
case LoadCommand.LC_THREAD:
case LoadCommand.LC_UNIXTHREAD:
ThreadCommand thcmd = new ThreadCommand();
@@ -1660,6 +1689,7 @@ public class MachO64 implements AutoCloseable {
tlhcmd.nhints = efile.readIntE();
loadcommands[i] = tlhcmd;
break;
+
case LoadCommand.LC_UUID:
MachUUID uuidCmd = new MachUUID();
uuidCmd.cmd = cmd;
@@ -1669,6 +1699,7 @@ public class MachO64 implements AutoCloseable {
uuidCmd.uuid = new String(uuid, 0, 16);
loadcommands[i] = uuidCmd;
break;
+
case LoadCommand.LC_PREBIND_CKSUM:
PrebindCksumCommand pbccmd = new PrebindCksumCommand();
pbccmd.cmd = cmd;
@@ -1677,12 +1708,29 @@ public class MachO64 implements AutoCloseable {
loadcommands[i] = pbccmd;
break;
+ case LoadCommand.LC_BUILD_VERSION:
+ case LoadCommand.LC_CODE_SIGNATURE:
+ case LoadCommand.LC_DATA_IN_CODE:
+ case LoadCommand.LC_DYLD_CHAINED_FIXUPS:
+ case LoadCommand.LC_DYLD_EXPORTS_TRIE:
+ case LoadCommand.LC_FUNCTION_STARTS:
+ case LoadCommand.LC_SOURCE_VERSION:
+ // known load commands we ignore
+ LoadCommand misccmd = new LoadCommand();
+ misccmd.cmd = cmd;
+ misccmd.cmdsize = len;
+ loadcommands[i] = misccmd;
+ efile.skipBytes(len - 8);
+ break;
+
default:
- // fallback, just in case we don't recognize the command
+ // unknown load command
UnknownCommand unknowncmd = new UnknownCommand();
unknowncmd.cmd = cmd;
- unknowncmd.cmdsize = 0;
+ unknowncmd.cmdsize = len;
loadcommands[i] = unknowncmd;
+ efile.skipBytes(len - 8);
+ ILog.get().warn(String.format("Mach-O load command 0x%x not handled", cmd)); //$NON-NLS-1$
break;
}
}