diff options
Diffstat (limited to 'zkvms/nexus/guest/guest.ld')
| -rw-r--r-- | zkvms/nexus/guest/guest.ld | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/zkvms/nexus/guest/guest.ld b/zkvms/nexus/guest/guest.ld new file mode 100644 index 0000000..5a4dd4a --- /dev/null +++ b/zkvms/nexus/guest/guest.ld @@ -0,0 +1,73 @@ +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."); |
