]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[librm] Provide symbols for inline code placed into other sections
authorMichael Brown <mcb30@ipxe.org>
Wed, 21 Mar 2018 12:39:18 +0000 (14:39 +0200)
committerMichael Brown <mcb30@ipxe.org>
Wed, 21 Mar 2018 12:44:04 +0000 (14:44 +0200)
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>
src/arch/x86/include/librm.h

index 597c65e6af6d58baf4ca64a58e8a1c6ffdbf9754..6bad9c42b631bba6d86af2502ecebb9a00fa7f34 100644 (file)
@@ -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                                    \