【发布时间】:2016-07-18 08:24:46
【问题描述】:
这几天我在学习linux启动代码,但是有个小问题困扰着我。
setup.c:
unsigned int __atags_pointer __initdata;
head-common.S
.align 2
.type __mmap_switched_data, %object
__mmap_switched_data:
.long __data_loc @ r4
.long _sdata @ r5
.long __bss_start @ r6
.long _end @ r7
.long processor_id @ r4
.long __machine_arch_type @ r5
.long __atags_pointer @ r6
.long cr_alignment @ r7
.long init_thread_union + THREAD_START_SP @ sp
.size __mmap_switched_data, . - __mmap_switched_data
head-common.S 中的.long __atags_pointer @ r6 行在没有任何声明的情况下调用setup.c 中的全局变量,
比如.global __atags_pointer。为什么会起作用?
【问题讨论】:
-
因为 GNU 程序集不是 C 或任何其他程序集方言?我不确定除了“因为that's just how it is.”之外还有很多答案
-
据我所知,一般情况下,GNU汇编语言在调用C文件全局变量时都会进行声明。
-
嗯?正如文档所说,甚至没有声明这样的东西。任何没有本地定义的引用符号都只是假定是外部的;仅此而已。
标签: c linux arm gnu-assembler