From 5bd38a2826b1360ff41c293bcc6cdec8b596810b Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 19 Jan 2022 12:25:01 -0800 Subject: [PATCH] [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. --- lld/ELF/InputSection.cpp | 5 ----- lld/test/ELF/Inputs/x86-64-split-stack-main.s | 7 +++++++ lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s | 8 ++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index fc8b3b19f104..62db24fe099e 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 3be9facf51e9..22874c21e519 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 1fce4fdf6b57..6205793197cb 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