git: b197af263958 - stable/14 - rtld: add .cfi_undefined lr to rtld_start.S on powerpc*

From: Piotr Kubaj <pkubaj_at_FreeBSD.org>
Date: Thu, 22 Oct 2026 10:40:55 UTC
The branch stable/14 has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/src/commit/?id=b197af2639583792b68a7c45008f77c5be67708f

commit b197af2639583792b68a7c45008f77c5be67708f
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-10-15 13:58:04 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-10-22 10:40:37 +0000

    rtld: add .cfi_undefined lr to rtld_start.S on powerpc*
    
    Without it, LLVM libunwind doesn't know where to stop when unwinding the
    main thread, so it uses a stale LR as the return address and crashes.
    Our libunwind doesn't do that since 5866c369e4fd reverted it, but
    programs that bundle their own copy, like ClickHouse, are hit by it.
    
    amd64, arm64, i386 and riscv already have the same annotation.
    
    Approved by:    jhibbits
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D60740
    
    (cherry picked from commit c4fde87a3236b500246d4fce76dbca2a3d64f73a)
    (cherry picked from commit aaa1abfc0ba6b366ef7fe48f70040f3a5b3e6b0c)
---
 libexec/rtld-elf/powerpc/rtld_start.S   | 1 +
 libexec/rtld-elf/powerpc64/rtld_start.S | 1 +
 2 files changed, 2 insertions(+)

diff --git a/libexec/rtld-elf/powerpc/rtld_start.S b/libexec/rtld-elf/powerpc/rtld_start.S
index e34cc56fc40c..1b432965e8c6 100644
--- a/libexec/rtld-elf/powerpc/rtld_start.S
+++ b/libexec/rtld-elf/powerpc/rtld_start.S
@@ -34,6 +34,7 @@
 .extern _DYNAMIC
 
 _ENTRY(.rtld_start)
+	.cfi_undefined lr
 	stwu    %r1,-48(%r1)	/* 16-byte aligned stack for reg saves +
 				exit_proc & obj _rtld args +
 				backchain & lrsave stack frame */
diff --git a/libexec/rtld-elf/powerpc64/rtld_start.S b/libexec/rtld-elf/powerpc64/rtld_start.S
index 796a41e34601..a5c6cfac8931 100644
--- a/libexec/rtld-elf/powerpc64/rtld_start.S
+++ b/libexec/rtld-elf/powerpc64/rtld_start.S
@@ -33,6 +33,7 @@
 .extern _DYNAMIC
 
 _ENTRY(_rtld_start)
+	.cfi_undefined lr
 	stdu    %r1,-144(%r1)	/* 16-byte aligned stack for reg saves +
 				exit_proc & obj _rtld args +
 				backchain & lrsave stack frame */