diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-02-02 14:05:47 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-02-02 14:05:47 -0500 |
commit | 9b784a3affb4027c9bc40fba2b272abe7e580ece (patch) | |
tree | 92d00cd6f29edd8372ed7806b3a70733066896e4 | |
parent | 8b3f2fa09e9241e20926c8171753a271c21ec93d (diff) |
add struct __fenv to track valid fexcept_t and fenv_t objects
-rw-r--r-- | mk/__fenv.d | 9 | ||||
-rw-r--r-- | mk/all.mk | 5 | ||||
-rw-r--r-- | mk/deps.mk | 20 | ||||
-rw-r--r-- | mk/fegetenv.d | 2 | ||||
-rw-r--r-- | mk/fegetround.d | 2 | ||||
-rw-r--r-- | mk/feholdexcept.d | 2 | ||||
-rw-r--r-- | mk/fesetround.d | 2 | ||||
-rw-r--r-- | mk/feupdateenv.d | 2 | ||||
-rw-r--r-- | mk/va_arg.d | 9 | ||||
-rw-r--r-- | mk/va_copy.d | 9 | ||||
-rw-r--r-- | mk/va_end.d | 9 | ||||
-rw-r--r-- | mk/va_start.d | 9 | ||||
-rw-r--r-- | src/fenv/__fenv.c | 8 | ||||
-rw-r--r-- | src/fenv/_fenv.h | 7 |
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 @@ -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 @@ -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) |