-
Notifications
You must be signed in to change notification settings - Fork 170
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libdrgn: orc_info: prefer ORC stack switching entries over DWARF CFI
We have a longstanding issue where stack unwinding will stop at an interrupt handler frame on x86-64. This is because since Linux 5.12, interrupt handlers switch to the IRQ stack using inline assembly without providing CFI directives. Luckily, ORC can unwind this correctly, and we can recognize the ORC entries that encode this stack switch and prefer to use them over DWARF CFI. To do so, we need to identify these entries (there seem to be < 100), store their address ranges in a lookup table, and check that table to decide whether to try ORC or DWARF CFI first. We can use the same table to handle the DRGN_PREFER_ORC_UNWINDER environment variable setting. Fixes #304. Signed-off-by: Omar Sandoval <[email protected]>
- Loading branch information
Showing
8 changed files
with
155 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters