summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2024-02-02 14:05:47 -0500
committerJakob Kaivo <jkk@ung.org>2024-02-02 14:05:47 -0500
commit9b784a3affb4027c9bc40fba2b272abe7e580ece (patch)
tree92d00cd6f29edd8372ed7806b3a70733066896e4
parent8b3f2fa09e9241e20926c8171753a271c21ec93d (diff)
add struct __fenv to track valid fexcept_t and fenv_t objects
-rw-r--r--mk/__fenv.d9
-rw-r--r--mk/all.mk5
-rw-r--r--mk/deps.mk20
-rw-r--r--mk/fegetenv.d2
-rw-r--r--mk/fegetround.d2
-rw-r--r--mk/feholdexcept.d2
-rw-r--r--mk/fesetround.d2
-rw-r--r--mk/feupdateenv.d2
-rw-r--r--mk/va_arg.d9
-rw-r--r--mk/va_copy.d9
-rw-r--r--mk/va_end.d9
-rw-r--r--mk/va_start.d9
-rw-r--r--src/fenv/__fenv.c8
-rw-r--r--src/fenv/_fenv.h7
14 files changed, 90 insertions, 5 deletions
diff --git a/mk/__fenv.d b/mk/__fenv.d
new file mode 100644
index 00000000..00fd56f5
--- /dev/null
+++ b/mk/__fenv.d
@@ -0,0 +1,9 @@
+libc_C.-1: libc.a(__fenv.o)
+libc.a(__fenv.o): $(OBJDIR)/__fenv.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/__fenv.o: src/fenv/__fenv.c
+$(OBJDIR)/__fenv.o: src/fenv/_fenv.h
+$(OBJDIR)/__fenv.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/fenv/__fenv.c
diff --git a/mk/all.mk b/mk/all.mk
index 15e93cf9..27ac6bd2 100644
--- a/mk/all.mk
+++ b/mk/all.mk
@@ -463,6 +463,11 @@ include mk/fesetexceptflag.d
include mk/fegetround.d
include mk/fetestexcept.d
include mk/fegetexceptflag.d
+include mk/__fenv.d
+include mk/va_copy.d
+include mk/va_start.d
+include mk/va_arg.d
+include mk/va_end.d
include mk/__sys.x86-64.s.d
include mk/__setjmp.x86-64.s.d
include mk/__longjmp.x86-64.s.d
diff --git a/mk/deps.mk b/mk/deps.mk
index ac1d5553..55d8f523 100644
--- a/mk/deps.mk
+++ b/mk/deps.mk
@@ -1862,6 +1862,26 @@ all: mk/fegetexceptflag.d
mk/fegetexceptflag.d: src/fenv/fegetexceptflag.c
sh mk/deps.sh src/fenv/fegetexceptflag.c
+all: mk/__fenv.d
+mk/__fenv.d: src/fenv/__fenv.c
+ sh mk/deps.sh src/fenv/__fenv.c
+
+all: mk/va_copy.d
+mk/va_copy.d: src/stdarg/va_copy.c
+ sh mk/deps.sh src/stdarg/va_copy.c
+
+all: mk/va_start.d
+mk/va_start.d: src/stdarg/va_start.c
+ sh mk/deps.sh src/stdarg/va_start.c
+
+all: mk/va_arg.d
+mk/va_arg.d: src/stdarg/va_arg.c
+ sh mk/deps.sh src/stdarg/va_arg.c
+
+all: mk/va_end.d
+mk/va_end.d: src/stdarg/va_end.c
+ sh mk/deps.sh src/stdarg/va_end.c
+
all: mk/__sys.x86-64.s.d
mk/__sys.x86-64.s.d: src/__sys.x86-64.s
sh mk/deps.sh src/__sys.x86-64.s
diff --git a/mk/fegetenv.d b/mk/fegetenv.d
index cd1dabbd..a4d7ee8e 100644
--- a/mk/fegetenv.d
+++ b/mk/fegetenv.d
@@ -3,7 +3,7 @@ libm.a(fegetenv.o): $(OBJDIR)/fegetenv.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/fegetenv.o: src/fenv/fegetenv.c
-$(OBJDIR)/fegetenv.o: src/_safety.h
+$(OBJDIR)/fegetenv.o: src/fenv/_fenv.h
$(OBJDIR)/fegetenv.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/fenv/fegetenv.c
diff --git a/mk/fegetround.d b/mk/fegetround.d
index 22925a42..62d8a08a 100644
--- a/mk/fegetround.d
+++ b/mk/fegetround.d
@@ -3,7 +3,7 @@ libm.a(fegetround.o): $(OBJDIR)/fegetround.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/fegetround.o: src/fenv/fegetround.c
-$(OBJDIR)/fegetround.o: src/_safety.h
+$(OBJDIR)/fegetround.o: src/fenv/_fenv.h
$(OBJDIR)/fegetround.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/fenv/fegetround.c
diff --git a/mk/feholdexcept.d b/mk/feholdexcept.d
index a8e9a5e6..a56338e0 100644
--- a/mk/feholdexcept.d
+++ b/mk/feholdexcept.d
@@ -3,7 +3,7 @@ libm.a(feholdexcept.o): $(OBJDIR)/feholdexcept.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/feholdexcept.o: src/fenv/feholdexcept.c
-$(OBJDIR)/feholdexcept.o: src/_safety.h
+$(OBJDIR)/feholdexcept.o: src/fenv/_fenv.h
$(OBJDIR)/feholdexcept.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/fenv/feholdexcept.c
diff --git a/mk/fesetround.d b/mk/fesetround.d
index 3f2e8112..fa6d5642 100644
--- a/mk/fesetround.d
+++ b/mk/fesetround.d
@@ -3,7 +3,7 @@ libm.a(fesetround.o): $(OBJDIR)/fesetround.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/fesetround.o: src/fenv/fesetround.c
-$(OBJDIR)/fesetround.o: src/_safety.h
+$(OBJDIR)/fesetround.o: src/fenv/_fenv.h
$(OBJDIR)/fesetround.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/fenv/fesetround.c
diff --git a/mk/feupdateenv.d b/mk/feupdateenv.d
index d2f37312..34ee3f50 100644
--- a/mk/feupdateenv.d
+++ b/mk/feupdateenv.d
@@ -3,7 +3,7 @@ libm.a(feupdateenv.o): $(OBJDIR)/feupdateenv.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/feupdateenv.o: src/fenv/feupdateenv.c
-$(OBJDIR)/feupdateenv.o: src/_safety.h
+$(OBJDIR)/feupdateenv.o: src/fenv/_fenv.h
$(OBJDIR)/feupdateenv.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/fenv/feupdateenv.c
diff --git a/mk/va_arg.d b/mk/va_arg.d
new file mode 100644
index 00000000..09d7c37a
--- /dev/null
+++ b/mk/va_arg.d
@@ -0,0 +1,9 @@
+libc_C.0: libc.a(va_arg.o)
+libc.a(va_arg.o): $(OBJDIR)/va_arg.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/va_arg.o: src/stdarg/va_arg.c
+$(OBJDIR)/va_arg.o: src/_safety.h
+$(OBJDIR)/va_arg.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/stdarg/va_arg.c
diff --git a/mk/va_copy.d b/mk/va_copy.d
new file mode 100644
index 00000000..550d3cc0
--- /dev/null
+++ b/mk/va_copy.d
@@ -0,0 +1,9 @@
+libc_C.0: libc.a(va_copy.o)
+libc.a(va_copy.o): $(OBJDIR)/va_copy.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/va_copy.o: src/stdarg/va_copy.c
+$(OBJDIR)/va_copy.o: src/_safety.h
+$(OBJDIR)/va_copy.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/stdarg/va_copy.c
diff --git a/mk/va_end.d b/mk/va_end.d
new file mode 100644
index 00000000..b05f7e54
--- /dev/null
+++ b/mk/va_end.d
@@ -0,0 +1,9 @@
+libc_C.0: libc.a(va_end.o)
+libc.a(va_end.o): $(OBJDIR)/va_end.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/va_end.o: src/stdarg/va_end.c
+$(OBJDIR)/va_end.o: src/_safety.h
+$(OBJDIR)/va_end.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/stdarg/va_end.c
diff --git a/mk/va_start.d b/mk/va_start.d
new file mode 100644
index 00000000..1623f2e9
--- /dev/null
+++ b/mk/va_start.d
@@ -0,0 +1,9 @@
+libc_C.0: libc.a(va_start.o)
+libc.a(va_start.o): $(OBJDIR)/va_start.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/va_start.o: src/stdarg/va_start.c
+$(OBJDIR)/va_start.o: src/_safety.h
+$(OBJDIR)/va_start.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/stdarg/va_start.c
diff --git a/src/fenv/__fenv.c b/src/fenv/__fenv.c
new file mode 100644
index 00000000..09181539
--- /dev/null
+++ b/src/fenv/__fenv.c
@@ -0,0 +1,8 @@
+#include "_fenv.h"
+
+struct __fenv __fenv = { 0 };
+
+/*
+STDC(-1)
+SIGNAL_SAFE(-1)
+*/
diff --git a/src/fenv/_fenv.h b/src/fenv/_fenv.h
index eaaa7d0c..6daf2246 100644
--- a/src/fenv/_fenv.h
+++ b/src/fenv/_fenv.h
@@ -1,6 +1,13 @@
#include <fenv.h>
#include "_safety.h"
+extern struct __fenv {
+ fexcept_t *valid_fexcept;
+ size_t nvalid_fexcept;
+ fenv_t *valid_fenv;
+ size_t nvalid_fenv;
+} __fenv;
+
#ifdef NDEBUG
#define ASSERT_VALID_EXCEPTION_MASK(_n) (void)(_n)
#define ASSERT_PREVIOUS_FEXCEPT(_f, _e) (void)(_f)