1
下面的代碼在linker.ld:全局構造的虛擬地址空間
OUTPUT_FORMAT(elf64-x86-64)
ENTRY(start)
HVMA = 0xFFFFFF0000000000;
SECTIONS
{
. = 1M;
_start = . + HVMA;
.init :
{
*(.initl)
}
. += HVMA;
.text ALIGN(0x1000) : AT(ADDR(.text) - HVMA)
{
*(.inith)
*(.text)
}
.data ALIGN(0x1000) : AT(ADDR(.data) - HVMA)
{
start_ctors = .;
*(.ctor*)
end_ctors = .;
start_dtors = .;
*(.dtor*)
end_dtors = .;
*(.data)
}
.rodata ALIGN(0x1000) : AT(ADDR(.rodata) - HVMA)
{
*(.rodata)
}
.bss ALIGN(0x1000) : AT(ADDR(.bss) - HVMA)
{
_sbss = .;
*(COMMON)
*(.bss)
_ebss = .;
}
_end = .;
}
現在,當我嘗試編譯-mcmodel =大,然後用這個鏈接腳本,我得到「搬遷截斷鏈接它的一切在bin/kernel.elf中的.data節中定義符號end_ctors
的R_X86_64_32S「和end_ctors
中的相同。 我不知道爲什麼。我可以以某種方式將它設置爲使用64位地址? -mcmodel = large應該覆蓋這個,不是嗎?
如果你已經回答了你自己的問題,那太棒了!但是,請將答案作爲實際答案,而不是對您的問題進行編輯。這樣,其他人很快就知道這個問題已經得到解答。 – fuz