diff --git a/lld/MachO/SyntheticSections.cpp b/lld/MachO/SyntheticSections.cpp --- a/lld/MachO/SyntheticSections.cpp +++ b/lld/MachO/SyntheticSections.cpp @@ -796,16 +796,25 @@ void FunctionStartsSection::finalizeContents() { raw_svector_ostream os{contents}; std::vector addrs; - for (const Symbol *sym : symtab->getSymbols()) { - if (const auto *defined = dyn_cast(sym)) { - if (!defined->isec || !isCodeSection(defined->isec) || !defined->isLive()) - continue; - if (const auto *concatIsec = dyn_cast(defined->isec)) - if (concatIsec->shouldOmitFromOutput()) + + for (const InputFile *file : inputFiles) { + if (auto *objFile = dyn_cast(file)) { + for (const Symbol *sym : objFile->symbols) { + if (!sym) 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()); + if (const auto *defined = dyn_cast(sym)) { + if (!defined->isec || !isCodeSection(defined->isec) || + !defined->isLive()) + continue; + if (const auto *concatIsec = + dyn_cast(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()); + } + } } } llvm::sort(addrs); diff --git a/lld/test/MachO/function-starts.s b/lld/test/MachO/function-starts.s --- a/lld/test/MachO/function-starts.s +++ b/lld/test/MachO/function-starts.s @@ -41,6 +41,19 @@ # 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/objc.s -o %t/objc.o +# RUN: %lld -lSystem %t/objc.o -o %t/objc +# RUN: llvm-objdump --syms %t/objc > %t/objdump +# RUN: llvm-objdump --macho --function-starts %t/objc >> %t/objdump +# RUN: FileCheck %s --check-prefix=OBJC < %t/objdump + +# OBJC-LABEL: SYMBOL TABLE: +# OBJC-NEXT: [[#%x,F1:]] l F __TEXT,__text +[Foo bar] +# OBJC-NEXT: [[#%x,F2:]] g F __TEXT,__text _main +# OBJC-LABEL: objc: +# OBJC: [[#F1]] +# OBJC: [[#F2]] + #--- basic.s .section __TEXT,__text,regular,pure_instructions .globl _f1 @@ -62,3 +75,12 @@ retq _main: retq + +#--- objc.s +.section __TEXT,__text +"+[Foo bar]": + retq + +.globl _main +_main: + retq