mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-30 12:04:07 +00:00
Insert STOP_UNWINDING directives in the _start (kernel entry point) and
fork_trampoline (thread entry point) assembler routines, because it's not possible to unwind beyond those points. Also insert STOP_UNWINDING in the exception_exit routine, to prevent an unwind-loop at that point. This is just a stopgap until we get around to instrumenting all assembler functions with proper unwind metadata.
This commit is contained in:
parent
abf29ad1a4
commit
506bb6751c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=250253
@ -196,15 +196,20 @@ END(address_exception_entry)
|
||||
* Interrupts are disabled at suitable points to avoid ASTs
|
||||
* being posted between testing and exit to user mode.
|
||||
*
|
||||
* This function uses PULLFRAMEFROMSVCANDEXIT and
|
||||
* DO_AST
|
||||
* only be called if the exception handler used PUSHFRAMEINSVC
|
||||
* This function uses PULLFRAMEFROMSVCANDEXIT and DO_AST and can
|
||||
* only be called if the exception handler used PUSHFRAMEINSVC.
|
||||
*
|
||||
* For EABI, don't try to unwind any further than this. This is a
|
||||
* stopgap measure to avoid getting stuck in a loop in the unwinder,
|
||||
* which happens because we don't yet provide the proper unwind info
|
||||
* here that describes which registers are being restored.
|
||||
*/
|
||||
|
||||
exception_exit:
|
||||
ASENTRY_NP(exception_exit)
|
||||
STOP_UNWINDING
|
||||
DO_AST
|
||||
PULLFRAMEFROMSVCANDEXIT
|
||||
END(exception_exit)
|
||||
|
||||
/*
|
||||
* undefined_entry:
|
||||
|
@ -77,6 +77,8 @@ __FBSDID("$FreeBSD$");
|
||||
*/
|
||||
ENTRY_NP(btext)
|
||||
ASENTRY_NP(_start)
|
||||
STOP_UNWINDING /* Can't unwind into the bootloader! */
|
||||
|
||||
mov r9, r0 /* 0 or boot mode from boot2 */
|
||||
mov r8, r1 /* Save Machine type */
|
||||
mov ip, r2 /* Save meta data */
|
||||
|
@ -540,6 +540,7 @@ ENTRY(savectx)
|
||||
END(savectx)
|
||||
|
||||
ENTRY(fork_trampoline)
|
||||
STOP_UNWINDING /* Can't unwind beyond the thread enty point */
|
||||
mov r1, r5
|
||||
mov r2, sp
|
||||
mov r0, r4
|
||||
|
Loading…
Reference in New Issue
Block a user