首页 > 解决方案 > 将符号名称输入 C

问题描述

我已经成功地生成了一个汇编器宏,我用它来在汇编源文件中实例化 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 宏的一项工作,但我无法找到一种方法来处理它们。

有什么想法吗?

标签: cassemblyautomationmacroslinker

解决方案


推荐阅读