INCLUDE bern_user.x SECTIONS { /* By default static variabled will be placed in .data or .bss. These * sections are not accessible by default and do not meet memory protection * alignment requirements. Thus, we place a marker to give .data + .bss a * fixed size. */ .shared_global ORIGIN(RAM) + ${CONF_SHARED_SIZE} : { __eshared_global = .; ASSERT(__eshared_global > __euninit, "ERROR(bern-kernel): Shared memory section overflow."); } > ${CONF_PLACEMENT_SHARED} } INSERT AFTER .uninit; SECTIONS { _kernel_size = ${CONF_KERNEL_SIZE}; .kernel : ALIGN(4) { /* Kernel static memory */ . = ALIGN(4); __smkernel = .; *(.kernel); *(.kernel.process); . = ALIGN(4); __emkernel = .; /* Kernel heap */ . = ALIGN(4); __shkernel = .; . = __smkernel + _kernel_size; __ehkernel = .; ASSERT(__emkernel <= __ehkernel, "Error: No room left in bern kernel."); } > ${CONF_PLACEMENT_KERNEL} AT > ${CONF_FLASH_NAME} __sikernel = LOADADDR(.kernel); } INSERT AFTER .shared_global; SECTIONS { .process_default_idle : ALIGN(256) { /* Process static memory */ . = ALIGN(8); __smprocess_default_idle = .; KEEP(*(.process.default_idle)) . = ALIGN(8); __emprocess_default_idle = .; . = __smprocess_default_idle + 256; _ehprocess_default_idle = .; ASSERT(__smprocess_default_idle > 0, "ERROR(bern-kernel): Section was optimized out, please place a variable in default idle."); } > ${CONF_PLACEMENT_PROCESSES} AT > ${CONF_FLASH_NAME} __siprocess_default_idle = LOADADDR(.process_default_idle); } INSERT AFTER .shared_global;