mirror of https://github.com/ipxe/ipxe.git
[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 <mcb30@ipxe.org>pull/71/head
parent
0600ffeb30
commit
6149e0af3c
|
@ -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 \
|
||||
|
|
Loading…
Reference in New Issue