From 8fe73a6b8ce58fa6ddb6e9aa20240b913e762562 Mon Sep 17 00:00:00 2001 From: James Clarke Date: Wed, 11 Dec 2019 00:24:11 +0000 Subject: [PATCH 1/3] benchmarks: Don't use GCC's C nested function extension It's unnecessary and non-portable; Clang doesn't even implement that part of GNU C. (cherry picked from commit 50d75cbc963824ae7fc5137dd56ce9e01762a233) --- benchmarks/common/syscalls.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/benchmarks/common/syscalls.c b/benchmarks/common/syscalls.c index 7a7b7fdf5..c6a101cc7 100644 --- a/benchmarks/common/syscalls.c +++ b/benchmarks/common/syscalls.c @@ -356,19 +356,19 @@ int printf(const char* fmt, ...) return 0; // incorrect return value, but who cares, anyway? } +static void sprintf_putch(int ch, void** data) +{ + char** pstr = (char**)data; + **pstr = ch; + (*pstr)++; +} + int sprintf(char* str, const char* fmt, ...) { va_list ap; char* str0 = str; va_start(ap, fmt); - void sprintf_putch(int ch, void** data) - { - char** pstr = (char**)data; - **pstr = ch; - (*pstr)++; - } - vprintfmt(sprintf_putch, (void**)&str, fmt, ap); *str = 0; From 0962b576ebebd44a6bec809a23a6199d02371603 Mon Sep 17 00:00:00 2001 From: James Clarke Date: Wed, 11 Dec 2019 00:39:48 +0000 Subject: [PATCH 2/3] benchmarks: Fix init_tls on Clang Clang only supports register variables when declared at global scope (and only for non-allocatable registers, which is fine for tp), so move thread_pointer. This does not make thread_pointer visible outside the translation unit, it merely acts as a C alias for tp, so the semantics remain unchanged. (cherry picked from commit 20378c0bdd2f5cdd2bfc6036c88c523e7908bada) --- benchmarks/common/syscalls.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/benchmarks/common/syscalls.c b/benchmarks/common/syscalls.c index c6a101cc7..11d4e3698 100644 --- a/benchmarks/common/syscalls.c +++ b/benchmarks/common/syscalls.c @@ -93,9 +93,11 @@ int __attribute__((weak)) main(int argc, char** argv) return -1; } +// Must be global for compatibility with Clang +register void* thread_pointer asm("tp"); + static void init_tls() { - register void* thread_pointer asm("tp"); extern char _tdata_begin, _tdata_end, _tbss_end; size_t tdata_size = &_tdata_end - &_tdata_begin; memcpy(thread_pointer, &_tdata_begin, tdata_size); From d1245b54935505db27052569ce9409349948594c Mon Sep 17 00:00:00 2001 From: Emil Tywoniak Date: Wed, 20 Sep 2023 14:02:15 +0200 Subject: [PATCH 3/3] benchmarks: GCC -> CC --- benchmarks/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/Makefile b/benchmarks/Makefile index fde4f2316..620217d33 100644 --- a/benchmarks/Makefile +++ b/benchmarks/Makefile @@ -42,9 +42,9 @@ bmarks = \ #-------------------------------------------------------------------- RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf- -RISCV_GCC ?= $(RISCV_PREFIX)gcc -RISCV_GCC_OPTS ?= -DPREALLOCATE=1 -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf -fno-tree-loop-distribute-patterns -march=rv$(XLEN)gcv -mabi=lp64d -RISCV_LINK ?= $(RISCV_GCC) -T $(src_dir)/common/test.ld $(incs) +RISCV_CC ?= $(RISCV_PREFIX)gcc +RISCV_CC_OPTS ?= -DPREALLOCATE=1 -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf -fno-tree-loop-distribute-patterns -march=rv$(XLEN)gcv -mabi=lp64d +RISCV_LINK ?= $(RISCV_CC) -T $(src_dir)/common/test.ld $(incs) RISCV_LINK_OPTS ?= -static -nostdlib -nostartfiles -lm -lgcc -T $(src_dir)/common/test.ld RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.text.init --section=.data RISCV_SIM ?= spike --isa=rv$(XLEN)gcv @@ -54,7 +54,7 @@ objs := define compile_template $(1).riscv: $(wildcard $(src_dir)/$(1)/*) $(wildcard $(src_dir)/common/*) - $$(RISCV_GCC) $$(incs) $$(RISCV_GCC_OPTS) -o $$@ $(wildcard $(src_dir)/$(1)/*.c) $(wildcard $(src_dir)/$(1)/*.S) $(wildcard $(src_dir)/common/*.c) $(wildcard $(src_dir)/common/*.S) $$(RISCV_LINK_OPTS) + $$(RISCV_CC) $$(incs) $$(RISCV_CC_OPTS) -o $$@ $(wildcard $(src_dir)/$(1)/*.c) $(wildcard $(src_dir)/$(1)/*.S) $(wildcard $(src_dir)/common/*.c) $(wildcard $(src_dir)/common/*.S) $$(RISCV_LINK_OPTS) endef $(foreach bmark,$(bmarks),$(eval $(call compile_template,$(bmark))))