commit 1052d5acbe47e8eb33cb56736ed6245bc05148d4
parent 47412984e4450f067d5606dc182880718283ca44
Author: Drew DeVault <sir@cmpwn.com>
Date: Thu, 4 Feb 2021 16:08:23 -0500
Update stdlib
Diffstat:
M | gen-stdlib | | | 28 | +++++++++++++++++++++++----- |
M | mk/stdlib.mk | | | 50 | +++++++++++++++++++++++++++++++++++++++++--------- |
2 files changed, 64 insertions(+), 14 deletions(-)
diff --git a/gen-stdlib b/gen-stdlib
@@ -18,14 +18,15 @@ eval ". $srcdir/mk/gen-stdlib.sh"
gensrcs_rt() {
gen_srcs rt \
- '$(PLATFORM)/abort.ha' \
'$(PLATFORM)/env.ha' \
'$(PLATFORM)/errno.ha' \
'$(PLATFORM)/start.ha' \
'$(PLATFORM)/syscallno$(ARCH).ha' \
'$(PLATFORM)/syscalls.ha' \
'$(PLATFORM)/segmalloc.ha' \
+ '$(ARCH)/jmp.ha' \
ensure.ha \
+ jmp.ha \
malloc.ha \
memcpy.ha \
memset.ha \
@@ -39,27 +40,44 @@ rt() {
if [ $testing -eq 0 ]
then
printf '%s\n' 'rtscript=$(STDLIB)/rt/hare.sc'
- gensrcs_rt start-test.ha
+ gensrcs_rt \
+ '$(PLATFORM)/abort.ha' \
+ start.ha
else
gensrcs_rt \
+ +test/abort.ha \
+test/start.ha \
+test/ztos.ha
fi
gen_ssa rt
cat <<EOF
+\$($cache)/rt/start.o: \$(STDLIB)/rt/\$(PLATFORM)/start.s
+ @printf 'AS \t\$@\n'
+ @mkdir -p \$($cache)/rt
+ @as -o \$@ \$<
+
+${stdlib}_asm=\$($cache)/rt/syscall.o \\
+ \$($cache)/rt/setjmp.o \\
+ \$($cache)/rt/longjmp.o
+
\$($cache)/rt/syscall.o: \$(STDLIB)/rt/\$(PLATFORM)/syscall\$(ARCH).s
@printf 'AS \t\$@\n'
@mkdir -p \$($cache)/rt
@as -o \$@ \$<
-\$($cache)/rt/start.o: \$(STDLIB)/rt/\$(PLATFORM)/start.s
+\$($cache)/rt/setjmp.o: \$(STDLIB)/rt/\$(ARCH)/setjmp.s
+ @printf 'AS \t\$@\n'
+ @mkdir -p \$($cache)/rt
+ @as -o \$@ \$<
+
+\$($cache)/rt/longjmp.o: \$(STDLIB)/rt/\$(ARCH)/longjmp.s
@printf 'AS \t\$@\n'
@mkdir -p \$($cache)/rt
@as -o \$@ \$<
-\$($cache)/rt/rt.a: \$($cache)/rt/rt.o \$($cache)/rt/syscall.o
+\$($cache)/rt/rt.a: \$($cache)/rt/rt.o \$(${stdlib}_asm)
@printf 'AR\t\$@\n'
- @\$(AR) -csr \$@ \$($cache)/rt/rt.o \$($cache)/rt/syscall.o
+ @\$(AR) -csr \$@ \$($cache)/rt/rt.o \$(${stdlib}_asm)
${stdlib}_rt=\$($cache)/rt/rt.a
${stdlib}_start=\$($cache)/rt/start.o
diff --git a/mk/stdlib.mk b/mk/stdlib.mk
@@ -3,19 +3,21 @@
# rt
rtscript=$(STDLIB)/rt/hare.sc
stdlib_rt_srcs= \
- $(STDLIB)/rt/$(PLATFORM)/abort.ha \
$(STDLIB)/rt/$(PLATFORM)/env.ha \
$(STDLIB)/rt/$(PLATFORM)/errno.ha \
$(STDLIB)/rt/$(PLATFORM)/start.ha \
$(STDLIB)/rt/$(PLATFORM)/syscallno$(ARCH).ha \
$(STDLIB)/rt/$(PLATFORM)/syscalls.ha \
$(STDLIB)/rt/$(PLATFORM)/segmalloc.ha \
+ $(STDLIB)/rt/$(ARCH)/jmp.ha \
$(STDLIB)/rt/ensure.ha \
+ $(STDLIB)/rt/jmp.ha \
$(STDLIB)/rt/malloc.ha \
$(STDLIB)/rt/memcpy.ha \
$(STDLIB)/rt/memset.ha \
$(STDLIB)/rt/strcmp.ha \
- $(STDLIB)/rt/start-test.ha
+ $(STDLIB)/rt/$(PLATFORM)/abort.ha \
+ $(STDLIB)/rt/start.ha
$(HARECACHE)/rt/rt.ssa: $(stdlib_rt_srcs) $(stdlib_rt)
@printf 'HAREC \t$@\n'
@@ -23,19 +25,33 @@ $(HARECACHE)/rt/rt.ssa: $(stdlib_rt_srcs) $(stdlib_rt)
@HARECACHE=$(HARECACHE) $(HAREC) $(HAREFLAGS) -o $@ -Nrt \
-t$(HARECACHE)/rt/rt.td $(stdlib_rt_srcs)
+$(HARECACHE)/rt/start.o: $(STDLIB)/rt/$(PLATFORM)/start.s
+ @printf 'AS \t$@\n'
+ @mkdir -p $(HARECACHE)/rt
+ @as -o $@ $<
+
+stdlib_asm=$(HARECACHE)/rt/syscall.o \
+ $(HARECACHE)/rt/setjmp.o \
+ $(HARECACHE)/rt/longjmp.o
+
$(HARECACHE)/rt/syscall.o: $(STDLIB)/rt/$(PLATFORM)/syscall$(ARCH).s
@printf 'AS \t$@\n'
@mkdir -p $(HARECACHE)/rt
@as -o $@ $<
-$(HARECACHE)/rt/start.o: $(STDLIB)/rt/$(PLATFORM)/start.s
+$(HARECACHE)/rt/setjmp.o: $(STDLIB)/rt/$(ARCH)/setjmp.s
+ @printf 'AS \t$@\n'
+ @mkdir -p $(HARECACHE)/rt
+ @as -o $@ $<
+
+$(HARECACHE)/rt/longjmp.o: $(STDLIB)/rt/$(ARCH)/longjmp.s
@printf 'AS \t$@\n'
@mkdir -p $(HARECACHE)/rt
@as -o $@ $<
-$(HARECACHE)/rt/rt.a: $(HARECACHE)/rt/rt.o $(HARECACHE)/rt/syscall.o
+$(HARECACHE)/rt/rt.a: $(HARECACHE)/rt/rt.o $(stdlib_asm)
@printf 'AR\t$@\n'
- @$(AR) -csr $@ $(HARECACHE)/rt/rt.o $(HARECACHE)/rt/syscall.o
+ @$(AR) -csr $@ $(HARECACHE)/rt/rt.o $(stdlib_asm)
stdlib_rt=$(HARECACHE)/rt/rt.a
stdlib_start=$(HARECACHE)/rt/start.o
@@ -183,18 +199,20 @@ hare_stdlib_deps+=$(stdlib_stdlib_fmt)
# rt
testlib_rt_srcs= \
- $(STDLIB)/rt/$(PLATFORM)/abort.ha \
$(STDLIB)/rt/$(PLATFORM)/env.ha \
$(STDLIB)/rt/$(PLATFORM)/errno.ha \
$(STDLIB)/rt/$(PLATFORM)/start.ha \
$(STDLIB)/rt/$(PLATFORM)/syscallno$(ARCH).ha \
$(STDLIB)/rt/$(PLATFORM)/syscalls.ha \
$(STDLIB)/rt/$(PLATFORM)/segmalloc.ha \
+ $(STDLIB)/rt/$(ARCH)/jmp.ha \
$(STDLIB)/rt/ensure.ha \
+ $(STDLIB)/rt/jmp.ha \
$(STDLIB)/rt/malloc.ha \
$(STDLIB)/rt/memcpy.ha \
$(STDLIB)/rt/memset.ha \
$(STDLIB)/rt/strcmp.ha \
+ $(STDLIB)/rt/+test/abort.ha \
$(STDLIB)/rt/+test/start.ha \
$(STDLIB)/rt/+test/ztos.ha
@@ -204,19 +222,33 @@ $(TESTCACHE)/rt/rt.ssa: $(testlib_rt_srcs) $(testlib_rt)
@HARECACHE=$(TESTCACHE) $(HAREC) $(TESTHAREFLAGS) -o $@ -Nrt \
-t$(TESTCACHE)/rt/rt.td $(testlib_rt_srcs)
+$(TESTCACHE)/rt/start.o: $(STDLIB)/rt/$(PLATFORM)/start.s
+ @printf 'AS \t$@\n'
+ @mkdir -p $(TESTCACHE)/rt
+ @as -o $@ $<
+
+testlib_asm=$(TESTCACHE)/rt/syscall.o \
+ $(TESTCACHE)/rt/setjmp.o \
+ $(TESTCACHE)/rt/longjmp.o
+
$(TESTCACHE)/rt/syscall.o: $(STDLIB)/rt/$(PLATFORM)/syscall$(ARCH).s
@printf 'AS \t$@\n'
@mkdir -p $(TESTCACHE)/rt
@as -o $@ $<
-$(TESTCACHE)/rt/start.o: $(STDLIB)/rt/$(PLATFORM)/start.s
+$(TESTCACHE)/rt/setjmp.o: $(STDLIB)/rt/$(ARCH)/setjmp.s
+ @printf 'AS \t$@\n'
+ @mkdir -p $(TESTCACHE)/rt
+ @as -o $@ $<
+
+$(TESTCACHE)/rt/longjmp.o: $(STDLIB)/rt/$(ARCH)/longjmp.s
@printf 'AS \t$@\n'
@mkdir -p $(TESTCACHE)/rt
@as -o $@ $<
-$(TESTCACHE)/rt/rt.a: $(TESTCACHE)/rt/rt.o $(TESTCACHE)/rt/syscall.o
+$(TESTCACHE)/rt/rt.a: $(TESTCACHE)/rt/rt.o $(testlib_asm)
@printf 'AR\t$@\n'
- @$(AR) -csr $@ $(TESTCACHE)/rt/rt.o $(TESTCACHE)/rt/syscall.o
+ @$(AR) -csr $@ $(TESTCACHE)/rt/rt.o $(testlib_asm)
testlib_rt=$(TESTCACHE)/rt/rt.a
testlib_start=$(TESTCACHE)/rt/start.o