[PATCH] math: Fix x86_64 build for -Os (BZ 33367)

H.J. Lu hjl.tools@gmail.com
Mon Sep 8 23:25:41 GMT 2025


On Mon, Sep 8, 2025 at 4:15 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Mon, Sep 8, 2025 at 4:11 PM Sam James <sam@gentoo.org> wrote:
> >
> > Sam James <sam@gentoo.org> writes:
> >
> > > "H.J. Lu" <hjl.tools@gmail.com> writes:
> > >
> > >> On Mon, Sep 8, 2025 at 2:05 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> > >>>
> > >>> On Mon, Sep 8, 2025 at 2:01 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> > >>> >
> > >>
> > >>> >
> > >>>
> > >>> My GCC patch:
> > >>>
> > >>> https://patchwork.sourceware.org/project/gcc/list/?series=51782
> > >>>
> > >>> I am testing this:
> > >>>
> > >>> diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile
> > >>> b/sysdeps/x86_64/fpu/multiarch/Makefile
> > >>> index 708b14297f..0b2caac7a0 100644
> > >>> --- a/sysdeps/x86_64/fpu/multiarch/Makefile
> > >>> +++ b/sysdeps/x86_64/fpu/multiarch/Makefile
> > >>> @@ -158,11 +158,14 @@ CFLAGS-s_sin-avx.c = -msse2avx -DSSE2AVX
> > >>>  CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
> > >>>  CFLAGS-s_sincos-avx.c = -msse2avx -DSSE2AVX
> > >>>
> > >>> -CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x -fno-builtin-modff64
> > >>> -CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32
> > >>> +CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x \
> > >>> + -fno-builtin-modff64 -fno-trapping-math
> > >>> +CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32 \
> > >>> + -fno-trapping-math
> > >>>
> > >>> -CFLAGS-s_modf-avx.c = -mavx -fno-builtin-modff32x -fno-builtin-modff64
> > >>> -CFLAGS-s_modff-avx.c = -mavx -fno-builtin-modff32
> > >>> +CFLAGS-s_modf-avx.c = -mavx -fno-builtin-modff32x -fno-builtin-modff64 \
> > >>> +       -fno-trapping-math
> > >>> +CFLAGS-s_modff-avx.c = -mavx -fno-builtin-modff32 -fno-trapping-math
> > >>>  endif
> > >>>
> > >>>  ifeq ($(subdir),mathvec)
> > >>>
> > >>
> > >> I got many failures:
> > >>
> > >> FAIL: ctype/tst-ctype-tls-dlopen-static
> > >> FAIL: debug/tst-sprintf-fortify-rdonly-static
> > >> FAIL: dlfcn/tststatic
> > >> FAIL: dlfcn/tststatic2
> > >> FAIL: dlfcn/tststatic3
> > >> FAIL: dlfcn/tststatic4
> > >> FAIL: dlfcn/tststatic5
> > >> FAIL: elf/ifuncmain1picstatic
> > >> FAIL: elf/ifuncmain1static
> > >> FAIL: elf/ifuncmain2picstatic
> > >> FAIL: elf/ifuncmain2static
> > >> FAIL: elf/ifuncmain4picstatic
> > >> FAIL: elf/ifuncmain4static
> > >> FAIL: elf/ifuncmain5picstatic
> > >> FAIL: elf/ifuncmain5static
> > >> FAIL: elf/ifuncmain7picstatic
> > >> FAIL: elf/ifuncmain7static
> > >> FAIL: elf/ifuncmain9picstatic
> > >> FAIL: elf/ifuncmain9static
> > >> FAIL: elf/tst-array1-static
> > >> FAIL: elf/tst-array1-static-cmp
> > >> FAIL: elf/tst-array5-static
> > >> FAIL: elf/tst-array5-static-cmp
> > >> FAIL: elf/tst-bz15311
> > >> FAIL: elf/tst-bz28937
> > >> FAIL: elf/tst-cpu-features-cpuinfo-static
> > >> FAIL: elf/tst-cpu-features-supports-static
> > >> FAIL: elf/tst-dl-iter-static
> > >> FAIL: elf/tst-dl-printf-static
> > >> FAIL: elf/tst-dl_find_object-static
> > >> FAIL: elf/tst-dlopen-sgid
> > >> FAIL: elf/tst-dso-ordering-all2-0
> > >> FAIL: elf/tst-dso-ordering-all3-0
> > >> FAIL: elf/tst-dso-ordering-all3-1
> > >> FAIL: elf/tst-dso-ordering-all3-2
> > >> FAIL: elf/tst-dso-ordering-all3-3
> > >> FAIL: elf/tst-dso-ordering-all4-0
> > >> FAIL: elf/tst-dso-ordering-all4-1
> > >> FAIL: elf/tst-dso-ordering-all4-10
> > >> FAIL: elf/tst-dso-ordering-all4-11
> > >> FAIL: elf/tst-dso-ordering-all4-12
> > >> FAIL: elf/tst-dso-ordering-all4-13
> > >> FAIL: elf/tst-dso-ordering-all4-14
> > >> FAIL: elf/tst-dso-ordering-all4-15
> > >> FAIL: elf/tst-dso-ordering-all4-16
> > >> FAIL: elf/tst-dso-ordering-all4-17
> > >> FAIL: elf/tst-dso-ordering-all4-18
> > >> FAIL: elf/tst-dso-ordering-all4-19
> > >> FAIL: elf/tst-dso-ordering-all4-2
> > >> FAIL: elf/tst-dso-ordering-all4-20
> > >> FAIL: elf/tst-dso-ordering-all4-21
> > >> FAIL: elf/tst-dso-ordering-all4-22
> > >> FAIL: elf/tst-dso-ordering-all4-23
> > >> FAIL: elf/tst-dso-ordering-all4-24
> > >> FAIL: elf/tst-dso-ordering-all4-25
> > >> FAIL: elf/tst-dso-ordering-all4-26
> > >> FAIL: elf/tst-dso-ordering-all4-27
> > >> FAIL: elf/tst-dso-ordering-all4-28
> > >> FAIL: elf/tst-dso-ordering-all4-29
> > >> FAIL: elf/tst-dso-ordering-all4-3
> > >> FAIL: elf/tst-dso-ordering-all4-30
> > >> FAIL: elf/tst-dso-ordering-all4-31
> > >> FAIL: elf/tst-dso-ordering-all4-32
> > >> FAIL: elf/tst-dso-ordering-all4-33
> > >> FAIL: elf/tst-dso-ordering-all4-34
> > >> FAIL: elf/tst-dso-ordering-all4-35
> > >> FAIL: elf/tst-dso-ordering-all4-36
> > >> FAIL: elf/tst-dso-ordering-all4-37
> > >> FAIL: elf/tst-dso-ordering-all4-38
> > >> FAIL: elf/tst-dso-ordering-all4-39
> > >> FAIL: elf/tst-dso-ordering-all4-4
> > >> FAIL: elf/tst-dso-ordering-all4-40
> > >> FAIL: elf/tst-dso-ordering-all4-41
> > >> FAIL: elf/tst-dso-ordering-all4-42
> > >> FAIL: elf/tst-dso-ordering-all4-43
> > >> FAIL: elf/tst-dso-ordering-all4-44
> > >> FAIL: elf/tst-dso-ordering-all4-45
> > >> FAIL: elf/tst-dso-ordering-all4-46
> > >> FAIL: elf/tst-dso-ordering-all4-47
> > >> FAIL: elf/tst-dso-ordering-all4-48
> > >> FAIL: elf/tst-dso-ordering-all4-49
> > >> FAIL: elf/tst-dso-ordering-all4-5
> > >> FAIL: elf/tst-dso-ordering-all4-50
> > >> FAIL: elf/tst-dso-ordering-all4-51
> > >> FAIL: elf/tst-dso-ordering-all4-52
> > >> FAIL: elf/tst-dso-ordering-all4-53
> > >> FAIL: elf/tst-dso-ordering-all4-54
> > >> FAIL: elf/tst-dso-ordering-all4-55
> > >> FAIL: elf/tst-dso-ordering-all4-56
> > >> FAIL: elf/tst-dso-ordering-all4-6
> > >> FAIL: elf/tst-dso-ordering-all4-7
> > >> FAIL: elf/tst-dso-ordering-all4-8
> > >> FAIL: elf/tst-dso-ordering-all4-9
> > >> FAIL: elf/tst-dso-ordering1
> > >> FAIL: elf/tst-dso-ordering10
> > >> FAIL: elf/tst-dso-ordering2
> > >> FAIL: elf/tst-dso-ordering3
> > >> FAIL: elf/tst-dso-ordering4
> > >> FAIL: elf/tst-dso-ordering5
> > >> FAIL: elf/tst-dso-ordering6
> > >> FAIL: elf/tst-dso-ordering7
> > >> FAIL: elf/tst-dso-ordering8
> > >> FAIL: elf/tst-dso-ordering9
> > >> FAIL: elf/tst-dst-static
> > >> FAIL: elf/tst-env-setuid-static
> > >> FAIL: elf/tst-env-setuid-tunables
> > >> FAIL: elf/tst-execstack-prog-static
> > >> FAIL: elf/tst-execstack-prog-static-noexecstack
> > >> FAIL: elf/tst-execstack-prog-static-tunable
> > >> FAIL: elf/tst-get-cpu-features-static
> > >> FAIL: elf/tst-getauxval-static
> > >> FAIL: elf/tst-ldconfig-X
> > >> FAIL: elf/tst-ldconfig-bad-aux-cache
> > >> FAIL: elf/tst-ldconfig-ld_so_conf-update
> > >> FAIL: elf/tst-ldconfig-p
> > >> FAIL: elf/tst-ldconfig-soname
> > >> FAIL: elf/tst-linkall-static
> > >> FAIL: elf/tst-pie-address-static
> > >> FAIL: elf/tst-pie-bss-static
> > >> FAIL: elf/tst-ptrguard1-static
> > >> FAIL: elf/tst-rtld-run-static
> > >> FAIL: elf/tst-single_threaded-pthread-static
> > >> FAIL: elf/tst-single_threaded-static
> > >> FAIL: elf/tst-single_threaded-static-dlopen
> > >> FAIL: elf/tst-stackguard1-static
> > >> FAIL: elf/tst-tls-allocation-failure-static
> > >> FAIL: elf/tst-tls-allocation-failure-static-patched
> > >> FAIL: elf/tst-tls1-static
> > >> FAIL: elf/tst-tls1-static-non-pie
> > >> FAIL: elf/tst-tls9-static
> > >> FAIL: elf/tst-tlsalign-extern-static
> > >> FAIL: elf/tst-tlsalign-static
> > >> FAIL: elf/tst-tunables
> > >> FAIL: elf/tst-tunables-enable_secure
> > >> FAIL: gmon/tst-gmon-static
> > >> FAIL: gmon/tst-gmon-static-gprof
> > >> FAIL: gmon/tst-gmon-static-pie
> > >> FAIL: gmon/tst-gmon-static-pie-gprof
> > >> FAIL: inet/tst-deadline
> > >> FAIL: inet/tst-idna_name_classify
> > >> FAIL: io/tst-statx
> > >> FAIL: libio/tst-cleanup-default-static
> > >> FAIL: libio/tst-cleanup-default-static-cmp
> > >> FAIL: libio/tst-cleanup-nostart-stop-gc-static
> > >> FAIL: libio/tst-cleanup-nostart-stop-gc-static-cmp
> > >> FAIL: libio/tst-cleanup-start-stop-gc-static
> > >> FAIL: libio/tst-cleanup-start-stop-gc-static-cmp
> > >> FAIL: libio/tst-stdio-static
> > >> FAIL: localedata/bug-setlocale1-static
> > >> FAIL: localedata/tst-langinfo-setlocale-static
> > >> FAIL: malloc/tst-aligned-alloc-static
> > >> FAIL: malloc/tst-interpose-static-nothread
> > >> FAIL: malloc/tst-interpose-static-thread
> > >> FAIL: math/atest-exp
> > >> FAIL: math/atest-exp2
> > >> FAIL: math/atest-sincos
> > >> FAIL: math/test-fpucw-ieee-static
> > >> FAIL: math/test-fpucw-static
> > >> FAIL: math/test-signgam-uchar-init-static
> > >> FAIL: math/test-signgam-uchar-static
> > >> FAIL: math/test-signgam-uint-init-static
> > >> FAIL: math/test-signgam-uint-static
> > >> FAIL: math/test-signgam-ullong-init-static
> > >> FAIL: math/test-signgam-ullong-static
> > >> FAIL: misc/tst-align-clone-internal
> > >> FAIL: misc/tst-clone2-internal
> > >> FAIL: misc/tst-clone3-internal
> > >> FAIL: misc/tst-empty
> > >> FAIL: misc/tst-fd_to_filename
> > >> FAIL: misc/tst-getpid1-internal
> > >> FAIL: nptl/tst-cancel21-static
> > >> FAIL: nptl/tst-cancel24-static
> > >> FAIL: nptl/tst-cond11-static
> > >> FAIL: nptl/tst-cond8-static
> > >> FAIL: nptl/tst-locale1
> > >> FAIL: nptl/tst-locale2
> > >> FAIL: nptl/tst-mutex8-static
> > >> FAIL: nptl/tst-mutexpi8-static
> > >> FAIL: nptl/tst-pthread-gdb-attach-static
> > >> FAIL: nptl/tst-pthread-key1-static
> > >> FAIL: nptl/tst-pthread_exit-nothreads-static
> > >> FAIL: nptl/tst-sem11-static
> > >> FAIL: nptl/tst-sem12-static
> > >> FAIL: nptl/tst-stackguard1-static
> > >> FAIL: nss/tst-field
> > >> FAIL: posix/tst-affinity-static
> > >> FAIL: posix/tst-exec-static
> > >> FAIL: posix/tst-libc-message
> > >> FAIL: posix/tst-spawn-static
> > >> FAIL: posix/tst-sysconf-cache-linesize-static
> > >> FAIL: resolv/tst-ns_name_length_uncompressed
> > >> FAIL: resolv/tst-ns_rr_cursor
> > >> FAIL: resolv/tst-ns_samebinaryname
> > >> FAIL: resolv/tst-resolv-txnid-collision
> > >> FAIL: setjmp/tst-setjmp-static
> > >> FAIL: stdlib/tst-getenv-static
> > >> FAIL: stdlib/tst-secure-getenv
> > >> FAIL: string/test-memswap
> > >
> > > It's not obvious to me how modf{,f} is used at all for any of that. I
> > > also thought from the thread that the codegen would be basically the
> > > same as it is with -O2 now. What's going on?
> >
> > Nevermind, I see other changes. But still, I don't see how it can lead
> > to such breakage. Does the same happen with azanela's inline asm patch?
> > Is glibc miscompiled at -Os and nobody noticed (independent of modf*)?
> >
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=27004
>
> maybe comes back with -Os.

I opened:

https://sourceware.org/bugzilla/show_bug.cgi?id=33404

-- 
H.J.


More information about the Libc-alpha mailing list