Skip to content

Conversation

@RigoLigoRLC
Copy link

LD会为每个能生成为合法C符号名的段生成__start_段名__stop_段名的符号,借此可以实现不需修改ldscript的导出命令模式。

参考:https://stackoverflow.com/questions/16552710/how-do-you-get-the-start-and-end-addresses-of-a-custom-elf-section

效果:
LetterShellGCC

LD会为每个能生成为合法C符号名的段生成`__start_段名`和`__stop_段名`的符号,借此可以实现不需修改ldscript的导出命令模式。

参考:https://stackoverflow.com/questions/16552710/how-do-you-get-the-start-and-end-addresses-of-a-custom-elf-section
@NevermindZZT
Copy link
Owner

嵌入式有些基于 gcc 的工具链不一定支持这个特性,比如说在 esp32 的工具链,就无法引用到这两个变量

@RigoLigoRLC
Copy link
Author

嵌入式有些基于 gcc 的工具链不一定支持这个特性,比如说在 esp32 的工具链,就无法引用到这两个变量

https://gcc-help.gcc.gnu.narkive.com/Uol4UzRx/figuring-out-start-and-end-of-sections

这个串指出至少14年前的LD就已经支持使用__start_段名确定段的起始。除非ESP32不使用GNU链接器(显然并不是),或者给出具体实例,否则我没有理由相信ESP32使用的GCC不能支持这种用法

@NevermindZZT
Copy link
Owner

嵌入式有些基于 gcc 的工具链不一定支持这个特性,比如说在 esp32 的工具链,就无法引用到这两个变量

https://gcc-help.gcc.gnu.narkive.com/Uol4UzRx/figuring-out-start-and-end-of-sections

这个串指出至少14年前的LD就已经支持使用__start_段名确定段的起始。除非ESP32不使用GNU链接器(显然并不是),或者给出具体实例,否则我没有理由相信ESP32使用的GCC不能支持这种用法

我用 esp32 的工程实际验证过的,或者还有一种方法,这两个变量名换了,如果不支持这个特性的编译链,就需要去修改 ld, 支持这个特性的就可以直接用了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants