diff --git a/Makefile b/Makefile index af456bc4..e517c21c 100644 --- a/Makefile +++ b/Makefile @@ -62,7 +62,7 @@ KRK_MODS += $(patsubst kuroko/modules/%,$(BASE)/lib/kuroko/%,$(wildcard kuroko/m KRK_MODS_X = $(patsubst lib/kuroko/%.c,$(BASE)/lib/kuroko/%.so,$(wildcard lib/kuroko/*.c)) KRK_MODS_Y = $(patsubst lib/kuroko/%.c,.make/%.kmak,$(wildcard lib/kuroko/*.c)) -CFLAGS= -O2 -std=gnu11 -I. -Iapps -fplan9-extensions -Wall -Wextra -Wno-unused-parameter +CFLAGS= -O2 -std=gnu11 -I. -Iapps -fplan9-extensions -Wall -Wextra -Wno-unused-parameter ${ARCH_USER_CFLAGS} LIBC_OBJS = $(patsubst %.c,%.o,$(wildcard libc/*.c)) LIBC_OBJS += $(patsubst %.c,%.o,$(wildcard libc/*/*.c)) @@ -84,10 +84,10 @@ ramdisk.igz: $(wildcard $(BASE)/* $(BASE)/*/* $(BASE)/*/*/* $(BASE)/*/*/*/* $(BA KRK_SRC = $(sort $(wildcard kuroko/src/*.c)) $(BASE)/bin/kuroko: $(KRK_SRC) $(CRTS) lib/rline.c | $(LC) - $(CC) -O2 -g -o $@ -Wl,--export-dynamic -Ikuroko/src $(KRK_SRC) lib/rline.c + $(CC) $(CFLAGS) -o $@ -Wl,--export-dynamic -Ikuroko/src $(KRK_SRC) lib/rline.c $(BASE)/lib/kuroko/%.so: kuroko/src/modules/module_%.c| dirs $(LC) - $(CC) -O2 -shared -fPIC -Ikuroko/src -o $@ $< + $(CC) $(CFLAGS) -shared -fPIC -Ikuroko/src -o $@ $< $(BASE)/lib/kuroko/%.krk: kuroko/modules/%.krk | dirs mkdir -p $(dir $@) diff --git a/build/aarch64.mk b/build/aarch64.mk index 43459bcf..33c01166 100644 --- a/build/aarch64.mk +++ b/build/aarch64.mk @@ -1,6 +1,7 @@ ARCH=aarch64 ARCH_KERNEL_CFLAGS = -z max-page-size=0x1000 -nostdlib -mgeneral-regs-only -mno-outline-atomics -ffixed-x18 +ARCH_USER_CFLAGS = -Wno-psabi TARGET=aarch64-unknown-toaru diff --git a/kernel/arch/aarch64/main.c b/kernel/arch/aarch64/main.c index 397f6bd4..7c03b6ad 100644 --- a/kernel/arch/aarch64/main.c +++ b/kernel/arch/aarch64/main.c @@ -342,7 +342,8 @@ char _ret_from_preempt_source[1]; void aarch64_interrupt_dispatch(int from_wfi) { uint32_t iar = gicc_regs[3]; uint32_t irq = iar & 0x3FF; - uint32_t cpu = (iar >> 10) & 0x7; + /* Currently we aren't using the CPU value and I'm not sure we have any use for it, we know who we are? */ + //uint32_t cpu = (iar >> 10) & 0x7; switch (irq) { case TIMER_IRQ: diff --git a/kernel/arch/aarch64/traceback.c b/kernel/arch/aarch64/traceback.c index e536180a..e70d9924 100644 --- a/kernel/arch/aarch64/traceback.c +++ b/kernel/arch/aarch64/traceback.c @@ -98,6 +98,12 @@ void aarch64_safe_dump_traceback(uintptr_t elr, struct regs * r) { dump_traceback(elr, r->x29, r->x30); } + +/* We need to pull the frame address from the caller or this isn't going work, but + * gcc is going to warn that that is unsafe... */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wno-frame-address" + /** * @brief Display a traceback from the current call context. */ @@ -105,3 +111,4 @@ void arch_dump_traceback(void) { dump_traceback((uintptr_t)arch_dump_traceback+1, (uintptr_t)__builtin_frame_address(1), (uintptr_t)__builtin_return_address(0)); } +#pragma GCC diagnostic pop