mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-01-22 01:30:31 -05:00
* [RISC-V-Qemu-virt_GCC Demo] Add picolibc support Add minimal picolibc support: * Use --specs=picolibc.specs to direct gcc at picolibc * Use -DPICOLIBC_INTEGER_PRINTF_SCANF to enable smaller printf implementation * Enable configUSE_PICOLIBC_TLS for thread local storage * Add TLS section to linker script Signed-off-by: Keith Packard <keithpac@amazon.com> * [CORTEX_MPU_M3_MPS2_QEMU_GCC Demo] Add picolibc support Add minimal picolibc support to this demo * Use --specs=picolibc.specs to direct gcc at picolibc * Use -DPICOLIBC_INTEGER_PRINTF_SCANF to enable smaller printf implementation * Enable configUSE_PICOLIBC_TLS for thread local storage * Add TLS section to linker script * Replace newlib syscall hooks with picolibc ones Signed-off-by: Keith Packard <keithpac@amazon.com> --------- Signed-off-by: Keith Packard <keithpac@amazon.com> Co-authored-by: Keith Packard <keithpac@amazon.com>
135 lines
2.1 KiB
Text
135 lines
2.1 KiB
Text
OUTPUT_ARCH( "riscv" )
|
|
ENTRY( _start )
|
|
|
|
MEMORY
|
|
{
|
|
/* Fake ROM area */
|
|
rom (rxa) : ORIGIN = 0x80000000, LENGTH = 512K
|
|
ram (wxa) : ORIGIN = 0x80080000, LENGTH = 512K
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
.init :
|
|
{
|
|
_text = .;
|
|
KEEP (*(SORT_NONE(.init)))
|
|
} >rom AT>rom
|
|
|
|
.text :
|
|
{
|
|
*(.text.unlikely .text.unlikely.*)
|
|
*(.text.startup .text.startup.*)
|
|
*(.text .text.*)
|
|
*(.gnu.linkonce.t.*)
|
|
} >rom AT>rom
|
|
|
|
.fini :
|
|
{
|
|
KEEP (*(SORT_NONE(.fini)))
|
|
_etext = .;
|
|
} >rom AT>rom
|
|
|
|
.rodata.align ALIGN(4):
|
|
{
|
|
_rodata = .;
|
|
} >rom AT>rom
|
|
|
|
.rodata.start :
|
|
{
|
|
_rodata_lma = LOADADDR(.rodata.start);
|
|
} >rom AT>rom
|
|
|
|
.rodata :
|
|
{
|
|
*(.rdata)
|
|
*(.rodata .rodata.*)
|
|
*(.gnu.linkonce.r.*)
|
|
|
|
. = ALIGN(4);
|
|
_erodata = .;
|
|
} >rom AT>rom
|
|
|
|
.data.align :
|
|
{
|
|
. = ALIGN(4);
|
|
_data = .;
|
|
} >ram AT>rom
|
|
|
|
.data.start :
|
|
{
|
|
_data_lma = LOADADDR(.data.start);
|
|
} >ram AT>rom
|
|
|
|
.data :
|
|
{
|
|
*(.data .data.*)
|
|
*(.gnu.linkonce.d.*)
|
|
. = ALIGN(8);
|
|
PROVIDE( __global_pointer$ = . + 0x800 );
|
|
*(.sdata .sdata.*)
|
|
*(.sdata2 .sdata2.*)
|
|
*(.gnu.linkonce.s.*)
|
|
. = ALIGN(8);
|
|
*(.srodata.cst16)
|
|
*(.srodata.cst8)
|
|
*(.srodata.cst4)
|
|
*(.srodata.cst2)
|
|
*(.srodata .srodata.*)
|
|
|
|
. = ALIGN(4);
|
|
_edata = .;
|
|
} >ram AT>rom
|
|
|
|
.tdata : {
|
|
*(.tdata .tdata.*)
|
|
} >rom AT>rom
|
|
|
|
.tbss (NOLOAD) : {
|
|
*(.tbss .tbss.* .gnu.linkonce.tb.*)
|
|
*(.tcommon)
|
|
PROVIDE( __tbss_end = . );
|
|
PROVIDE( __tls_end = . );
|
|
} >rom AT>rom
|
|
PROVIDE( __tdata_source = LOADADDR(.tdata) );
|
|
PROVIDE( __tdata_source_end = LOADADDR(.tdata) + SIZEOF(.tdata) );
|
|
PROVIDE( __tdata_size = SIZEOF(.tdata) );
|
|
PROVIDE( __tbss_offset = ADDR(.tbss) - ADDR(.tdata) );
|
|
PROVIDE( __tbss_start = ADDR(.tbss) );
|
|
PROVIDE( __tbss_size = SIZEOF(.tbss) );
|
|
PROVIDE( __tls_size = __tls_end - ADDR(.tdata) );
|
|
PROVIDE( __tls_align = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)) );
|
|
|
|
.bss.align :
|
|
{
|
|
. = ALIGN(4);
|
|
_bss = .;
|
|
} >ram AT>rom
|
|
|
|
.bss.start :
|
|
{
|
|
_bss_lma = LOADADDR(.bss.start);
|
|
} >ram AT>rom
|
|
|
|
.bss :
|
|
{
|
|
*(.sbss*)
|
|
*(.gnu.linkonce.sb.*)
|
|
*(.bss .bss.*)
|
|
*(.gnu.linkonce.b.*)
|
|
*(COMMON)
|
|
|
|
. = ALIGN(4);
|
|
_ebss = .;
|
|
} >ram AT>rom
|
|
|
|
. = ALIGN(8);
|
|
_end = .;
|
|
|
|
.stack :
|
|
{
|
|
. = ALIGN(16);
|
|
. += __stack_size;
|
|
_stack_top = .;
|
|
} >ram AT>ram
|
|
}
|