qemu_noelv.lds 1.31 KB
OUTPUT_ARCH( "riscv" )

ENTRY( _start )
PROVIDE(__bcc_cfg_skip_clear_bss = 0);

MEMORY
{
  ram   (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 1M
  rom   (a!ri) : ORIGIN = 0xc0000000, LENGTH = 1M
}

PHDRS
{
  text PT_LOAD;
  data PT_LOAD;
  bss PT_LOAD;
}

SECTIONS
{
  .text : {
    . = ALIGN(8);
    PROVIDE(_text_start = .);
    *(.text.init) *(.text .text.*)
    PROVIDE(_text_end = .);
  } >ram AT>ram :text

  .rodata : {
    . = ALIGN(8);
    PROVIDE(_rodata_start = .);
    *(.rodata .rodata.*)
    PROVIDE(_rodata_end = .);
  } >ram AT>ram :text

  .data : {
    . = ALIGN(4096);
    __data_start = .;
    __data_start_lma = __data_start;
    __DATA_BEGIN__ = .;
    PROVIDE(_data_start = .);
    *(.sdata .sdata.*) *(.data .data.*)
    PROVIDE(_data_end = .);
    __data_end = .;
  } >ram AT>ram :data

  .sdata : {
    . = ALIGN(8);
  __SDATA_BEGIN__ = .;
    *(.sdata .sdata.*)
  } >ram

  .bss :{
    . = ALIGN(8);
    __bss_start = .;
    PROVIDE(_bss_start = .);
    *(.sbss .sbss.*) *(.bss .bss.*)
    PROVIDE(_bss_end = .);
    __bss_end = .;
    __BSS_END__ = .;
  } >ram AT>ram :bss

  __global_pointer$ = MIN(__SDATA_BEGIN__ + 0x800,
                          MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));
  __heap_min = .;

  PROVIDE(_memory_start = ORIGIN(ram));
  PROVIDE(_memory_end = ORIGIN(ram) + LENGTH(ram));
}