aboutsummaryrefslogtreecommitdiffstats
path: root/ldid.cpp
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2022-03-22 08:44:59 -0400
committerGitHub <noreply@github.com>2022-03-22 08:44:59 -0400
commit3af74ef52e975717593db0916c3c8f15e06fc7f0 (patch)
tree3ecb8538ad5567bdca2d7959ffbfdc93cc33b647 /ldid.cpp
parentfc4657fe12a6063ba86dfd67270607d64cbbac18 (diff)
downloadldid-3af74ef52e975717593db0916c3c8f15e06fc7f0.tar.gz
ldid-3af74ef52e975717593db0916c3c8f15e06fc7f0.tar.zst
ldid-3af74ef52e975717593db0916c3c8f15e06fc7f0.zip
Add support for `-arch arch_type` (#10)
This is identical to -A except that it uses the name of the arch not the values of the CPU_TYPE/CPU_SUBTYPE. This makes ldid more compatible with Apple's CC tools where this flag is used extensively. Co-authored-by: Nick Chan <towinchenmi@gmail.com>
Diffstat (limited to 'ldid.cpp')
-rw-r--r--ldid.cpp54
1 files changed, 26 insertions, 28 deletions
diff --git a/ldid.cpp b/ldid.cpp
index 9cea7b8..9881508 100644
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -96,6 +96,8 @@
#include "ldid.hpp"
+#include "machine.h"
+
#define _assert___(line) \
#line
#define _assert__(line) \
@@ -196,29 +198,6 @@ Scope<Function_> _scope(const Function_ &function) {
#define _scope(function) \
_scope_(__COUNTER__, function)
-#define CPU_ARCH_MASK uint32_t(0xff000000)
-#define CPU_ARCH_ABI64 uint32_t(0x01000000)
-#define CPU_ARCH_ABI64_32 uint32_t(0x02000000)
-
-#define CPU_TYPE_ANY uint32_t(-1)
-#define CPU_TYPE_VAX uint32_t( 1)
-#define CPU_TYPE_MC680x0 uint32_t( 6)
-#define CPU_TYPE_X86 uint32_t( 7)
-#define CPU_TYPE_MC98000 uint32_t(10)
-#define CPU_TYPE_HPPA uint32_t(11)
-#define CPU_TYPE_ARM uint32_t(12)
-#define CPU_TYPE_MC88000 uint32_t(13)
-#define CPU_TYPE_SPARC uint32_t(14)
-#define CPU_TYPE_I860 uint32_t(15)
-#define CPU_TYPE_POWERPC uint32_t(18)
-
-#define CPU_TYPE_I386 CPU_TYPE_X86
-
-#define CPU_TYPE_ARM64 (CPU_ARCH_ABI64 | CPU_TYPE_ARM)
-#define CPU_TYPE_POWERPC64 (CPU_ARCH_ABI64 | CPU_TYPE_POWERPC)
-#define CPU_TYPE_X86_64 (CPU_ARCH_ABI64 | CPU_TYPE_X86)
-#define CPU_TYPE_ARM64_32 (CPU_TYPE_ARM | CPU_ARCH_ABI64_32)
-
struct fat_header {
uint32_t magic;
uint32_t nfat_arch;
@@ -3101,10 +3080,11 @@ std::string Hex(const uint8_t *data, size_t size) {
static void usage(const char *argv0) {
fprintf(stderr, "Link Identity Editor %s\n\n", LDID_VERSION);
- fprintf(stderr, "usage: %s [-Acputype:subtype] [-a] [-C[adhoc | enforcement | expires | hard |\n", argv0);
- fprintf(stderr, " host | kill | library-validation | restrict | runtime]] [-D] [-d]\n");
- fprintf(stderr, " [-Enum:file] [-e] [-h] [-Kkey.p12 [-Upassword]] [-M] [-P] [-q]\n");
- fprintf(stderr, " [-r | -Sfile | -s] [-Ttimestamp] [-u] file ...\n\n");
+ fprintf(stderr, "Usage: %s [-Acputype:subtype] [-a] [-C[adhoc | enforcement | expires | hard |\n", argv0);
+ fprintf(stderr, " host | kill | library-validation | restrict | runtime]] [-D] [-d]\n");
+ fprintf(stderr, " [-Enum:file] [-e] [-H[sha1 | sha256]] [-h] [-Iname]\n");
+ fprintf(stderr, " [-Kkey.p12 [-Upassword]] [-M] [-P] [-Qrequirements.xml] [-q]\n");
+ fprintf(stderr, " [-r | -Sfile.xml | -s] [-Ttimestamp] [-u] [-arch arch_type] file ...\n");
fprintf(stderr, "Options:\n");
fprintf(stderr, " -S[file.xml] Pseudo-sign using the entitlements in file.xml\n");
fprintf(stderr, " -Kkey.p12 Sign using private key in key.p12\n");
@@ -3183,7 +3163,25 @@ int main(int argc, char *argv[]) {
for (int argi(1); argi != argc; ++argi)
if (argv[argi][0] != '-')
files.push_back(argv[argi]);
- else switch (argv[argi][1]) {
+ else if (strcmp(argv[argi], "-arch") == 0) {
+ bool foundarch = false;
+ flag_A = true;
+ argi++;
+ for (int i = 0; archs[i].name != NULL; i++) {
+ if (strcmp(archs[i].name, argv[argi]) == 0) {
+ flag_CPUType = archs[i].cputype;
+ flag_CPUSubtype = archs[i].cpusubtype;
+ foundarch = true;
+ }
+ if (foundarch)
+ break;
+ }
+
+ if (!foundarch) {
+ fprintf(stderr, "error: unknown architecture specification flag: -arch %s\n", argv[argi]);
+ exit(1);
+ }
+ } else switch (argv[argi][1]) {
case 'r':
_assert(!flag_s);
_assert(!flag_S);