From b1c3c2e4fc219c23e311fe56d8687fdf6bba3c89 Mon Sep 17 00:00:00 2001 From: Jez Ng Date: Mon, 10 May 2021 15:45:20 -0400 Subject: [PATCH] [lld-macho] Fix order file arch filtering We had a hardcoded check and a stale TODO, written back when we only had support for one architecture. Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D102154 --- lld/MachO/Driver.cpp | 9 ++++----- lld/MachO/InputFiles.cpp | 2 +- lld/MachO/Target.h | 2 +- lld/test/MachO/order-file.s | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index 00c9b41..a5d7485 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -421,13 +421,13 @@ static void parseOrderFile(StringRef path) { .StartsWith("ppc:", CPU_TYPE_POWERPC) .StartsWith("ppc64:", CPU_TYPE_POWERPC64) .Default(CPU_TYPE_ANY); + + if (cpuType != CPU_TYPE_ANY && cpuType != target->cpuType) + continue; + // Drop the CPU type as well as the colon if (cpuType != CPU_TYPE_ANY) line = line.drop_until([](char c) { return c == ':'; }).drop_front(); - // TODO: Update when we extend support for other CPUs - if (cpuType != CPU_TYPE_ANY && cpuType != CPU_TYPE_X86_64 && - cpuType != CPU_TYPE_ARM64) - continue; constexpr std::array fileEnds = {".o:", ".o):"}; for (StringRef fileEnd : fileEnds) { @@ -869,7 +869,6 @@ bool macho::link(ArrayRef argsArr, bool canExitEarly, errorHandler().logName = args::getFilenameWithoutExe(argsArr[0]); stderrOS.enable_colors(stderrOS.has_colors()); - // TODO: Set up error handler properly, e.g. the errorLimitExceededMsg MachOOptTable parser; InputArgList args = parser.parse(argsArr.slice(1)); diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp index bab2a7b..26230a0 100644 --- a/lld/MachO/InputFiles.cpp +++ b/lld/MachO/InputFiles.cpp @@ -222,7 +222,7 @@ Optional macho::readFile(StringRef path) { return None; } - if (read32be(&arch[i].cputype) != target->cpuType || + if (read32be(&arch[i].cputype) != static_cast(target->cpuType) || read32be(&arch[i].cpusubtype) != target->cpuSubtype) continue; diff --git a/lld/MachO/Target.h b/lld/MachO/Target.h index eb34c45..9141dcc 100644 --- a/lld/MachO/Target.h +++ b/lld/MachO/Target.h @@ -70,7 +70,7 @@ public: } uint32_t magic; - uint32_t cpuType; + llvm::MachO::CPUType cpuType; uint32_t cpuSubtype; uint64_t pageZeroSize; diff --git a/lld/test/MachO/order-file.s b/lld/test/MachO/order-file.s index c185572..63dfca1 100644 --- a/lld/test/MachO/order-file.s +++ b/lld/test/MachO/order-file.s @@ -127,7 +127,7 @@ x86_64:-[Foo doFoo:andBar:] _main #--- ord-arch-nomatch -ppc:-[Foo doFoo:andBar:] +arm64:-[Foo doFoo:andBar:] _main -[Foo doFoo:andBar:] -- 2.7.4