Mercurial > hg > Members > menikon > CbC_xv6
diff src/kernel-clang.ld @ 13:f28daf1e47c1
clang-arm
author | mir3636 |
---|---|
date | Fri, 16 Feb 2018 17:44:49 +0900 |
parents | src/kernel.ld@83c23a36980d |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/kernel-clang.ld Fri Feb 16 17:44:49 2018 +0900 @@ -0,0 +1,78 @@ +OUTPUT_FORMAT("elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +ENTRY_SVC_STACK_SIZE = 0x1000; + +SECTIONS +{ + /* the entry point, before enabling paging. The code to enable paing + needs to have the same virtual/physical address. entry.S and start.c + run in this initial setting.*/ + . = 0x10000; + .start_sec : { + build/entry-clang.o(.text) + build/start.o(.text .text.*) + + build/entry-clang.o(.rodata .rodata.*) + build/start.o(.rodata .rodata.*) + + build/entry-clang.o(.data .data.*) + build/start.o(.data .data.*) + + PROVIDE(edata_entry = .); + + build/entry-clang.o(.bss .bss.* COMMON) + build/start.o(.bss .bss.* COMMON) + + /*define a stack for the entry*/ + . = ALIGN(0x1000); + . += ENTRY_SVC_STACK_SIZE; + + PROVIDE (svc_stktop = .); + + /* define the kernel page table, must be 16K and 16K-aligned*/ + . = ALIGN(0x4000); + PROVIDE (_kernel_pgtbl = .); + . += 0x4000; + + /* we also need a user page table*/ + PROVIDE (_user_pgtbl = .); + . += 0x1000; + + PROVIDE(end_entry = .); + } + + /*the kernel executes at the higher 2GB address space, but loaded + at the lower memory (0x20000)*/ + . = 0x80020000; + + .text : AT(0x20000){ + *(.text .text.* .gnu.linkonce.t.*) + } + + PROVIDE(etext = .); /* Define the 'etext' symbol to this value */ + + .rodata : { + *(.rodata .rodata.* .gnu.linkonce.r.*) + } + + /* aligned the data to a (4K) page, so it can be assigned + different protection than the code*/ + . = ALIGN(0x1000); + + PROVIDE (data_start = .); + + .data : { + *(.data .data.*) + } + + PROVIDE (edata = .); + + .bss : { + *(.bss .bss.* COMMON) + } + + . = ALIGN(0x1000); + PROVIDE (end = .); +}