From 0271083129e4f2fca79b28e692e185b47b871296 Mon Sep 17 00:00:00 2001 From: Vidya Lakshmi Rajagopalan Date: Sat, 21 Feb 2026 16:10:35 +0000 Subject: [PATCH 1/5] Added placeholder for libdl.a --- scripts/make_archive.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/make_archive.sh b/scripts/make_archive.sh index 50c882020..d4fd2e6c0 100755 --- a/scripts/make_archive.sh +++ b/scripts/make_archive.sh @@ -115,3 +115,14 @@ else echo "Failed to create the archive libpthread.a" return 1 fi + +#libdl.a is created as a placeholder since static python build requires libdl.a +llvm-ar crs "$GLIBC/sysroot/lib/wasm32-wasi/libdl.a" + +# Check if llvm-ar succeeded +if [ $? -eq 0 ]; then + echo "SUCCESS: Created archive libdl.a" +else + echo "Failed to create the archive libdl.a" + return 1 +fi From a616f16ecef7603a2161f50e4577c798e3094458 Mon Sep 17 00:00:00 2001 From: Vidya Lakshmi Rajagopalan Date: Sat, 21 Feb 2026 16:11:41 +0000 Subject: [PATCH 2/5] Added unwind_def object file for libc.a --- scripts/object_lists/libc_objects.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/object_lists/libc_objects.txt b/scripts/object_lists/libc_objects.txt index fc913f7b7..2fb3119c5 100755 --- a/scripts/object_lists/libc_objects.txt +++ b/scripts/object_lists/libc_objects.txt @@ -1648,6 +1648,7 @@ misc/tsearch.o misc/ttyslot.o misc/ualarm.o misc/unwind-link.o +misc/unwind_def.o misc/usleep.o misc/ustat.o misc/utimes.o From f941fb0d73cc7a6d587d1f89206557c350b36982 Mon Sep 17 00:00:00 2001 From: Vidya Lakshmi Rajagopalan Date: Sat, 21 Feb 2026 16:14:31 +0000 Subject: [PATCH 3/5] Updated s_frexpl.c with latest glibc code to fix the build error --- src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c | 98 ++++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c b/src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c index c610704cc..d277cfe86 100644 --- a/src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c +++ b/src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c @@ -1,60 +1,60 @@ -/* s_frexpl.c -- long double version of s_frexp.c. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ +/* Optimized frexp implementation for intel96 (x87 80-bit). + Copyright (C) 2025-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ #include #include #include #include -static const long double -#if LDBL_MANT_DIG == 64 -two65 = 3.68934881474191032320e+19L; /* 0x4040, 0x80000000, 0x00000000 */ -#else -# error "Cannot handle this MANT_DIG" -#endif +#define EXPONENT_BIAS 16383 +static const long double two65 = 0x1p65L; -long double __frexpl(long double x, int *eptr) +long double +__frexpl (long double x, int *eptr) { - uint32_t se, hx, ix, lx; - GET_LDOUBLE_WORDS(se,hx,lx,x); - ix = 0x7fff&se; - *eptr = 0; - if(ix==0x7fff||((ix|hx|lx)==0)) return x + x; /* 0,inf,nan */ - if (ix==0x0000) { /* subnormal */ - x *= two65; - GET_LDOUBLE_EXP(se,x); - ix = se&0x7fff; - *eptr = -65; - } - *eptr += ix-16382; - se = (se & 0x8000) | 0x3ffe; - SET_LDOUBLE_EXP(x,se); - return x; + uint32_t se, hx, lx; + GET_LDOUBLE_WORDS (se, hx, lx, x); + uint32_t ex = se & 0x7fff; + + /* Fast path for normal numbers. */ + if (__glibc_likely ((ex - 1) < 0x7ffe)) + { + ex -= EXPONENT_BIAS - 1; + *eptr = ex; + SET_LDOUBLE_EXP (x, se - ex); + return x; + } + + /* Handle zero, infinity, and NaN. */ + if (__glibc_likely (ex == 0x7fff || (ex | hx | lx) == 0)) + { + *eptr = 0; + return x + x; + } + + /* Subnormal. */ + x *= two65; + GET_LDOUBLE_EXP (se, x); + + ex = (se & 0x7fff) - EXPONENT_BIAS + 1; + *eptr = ex - 65; + SET_LDOUBLE_EXP (x, se - ex); + return x; } libm_alias_ldouble (__frexp, frexp) From b9d4031079535a4d000f1b222230ab90c85bb25a Mon Sep 17 00:00:00 2001 From: Vidya Lakshmi Rajagopalan Date: Sat, 21 Feb 2026 16:16:59 +0000 Subject: [PATCH 4/5] Disable compiler flags -mno-sse, -mno-mmx, -mfpmath-387 that are not supported by wasm and caused build errors --- src/glibc/sysdeps/i386/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/glibc/sysdeps/i386/Makefile b/src/glibc/sysdeps/i386/Makefile index a2e8c0b12..dbfae203b 100644 --- a/src/glibc/sysdeps/i386/Makefile +++ b/src/glibc/sysdeps/i386/Makefile @@ -48,7 +48,7 @@ endif # the first 3 mm/xmm/ymm/zmm registers are used to pass vector parameters # which must be preserved. # With SSE disabled, ensure -fpmath is not set to use sse either. -rtld-CFLAGS += -mno-sse -mno-mmx -mfpmath=387 +#rtld-CFLAGS += -mno-sse -mno-mmx -mfpmath=387 ifeq ($(subdir),elf) CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ $(rtld-CFLAGS)) From af4edfb34bf7215e2f9d3da29456dc4c64ea937b Mon Sep 17 00:00:00 2001 From: Vidya Lakshmi Rajagopalan Date: Sat, 21 Feb 2026 16:22:28 +0000 Subject: [PATCH 5/5] Disable ELF symbol versioning and hidden visibility in glibc shared builds which caused undefined symbol error for pow etc --- scripts/make_glibc_and_sysroot.sh | 2 +- src/glibc/include/libc-symbols.h | 31 ++++++++----------------------- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/scripts/make_glibc_and_sysroot.sh b/scripts/make_glibc_and_sysroot.sh index c9a730799..812e0f7e1 100755 --- a/scripts/make_glibc_and_sysroot.sh +++ b/scripts/make_glibc_and_sysroot.sh @@ -17,7 +17,7 @@ SYSROOT_ARCHIVE="$SYSROOT/lib/wasm32-wasi/libc.a" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" # Define common flags -CFLAGS="--target=wasm32-unknown-wasi -v -Wno-int-conversion -std=gnu11 -fgnu89-inline -matomics -mbulk-memory -O2 -g -fPIC" +CFLAGS="--target=wasm32-unknown-wasi -v -Wno-int-conversion -DNO_HIDDEN -std=gnu11 -fgnu89-inline -matomics -mbulk-memory -O2 -g -fPIC" WARNINGS="-Wall -Wwrite-strings -Wundef -Wstrict-prototypes -Wold-style-definition" EXTRA_FLAGS="-fmerge-all-constants -ftrapping-math -fno-stack-protector -fno-common" EXTRA_FLAGS+=" -Wp,-U_FORTIFY_SOURCE -fmath-errno -fPIE -ftls-model=local-exec" diff --git a/src/glibc/include/libc-symbols.h b/src/glibc/include/libc-symbols.h index d62b29de0..455222c8c 100644 --- a/src/glibc/include/libc-symbols.h +++ b/src/glibc/include/libc-symbols.h @@ -320,31 +320,16 @@ for linking") past the last element in SET. */ #define symbol_set_end_p(set, ptr) ((ptr) >= (void *const *) &__stop_##set) -#ifdef SHARED -# define symbol_version(real, name, version) \ - symbol_version_reference(real, name, version) -# define default_symbol_version(real, name, version) \ - _default_symbol_version(real, name, version) -/* See . */ -# ifdef __ASSEMBLER__ -# define _default_symbol_version(real, name, version) \ - _set_symbol_version (real, name@@version) -# else -# define _default_symbol_version(real, name, version) \ - _set_symbol_version (real, #name "@@" #version) -# endif - -/* Evaluates to a string literal for VERSION in LIB. */ -# define symbol_version_string(lib, version) \ - _symbol_version_stringify_1 (VERSION_##lib##_##version) -# define _symbol_version_stringify_1(arg) _symbol_version_stringify_2 (arg) -# define _symbol_version_stringify_2(arg) #arg +/* Completely disable ELF symbol versioning for all builds */ +#define symbol_version(real, name, version) +#define default_symbol_version(real, name, version) \ + strong_alias(real, name) -#else /* !SHARED */ -# define symbol_version(real, name, version) -# define default_symbol_version(real, name, version) \ +/* Provide dummy fallbacks for internal macros to prevent undefined macro errors */ +#define _default_symbol_version(real, name, version) \ strong_alias(real, name) -#endif +#define symbol_version_string(lib, version) #version + #if defined SHARED || defined LIBC_NONSHARED \ || (BUILD_PIE_DEFAULT && IS_IN (libc))