うーん、sbrkで、確保しているメモリが足りない気がしている。 そこで、リンカスクリプトで、ヒープの領域をさらに大きめに確保してみた。
diff --git a/coremark-pro_1.1.2446/mith/mips/mips.simple.ld b/coremark-pro_1.1.2446/mith/mips/mips.simple.ld index 35d7e38..de42d51 100644 --- a/coremark-pro_1.1.2446/mith/mips/mips.simple.ld +++ b/coremark-pro_1.1.2446/mith/mips/mips.simple.ld @@ -1,15 +1,21 @@ SECTIONS { - .data 0x7F000000 : { *(.data) } + .data 0x7F000000 : { + *(.data) + *(.sdata) + } .ctors : { *(.ctors) } .dtors : { *(.dtors) } .jcr : { *(.jcr) } _gp = ALIGN(16); heap_low = .; /* for _sbrk */ - . = . + 0x4000; /* 64kB of stack memory */ + . = . + 0x10000; /* 64kB of stack memory */ heap_top = .; /* for _sbrk */ _sp = ALIGN(16) + 0xFFFF8; - .bss : { *(.bss) } + .bss : { + *(.sbss) + *(.bss) + } stack_top = .; /* for startup.s */ .text 0x80000000 : {
しかし、何故かエラーが出る。
/usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/bin/ld: small-data section exceeds 64KB; lower small-data size limit (see option -G) /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-freer.o): In function `_free_r': (.text+0x368): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_top_pad' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-mallocr.o): In function `_malloc_r': (.text+0x3a4): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_top_pad' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-mallocr.o): In function `_malloc_r': (.text+0x4b8): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_max_sbrked_mem' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-mallocr.o): In function `_malloc_r': (.text+0x4cc): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_max_sbrked_mem' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-mallocr.o): In function `_malloc_r': (.text+0x4d0): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_max_total_mem' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-mallocr.o): In function `_malloc_r': (.text+0x4e8): relocation truncated to fit: R_MIPS_GPREL16 against `__malloc_max_total_mem' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': (.text+0x18): relocation truncated to fit: R_MIPS_GPREL16 against `errno' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': (.text+0x38): relocation truncated to fit: R_MIPS_GPREL16 against `errno' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-writer.o): In function `_write_r': (.text+0x24): relocation truncated to fit: R_MIPS_GPREL16 against `errno' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-writer.o): In function `_write_r': (.text+0x44): relocation truncated to fit: R_MIPS_GPREL16 against `errno' /usr/local/lib/gcc/mipsel-unknown-elf/5.1.0/../../../../mipsel-unknown-elf/lib/libc.a(lib_a-closer.o): In function `_close_r': (.text+0x18): additional relocation overflows omitted from the output
うーん?small-dataのセクションを拡充させてみたが、結果は変わらなかった。
diff --git a/coremark-pro_1.1.2446/util/make/gcc-mips.mak b/coremark-pro_1.1.2446/util/make/gcc-mips.mak index af25a76..4f4ef1b 100644 --- a/coremark-pro_1.1.2446/util/make/gcc-mips.mak +++ b/coremark-pro_1.1.2446/util/make/gcc-mips.mak @@ -81,7 +81,7 @@ INCLUDE = $(TOOLS)/include # -O0 Do not optimize # -O2 Optimize for speed -COMPILER_TARGET = -mips32r5 -msoft-float +COMPILER_TARGET = -mips32r5 -msoft-float -mlong-calls -G0 COMPILER_FLAGS = -O2 $(CDEFN)NDEBUG $(CDEFN)HOST_EXAMPLE_CODE=1 -std=gnu99 COMPILER_NOOPT = -g -O0 $(CDEFN)NDEBUG $(CDEFN)HOST_EXAMPLE_CODE=1 COMPILER_DEBUG = -O0 -g $(CDEFN)HOST_EXAMPLE_CODE=1 -DBMDEBUG=1 -DTHDEBUG=1 @@ -137,6 +137,7 @@ ASSEMBLER_INCLUDES = # -lm is optional. Some linkers (linux gcc) do not include math library by default. LINKER_LAST = +LINKER_FLAGS = -G0 -mlong-calls
よく分からないなあ。