[PATCH] D114275: [lld-macho] Include Objective-C functions in LC_FUNCTION_STARTS
Keith Smiley via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 19 16:43:52 PST 2021
keith updated this revision to Diff 388664.
keith marked 2 inline comments as done.
keith added a comment.
Improve logic and test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114275/new/
https://reviews.llvm.org/D114275
Files:
lld/MachO/SyntheticSections.cpp
lld/test/MachO/function-starts.s
Index: lld/test/MachO/function-starts.s
===================================================================
--- lld/test/MachO/function-starts.s
+++ lld/test/MachO/function-starts.s
@@ -41,6 +41,21 @@
# RUN: llvm-objdump --macho --function-starts %t/basic >> %t/objdump
# RUN: FileCheck %s --check-prefix=BASIC < %t/objdump
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/local.s -o %t/local.o
+# RUN: %lld -lSystem %t/local.o -o %t/local
+# RUN: llvm-objdump --syms %t/local > %t/objdump
+# RUN: llvm-objdump --macho --function-starts %t/local >> %t/objdump
+# RUN: FileCheck %s --check-prefix=LOCAL < %t/objdump
+
+# LOCAL-LABEL: SYMBOL TABLE:
+# LOCAL-NEXT: [[#%x,F1:]] l F __TEXT,__text +[Foo bar]
+# LOCAL-NEXT: [[#%x,F2:]] l F __TEXT,__text _foo
+# LOCAL: [[#%x,F3:]] g F __TEXT,__text _main
+# LOCAL-LABEL: local:
+# LOCAL: [[#F1]]
+# LOCAL: [[#F2]]
+# LOCAL: [[#F3]]
+
#--- basic.s
.section __TEXT,__text,regular,pure_instructions
.globl _f1
@@ -62,3 +77,15 @@
retq
_main:
retq
+
+#--- local.s
+.section __TEXT,__text
+"+[Foo bar]":
+ retq
+
+_foo:
+ retq
+
+.globl _main
+_main:
+ retq
Index: lld/MachO/SyntheticSections.cpp
===================================================================
--- lld/MachO/SyntheticSections.cpp
+++ lld/MachO/SyntheticSections.cpp
@@ -796,16 +796,19 @@
void FunctionStartsSection::finalizeContents() {
raw_svector_ostream os{contents};
std::vector<uint64_t> addrs;
- for (const Symbol *sym : symtab->getSymbols()) {
- if (const auto *defined = dyn_cast<Defined>(sym)) {
- if (!defined->isec || !isCodeSection(defined->isec) || !defined->isLive())
- continue;
- if (const auto *concatIsec = dyn_cast<ConcatInputSection>(defined->isec))
- if (concatIsec->shouldOmitFromOutput())
- continue;
- // TODO: Add support for thumbs, in that case
- // the lowest bit of nextAddr needs to be set to 1.
- addrs.push_back(defined->getVA());
+
+ for (const InputFile *file : inputFiles) {
+ if (auto *objFile = dyn_cast<ObjFile>(file)) {
+ for (const Symbol *sym : objFile->symbols) {
+ if (const auto *defined = dyn_cast_or_null<Defined>(sym)) {
+ if (!defined->isec || !isCodeSection(defined->isec) ||
+ !defined->isLive())
+ continue;
+ // TODO: Add support for thumbs, in that case
+ // the lowest bit of nextAddr needs to be set to 1.
+ addrs.push_back(defined->getVA());
+ }
+ }
}
}
llvm::sort(addrs);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114275.388664.patch
Type: text/x-patch
Size: 2553 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211120/03a6d2e7/attachment.bin>
More information about the llvm-commits
mailing list