ENTRY(cpu_primary_start_32)

MEMORY
{
    /* Low 1MB of memory for secondary processor start-up */
    lowram  :   ORIGIN = 0, LENGTH = CONFIG_LOW_RAM_SIZE

    /* 32 MBytes of RAM for HV */
    ram     :   ORIGIN = CONFIG_HV_RAM_START, LENGTH = CONFIG_HV_RAM_SIZE
}

SECTIONS
{
    .boot :
    {
        _ld_ram_start = . ;
        KEEP(*(multiboot_header)) ;
    } > ram

    .entry :
    {
        KEEP(*(entry)) ;

    } > ram

    .text :
    {
        *(.text .text*) ;
        *(.gnu.linkonce.t*)
        *(.note.gnu.build-id)
        *(.retpoline_thunk)
    } > ram

    .rodata :
    {
        *(.rodata*) ;

    } > ram

	.rela :
	{
		*(.rela*)
		*(.dyn*)
	} > ram

	. = ALIGN(4) ;
    ld_trampoline_load = .;

    .trampoline : AT (ld_trampoline_load)
    {
        ld_trampoline_start = .;
        *(.trampoline_reset);
        . = ALIGN(4);
        ld_trampoline_end = .;

    } > lowram

    ld_trampoline_size = ld_trampoline_end - ld_trampoline_start;

    .data (ld_trampoline_load + ld_trampoline_size):
    {
        *(.data) ;
        *(.data*) ;
        *(.sdata)
        *(.gnu.linkonce.d*)

    } > ram

    .bss_noinit (NOLOAD):
    {
	. = ALIGN(4) ;
	*(.bss_noinit) ;
	*(.bss_noinit*) ;
	. = ALIGN(4) ;
    } > ram

    .bss (NOLOAD):
    {
        . = ALIGN(4) ;
        ld_bss_start = . ;
        *(.bss) ;
        *(.bss*) ;
        *(COMMON) ;
        . = ALIGN(4) ;
        ld_bss_end = . ;
    } > ram

    _ld_ram_size = LENGTH(ram) ;
    _ld_ram_end = _ld_ram_size + _ld_ram_start ;
}
