将符号名称放入C

时间:2018-10-24 15:16:33

标签: c assembly automation macros linker

我已经成功地产生了一个汇编器宏,该宏用于实例化汇编源文件中的32个独立例程。例程遵循目标系统ABI。它们的导出符号名称几乎都相同,除了后缀数字后缀。这是从汇编的目标文件中提取的符号(省略号表示连续模式)。

$ nm default_handler.o | sort
...
00000058 T exception_default_handler_5
0000005f T exception_default_handler_6
00000066 T exception_default_handler_7
0000006d T exception_default_handler_8
00000072 T exception_default_handler_9
00000079 T exception_default_handler_10
0000007e T exception_default_handler_11
00000083 T exception_default_handler_12
00000088 T exception_default_handler_13
...

我也有一个C程序,我需要在其中引用每个单独的例程。在C程序的某些部分,我需要一次引用所有的汇编例程,以将每个例程的指针存储在数组中。这是理解我的问题所需的必要代码(用省略号表示一个连续的模式)。该代码执行上述任务。

{
    ...
    extern void exception_default_handler_5(void);
    extern void exception_default_handler_6(void);
    extern void exception_default_handler_7(void);
    ...

    ...
    array[5] = exception_default_handler_5;
    array[6] = exception_default_handler_6;
    array[7] = exception_default_handler_7;
    ...
}

使用这种方法的64行;始终编​​写可读且可维护的代码的编码黄金法则显然已被破坏。我想要的是一种自动执行此过程的方法,该过程做出外部前向声明并将其实例放置在数组中,以最大程度地减少重复代码时必然发生的错误。

我认为这可能是C宏的工作,但我想不出一种方法来处理它们。

有什么想法吗?

0 个答案:

没有答案