ENTRY(_start); SECTIONS { /* Set the default size of the stack. */ /* */ /* Because the stack will grow down from this point, and if the heap requests memory */ /* being used by the stack then the runtime will panic, this value also functions as */ /* the memory limit for the guest program execution more generally. */ __memory_top = 0x6400000; . = 0; .text : ALIGN(4) { KEEP(*(.init)); . = ALIGN(4); KEEP(*(.init.rust)); *(.text .text.*); } . = ALIGN(8); . = .* 2; .data : ALIGN(4) { /* Must be called __global_pointer$ for linker relaxations to work. */ __global_pointer$ = . + 0x800; *(.srodata .srodata.*); *(.rodata .rodata.*); *(.sdata .sdata.* .sdata2 .sdata2.*); *(.data .data.*); /* this is used by the global allocator (see:src/lib.rs) */ . = ALIGN(4); _heap = .; LONG(_ebss); } .bss (NOLOAD) : ALIGN(4) { *(.sbss .sbss.* .bss .bss.*); . = ALIGN(4); _ebss = .; _end = .; } /* Dynamic relocations are unsupported. This section is only used to detect relocatable code in the input files and raise an error if relocatable code is found */ .got (INFO) : { KEEP(*(.got .got.*)); } /DISCARD/ : { *(.comment*) *(.debug*) } /* Stack unwinding is not supported, but we will keep these for now */ .eh_frame (INFO) : { KEEP(*(.eh_frame)) } .eh_frame_hdr (INFO) : { *(.eh_frame_hdr) } } ASSERT(. < __memory_top, "Program is too large for the VM memory."); ASSERT(SIZEOF(.got) == 0, " .got section detected in the input files. Dynamic relocations are not supported. If you are linking to C code compiled using the `gcc` crate then modify your build script to compile the C code _without_ the -fPIC flag. See the documentation of the `gcc::Config.fpic` method for details.");