From: Fangrui Song Date: Wed, 19 Jan 2022 20:25:01 +0000 (-0800) Subject: [ELF] Fix split-stack caller with hidden non-split-stack callee X-Git-Tag: upstream/15.0.7~19872 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5bd38a2826b1360ff41c293bcc6cdec8b596810b;p=platform%2Fupstream%2Fllvm.git [ELF] Fix split-stack caller with hidden non-split-stack callee Fix a regression after aabe901d57d6df4cd2786163359a7b2a7aae8c32 (`[ELF] Remove one redundant computeBinding`): isLocal() does not indicate that the symbol is originally local. For simplicity, just drop this optimization. --- diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index fc8b3b1..62db24f 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 3be9fac..22874c2 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 1fce4fd..6205793 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