Files
failnix/targets/linker.ld

200 lines
5.2 KiB
Plaintext

/* Kernel entry function */
ENTRY(_start)
OUTPUT_FORMAT(elf32-i386)
SECTIONS {
/DISCARD/ : {
*(".text.inlined*")
*(.comment)
*(.eh_frame)
*(.note.gnu.build-id)
}
/* Set kernel start address */
. = 0x100000;
/* Code and readonly data */
.text : {
/* fill gaps with int3 opcode to detect invalid jumps */
FILL(0xcc)
/* multiboot header */
multiboot_header = .;
KEEP (*(".rodata.multiboot"))
/* /\* fixed address for IRQ handlers *\/ */
/* . = 0x1000; */
/* /\* start of interrupt handlers *\/ */
/* _stext_irqs = .; */
/* /\* IRQ Handlers *\/ */
/* KEEP (*(".text.irqhandlers*")) /\* ASM *\/ */
/* KEEP (*(".text.irq_handler*")) /\* C *\/ */
/* *(".text.isrs*") /\* C *\/ */
/* *(".text.isr_*") /\* C *\/ */
/* KEEP (*(".text.OSEKOS_ISR*")) */
/* KEEP (*(".text.idt")) /\* ASM *\/ */
/* /\* sysenter handler *\/ */
/* KEEP (*(".text.sysenter_syscall")) */
/* _etext_irqs = .; */
/* . += 16; /\* padding after data, workaround for import-trace *\/ */
KEEP (*(".text.startup"))
/* place before .text, otherwise they'll be caught by the wildcard */
/* AOT binary array */
_wamr_aot_start = .;
*(".text.wamr_aot")
_wamr_aot_end = .;
/* The mmap_space memory used by os_mmap in baremetal platform */
_wamr_mmap_start = .;
*(".text.wamr_mmap")
_wamr_mmap_end = .;
/* The runtime memory pool used by Alloc_With_Usage */
_wamr_runtime_pool_start = .;
*(".text.wamr_runtime_pool")
_wamr_runtime_pool_end = .;
/* The linear memory pool used by Alloc_With_Usage */
_wamr_linear_pool_start = .;
*(".text.wamr_linear_pool")
_wamr_linear_pool_end = .;
/* The memory pool used by Alloc_With_Pool */
_wamr_global_heap_start = .;
*(".text.wamr_global_heap")
_wamr_global_heap_end = .;
/*
The libiwasm.a contains the following objects:
aot_intrinsic.c.obj
aot_loader.c.obj
aot_reloc_x86_32.c.obj
aot_runtime.c.obj
bh_assert.c.obj
bh_bitmap.c.obj
bh_common.c.obj
bh_hashmap.c.obj
bh_leb128.c.obj
bh_list.c.obj
bh_log.c.obj
bh_queue.c.obj
bh_vector.c.obj
ems_alloc.c.obj
ems_gc.c.obj
ems_hmu.c.obj
ems_kfc.c.obj
invokeNative_ia32.s.obj
libc_builtin_wrapper.c.obj
mem_alloc.c.obj
platform_init.c.obj
runtime_timer.c.obj
wasm_application.c.obj
wasm_blocking_op.c.obj
wasm_c_api.c.obj
wasm_exec_env.c.obj
wasm_interp_classic.c.obj
wasm_loader.c.obj
wasm_loader_common.c.obj
wasm_memory.c.obj
wasm_native.c.obj
wasm_runtime.c.obj
wasm_runtime_common.c.obj
wasm_shared_memory.c.obj
*/
/* Put the .text section from aot_runtime.c.obj from libiwasm.a here */
_iwasm_aot_runtime_start = .;
*aot_runtime.c.obj(.text .text.*)
_iwasm_aot_runtime_end = .;
/* Put the utility library here */
_iwasm_bh_start = .;
*bh_*.c.obj(.text .text.*)
_iwasm_bh_end = .;
/* Put the allocator here */
_iwasm_mem_alloc_start = .;
*mem_alloc.c.obj(.text .text.*)
_iwasm_mem_alloc_end = .;
/* Put the baremetal platform here */
_iwasm_platform_init_start = .;
*platform_init.c.obj(.text .text.*)
_iwasm_platform_init_end = .;
/* Put the exec_env here */
_iwasm_exec_env_start = .;
*wasm_exec_env.c.obj(.text .text.*)
_iwasm_exec_env_end = .;
/* Put the classic interpreter here */
_iwasm_interp_classic_start = .;
*wasm_interp_classic.c.obj(.text .text.*)
_iwasm_interp_classic_end = .;
/* Put the wasm memory here */
_iwasm_memory_start = .;
*wasm_memory.c.obj(.text .text.*)
_iwasm_memory_end = .;
/* Put the wasm native here */
_iwasm_native_start = .;
*wasm_native.c.obj(.text .text.*)
_iwasm_native_end = .;
/* Put the wasm runtime here */
_iwasm_runtime_start = .;
*wasm_runtime.c.obj(.text .text.*)
*wasm_runtime_common.c.obj(.text .text.*)
_iwasm_runtime_end = .;
_text_start = .;
*(".text*")
_text_end = .;
*(".rodata*")
}
/* Data and Stacks */
/* NOTE: When including the WAMR mmap region inside .text, it has to be large */
/* . = 0x200000; */
. = ALIGN(4096);
.data : {
KEEP (*(".startup_stack"))
KEEP (*(".kernel_stack"))
*(".data*")
}
/* Uninitialized data */
.bss : {
_sbss = .;
*(.bss*)
*(COMMON)
_ebss = .;
}
/* Align and mark end of all sections — heap starts here */
. = ALIGN(4096);
_end = .;
/* Memory-mapped I/O APIC */
_sioapic = 0xFEC00000;
ioapic = 0xFEC00000;
_eioapic = 0xFEC00FFF;
/* Memory-mapped Local APIC */
_slapic = 0xFEE00000;
lapic = 0xFEE00000;
_elapic = 0xFEE00FFF;
}