Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Jul 2023 16:56:22 GMT
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 1a2aa2ffb502 - main - rtld: Clear x29 and lr for thread_start to conform Aarch64 ABI pcs
Message-ID:  <202307071656.367GuM3H013880@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by dchagin:

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

commit 1a2aa2ffb502403dc1f087722d1482c3c6e8d12b
Author:     Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2023-07-07 16:55:43 +0000
Commit:     Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2023-07-07 16:55:43 +0000

    rtld: Clear x29 and lr for thread_start to conform Aarch64 ABI pcs
    
    Strictly speaking, SYS V Aarch64 ABI does not states that lr should be
    cleared, however gdb relies on lr and tryes to unwind stack further.
    
    Reviewed by:
    Differential Revision:  https://reviews.freebsd.org/D40841
---
 sys/arm64/arm64/vm_machdep.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c
index e111995f09b0..7d6e83eb078d 100644
--- a/sys/arm64/arm64/vm_machdep.c
+++ b/sys/arm64/arm64/vm_machdep.c
@@ -223,6 +223,8 @@ cpu_set_upcall(struct thread *td, void (*entry)(void *), void *arg,
 		tf->tf_sp = STACKALIGN((uintptr_t)stack->ss_sp + stack->ss_size);
 	tf->tf_elr = (register_t)entry;
 	tf->tf_x[0] = (register_t)arg;
+	tf->tf_x[29] = 0;
+	tf->tf_lr = 0;
 }
 
 int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307071656.367GuM3H013880>