gcc汇编器-仅创建必要的最少指令

问题描述 投票:0回答:1

我已经在汇编中创建了一个非常小的应用程序。它将某些寄存器设置为0并进行乘法。没什么。

但是,gcc向我不需要的机器代码中添加了很多东西。

我在objdump中找到的东西的一小列:

  • deregister_tm_clones
  • register_tm_clones
  • __ do_global_dtors_aux
  • frame_dummy
  • __ libc_fini_array
  • memset
  • 还有更多

我知道我不需要它们,但是我不知道如何告诉编译器停止包含它们。我尝试使用优化选项,但这并没有改变任何内容。

我基本上像这样编译它:GCC -o ./main.elf ./main.S

非常感谢您的帮助!

gcc assembly embedded machine-code
1个回答
0
投票

GCC自动链接C / C ++运行时启动crt0.o和标准库。您可以提供自己的启动代码以覆盖默认值,并提供命令行选项以强制其不链接标准库。

控制启动和默认库的选项包括:

-nostartfiles
-nostdlib
-nodefaultlubs
-nolibc

每个都以不同的方式影响链接,但是在这种情况下-nostdlib将同时排除crt0.o和标准库。当然,如果您的代码未引用标准库,则在任何情况下都不会链接任何内容,但是如果某些内容确实引用了它,则明确地将其排除会产生链接错误。

参见:https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[请注意,如果您的代码未建立有效的C运行时环境,例如提供了静态初始化和堆栈(最低要求),则某些C代码可能无法按预期的方式运行。如果您没有使用与crt0相同的默认入口点,则可能还需要通过--entry=entry指定入口点。

© www.soinside.com 2019 - 2024. All rights reserved.