mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-21 16:32:25 +01:00
Make rtld_bind_start() debugger friendly.
Save link register and annotate call frame structure so debugger can unwind call frame created by rtld_bind_start(). MFC after: 2 weeks
This commit is contained in:
parent
81cb170fea
commit
fad101b3f2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=330073
@ -55,7 +55,15 @@ END(.rtld_start)
|
||||
* x17 = &_rtld_bind_start
|
||||
*/
|
||||
ENTRY(_rtld_bind_start)
|
||||
.cfi_startproc
|
||||
mov x17, sp
|
||||
|
||||
/* Save frame pointer and SP */
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
.cfi_def_cfa x29, 16
|
||||
.cfi_offset x30, -8
|
||||
.cfi_offset x29, -16
|
||||
|
||||
/* Save the arguments */
|
||||
stp x0, x1, [sp, #-16]!
|
||||
@ -84,9 +92,6 @@ ENTRY(_rtld_bind_start)
|
||||
/* Call into rtld */
|
||||
bl _rtld_bind
|
||||
|
||||
/* Restore the registers saved by the plt code */
|
||||
ldp xzr, x30, [sp, #(5 * 16 + 4 * 32)]
|
||||
|
||||
/* Backup the address to branch to */
|
||||
mov x16, x0
|
||||
|
||||
@ -100,11 +105,16 @@ ENTRY(_rtld_bind_start)
|
||||
ldp x4, x5, [sp], #16
|
||||
ldp x2, x3, [sp], #16
|
||||
ldp x0, x1, [sp], #16
|
||||
/* And the part of the stack the plt entry handled */
|
||||
add sp, sp, #16
|
||||
|
||||
/* Restore frame pointer */
|
||||
ldp x29, xzr, [sp], #16
|
||||
|
||||
/* Restore link register saved by the plt code */
|
||||
ldp xzr, x30, [sp], #16
|
||||
|
||||
/* Call into the correct function */
|
||||
br x16
|
||||
.cfi_endproc
|
||||
END(_rtld_bind_start)
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user