From 6149e0af3ca21d8ea2a903dd555e6e5c4b6a630a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 21 Mar 2018 14:39:18 +0200 Subject: [librm] Provide symbols for inline code placed into other sections Provide symbols constructed from the object name and line number for code fragments placed into alternative sections, such as inline REAL_CODE() assembly placed into .text16. This simplifies the debugging task of finding the source code corresponding to a given instruction pointer. Note that we cannot use __FUNCTION__ since it is not a preprocessor macro and so cannot be concatenated with string literals. Signed-off-by: Michael Brown --- src/arch/x86/include/librm.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/arch/x86/include/librm.h b/src/arch/x86/include/librm.h index 597c65e6..6bad9c42 100644 --- a/src/arch/x86/include/librm.h +++ b/src/arch/x86/include/librm.h @@ -254,9 +254,13 @@ extern void remove_user_from_rm_stack ( userptr_t data, size_t size ); #define CODE_DEFAULT ".code32" #endif +/* LINE_SYMBOL: declare a symbol for the current source code line */ +#define LINE_SYMBOL _S2 ( OBJECT ) "__line_" _S2 ( __LINE__ ) ":" + /* TEXT16_CODE: declare a fragment of code that resides in .text16 */ #define TEXT16_CODE( asm_code_str ) \ ".section \".text16\", \"ax\", @progbits\n\t" \ + "\n" LINE_SYMBOL "\n\t" \ ".code16\n\t" \ asm_code_str "\n\t" \ CODE_DEFAULT "\n\t" \ @@ -276,6 +280,7 @@ extern void remove_user_from_rm_stack ( userptr_t data, size_t size ); "push $1f\n\t" \ "call phys_call\n\t" \ ".section \".text.phys\", \"ax\", @progbits\n\t"\ + "\n" LINE_SYMBOL "\n\t" \ ".code32\n\t" \ "\n1:\n\t" \ asm_code_str \ -- cgit v1.2.3-55-g7522