Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions scripts/make_archive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: this is likely due to the special wasm routine for python build as python do treat wasm build slightly different

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
2 changes: 1 addition & 1 deletion scripts/make_glibc_and_sysroot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions scripts/object_lists/libc_objects.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 8 additions & 23 deletions src/glibc/include/libc-symbols.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <libc-symver.h>. */
# 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))
Expand Down
2 changes: 1 addition & 1 deletion src/glibc/sysdeps/i386/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would prefer to remove rather than comment out? leave a comment that it was removed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also with comments what are these flags for and why they should be removed for wasm build

ifeq ($(subdir),elf)
CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
$(rtld-CFLAGS))
Expand Down
98 changes: 49 additions & 49 deletions src/glibc/sysdeps/ieee754/ldbl-96/s_frexpl.c
Original file line number Diff line number Diff line change
@@ -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
<https://www.gnu.org/licenses/>. */

#include <float.h>
#include <math.h>
#include <math_private.h>
#include <libm-alias-ldouble.h>

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)