diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index fc8b3b19f10424..62db24fe099e4c 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -1181,11 +1181,6 @@ void InputSectionBase::adjustSplitStackFunctionPrologues(uint8_t *buf, std::vector morestackCalls; for (Relocation &rel : relocations) { - // Local symbols can't possibly be cross-calls, and should have been - // resolved long before this line. - if (rel.sym->isLocal()) - continue; - // Ignore calls into the split-stack api. if (rel.sym->getName().startswith("__morestack")) { if (rel.sym->getName().equals("__morestack")) diff --git a/lld/test/ELF/Inputs/x86-64-split-stack-main.s b/lld/test/ELF/Inputs/x86-64-split-stack-main.s index 3be9facf51e9b7..22874c21e519c6 100644 --- a/lld/test/ELF/Inputs/x86-64-split-stack-main.s +++ b/lld/test/ELF/Inputs/x86-64-split-stack-main.s @@ -6,6 +6,13 @@ non_split: retq .size non_split,. - non_split + .global non_split_hidden + .hidden non_split_hidden + .type non_split_hidden,@function +non_split_hidden: + retq + .size non_split_hidden,. - non_split_hidden + .global non_function_text_symbol non_function_text_symbol: .byte 0x01 diff --git a/lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s b/lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s index 1fce4fdf6b57c2..6205793197cb1f 100644 --- a/lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s +++ b/lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s @@ -111,5 +111,13 @@ prologue2 non_split r10 0x100 prologue2 non_split r11 0x200 +# CHECK: : +# CHECK-NEXT: lea{{.*}} -16896(%rsp),{{.*}}%r11 +# CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r11 +# CHECK: jae{{.*$}} +# CHECK-NEXT: callq{{.*}}<__morestack_non_split> + +prologue2 non_split_hidden r11 0x200 + .section .note.GNU-stack,"",@progbits .section .note.GNU-split-stack,"",@progbits