Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为导出命令模式使用GCC LD原生的段起止点符号 #175

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

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