0
我在GCC鏈接腳本條目,並啓動命令有點困惑。鏈接功能,具體地址
如這裏指出:http://wiki.osdev.org/Linker_Scripts
ENTRY()使要被鏈接作爲.text段的第一項的任何符號。 另一方面,STARTUP()使整個編譯文件作爲第一項放置在.text節中。
在我的項目但是它的表現很奇怪。
我使用GNU-臂無 - EABI工具鏈,在我的鏈接腳本命令輸入(asm_start)沒什麼影響。鏈接腳本:
ENTRY(asm_start)
MEMORY
{
RAM : ORIGIN = 0x10000, LENGTH = 0x1000000
PIC_BUFF : ORIGIN = 0x10000 + LENGTH(RAM), LENGTH = 200M
}
SECTIONS
{
.text : {*(.text)} > RAM
.data : {*(.data)} > PIC_BUFF
// etc.
裝配功能:
.text
.global asm_start
.global exc_stack
.global supervisor_sp
asm_start:
# initialize Stack pointer for exception modes
mrs r4, cpsr
bic r4, r4, #0x1f
#FIQ Mode
orr r3, r4, #0x11
msr cpsr_c, r3
ldr sp, =exc_stack
#IRQ Mode
orr r3, r4, #0x12
msr cpsr_c, r3
// etc.
和asm_start完成在內存一些隨機的地方。
在另一方面STARTUP()函數工作正常,並在.text段適當的位置所需的文件結束。
一些能請解釋一下究竟是什麼在這種情況下發生?
我對此不是100%肯定,但看起來像ENTRY()set是執行時的PC起點,而STARTUP()是.text – xvan
中的第一個鏈接對象哦,這是真的。 「是加載程序的第一個字節(或ELF和PE二進制文件中.text部分的第一個字節)。」但我的程序既不是ELF也不是PE二進制文件。非常感謝。把它作爲答案,我會接受它。 – DawidPi