Skip to content

WIP : Glibc fixes to fix build errors and undefined symbol errors#793

Open
vidyalakshmir wants to merge 5 commits intomainfrom
glibc_fixes
Open

WIP : Glibc fixes to fix build errors and undefined symbol errors#793
vidyalakshmir wants to merge 5 commits intomainfrom
glibc_fixes

Conversation

@vidyalakshmir
Copy link
Contributor

This PR does additional glibc fixes:

  1. It adds a placeholder for libdl.a which is required for apps like python

  2. Adds unwind_def object file for libc.a

  3. Updated s_frexpl.c with latest glibc code to fix the build error. Essentially control flow always matched #else of the preprocessing directive which was causing build error for the file.

  4. Compiler flags -mno-sse, -mno-mmx and -mfpmath-387 were used to build files within elf/ for shared builds and this was compilation errors as these flags are not supported for wasm. Hence, removed these flags and all files within elf/ are successfully compiled and object files are created.

  5. Undefined symbol error were observed for 'pow' and other functions while running tests with glibc shared build. WebAssembly does not support ELF-style symbol versioning (.symver).
    When compiling glibc shared objects (.os), the Clang Wasm backend silently drops public symbols (like pow) that are wrapped in these versioning macros. Furthermore, since Wasmtime does not use the
    standard Linux ld.so dynamic loader, glibc's internal PLT-bypassing and hidden visibility mechanisms are incompatible. This commit updates include/libc-symbols.h to:

  • Strip ELF versioning in SHARED builds by redefining symbol_version and default_symbol_version to fallback to standard C strong_alias and weak_alias macros.
  • Disable the visibility("hidden") attribute block for shared builds (acting as a hard guarantee alongside CFLAGS="-DNO_HIDDEN").

These changes force the glibc shared build to emit standard, globally visible symbols, mirroring the behavior of static (.o) builds and allowing the Clang Wasm backend to correctly link the library.

@vidyalakshmir vidyalakshmir changed the title Glibc fixes WIP : Glibc fixes Feb 21, 2026
@github-actions
Copy link
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases152
Number of Successes152
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.046018s4.189006s
Success
chdir_getcwd.cSuccessNone0.047374s4.198285s
Success
chmod.cSuccessNone0.052237s4.172909s
Success
clock_gettime_highlevel.cSuccessNone0.118706s4.378401s
Success
clock_gettime_simple.cSuccessNone0.041784s4.143699s
Success
cloexec.cSuccessNone0.051545s3.824127s
Success
close.cSuccessNone0.057705s4.273545s
Success
creat_access.cSuccessNone0.050358s4.157963s
Success
doubleclose.cSuccessNone0.043477s3.797801s
Success
dup.cSuccessNone0.043206s4.186953s
Success
dup2.cSuccessNone0.049614s3.791209s
Success
dup3.cSuccessNone0.046615s4.181550s
Success
dupwrite.cSuccessNone0.050211s3.768605s
Success
etc_conf.cSuccessNone0.044744s4.141360s
Success
fchdir.cSuccessNone0.052752s4.218320s
Success
fchmod.cSuccessNone0.055177s4.183563s
Success
fcntl.cSuccessNone0.049814s4.171949s
Success
fdatasync.cSuccessNone0.048162s4.151198s
Success
filetest.cSuccessNone0.049398s3.766940s
Success
filetest1000.cSuccessNone0.056659s3.802644s
Success
flock.cSuccessNone0.056518s4.216664s
Success
fstat.cSuccessNone0.051896s4.167703s
Success
fstatfs.cSuccessNone0.044893s4.158877s
Success
fsync.cSuccessNone0.048863s4.138737s
Success
ftruncate.cSuccessNone0.054305s4.223882s
Success
getcwd.cSuccessNone0.046854s4.187881s
Success
getrandom.cSuccessNone0.049867s4.184589s
Success
ioctl.cSuccessNone0.053465s4.185844s
Success
link.cSuccessNone0.053545s4.184707s
Success
lseek.cSuccessNone0.054389s4.234311s
Success
mkdir_rmdir.cSuccessNone0.050647s4.173029s
Success
nocancel_io.cSuccessNone0.053605s5.474023s
Success
open.cSuccessNone0.045633s4.169665s
Success
pread_pwrite.cSuccessNone0.047392s4.148593s
Success
printf.cSuccessNone0.041026s3.789164s
Success
read.cSuccessNone0.050018s4.151651s
Success
readbytes.cSuccessNone0.046519s3.792679s
Success
readlink.cSuccessNone0.050400s4.192831s
Success
readlinkat.cSuccessNone0.050921s4.150990s
Success
rename.cSuccessNone0.052906s4.185595s
Success
sc-writev.cSuccessNone0.050187s4.166446s
Success
stat.cSuccessNone0.051623s4.154864s
Success
statfs.cSuccessNone0.045521s4.184919s
Success
sync_file_range.cSuccessNone0.049253s4.153223s
Success
truncate.cSuccessNone0.051627s4.188681s
Success
unlink.cSuccessNone0.053052s4.239991s
Success
unlinkat.cSuccessNone0.051924s4.207974s
Success
write.cSuccessNone0.043996s3.768041s
Success
writeloop.cSuccessNone0.053085s3.767312s
Success
writepartial.cSuccessNone0.049929s3.767858s
Success
writev.cSuccessNone0.052428s4.170155s
Success
Math Tests
math_link_smoke.cSuccessNone0.055112s3.822279s
Success
math_tests.cSuccessNone0.057198s4.000008s
Success
Memory Tests
brk.cSuccessNone0.048495s4.216596s
Success
malloc.cSuccessNone0.045406s3.782982s
Success
malloc_large.cSuccessNone0.047261s4.190392s
Success
memcpy.cSuccessNone0.046110s3.799231s
Success
memory_error_test.cSuccessNone0.051839s4.219513s
Success
mmap.cSuccessNone0.043313s4.200997s
Success
mmap_aligned.cSuccessNone0.045078s4.177969s
Success
mmap_complicated.cSuccessNone0.050152s4.287733s
Success
mmap_file.cSuccessNone0.053949s4.204509s
Success
mmap_shared.cSuccessNone0.051033s4.230282s
Success
mmaptest.cSuccessNone0.047070s4.187986s
Success
mprotect.cSuccessNone0.044916s4.187111s
Success
mprotect_boundary.cSuccessNone0.044504s4.176194s
Success
mprotect_end_region.cSuccessNone0.043564s4.193248s
Success
mprotect_middle_region.cSuccessNone0.043968s4.168009s
Success
mprotect_multiple_times.cSuccessNone0.045579s4.181670s
Success
mprotect_same_value.cSuccessNone0.044734s4.174078s
Success
mprotect_spanning_regions.cSuccessNone0.045874s4.190716s
Success
sbrk.cSuccessNone0.047189s4.221609s
Success
segfault.cSuccessNone0.052340s4.223013s
Success
shm.cSuccessNone0.050305s4.253792s
Success
shmtest.cSuccessNone0.045006s4.186644s
Success
vtable.cSuccessNone0.056889s3.844008s
Success
Networking Tests
dnstest.cSuccessNone0.052200s4.282257s
Success
epollcreate1.cSuccessNone0.053345s4.244143s
Success
gethostname.cSuccessNone0.046090s3.809240s
Success
getsockname.cSuccessNone0.052415s4.199970s
Success
getsockopt.cSuccessNone0.055692s4.215940s
Success
makepipe.cSuccessNone0.044199s3.803690s
Success
pipe.cSuccessNone0.053292s4.258027s
Success
pipe2.cSuccessNone0.053612s4.190076s
Success
pipeinput.cSuccessNone0.054104s4.246038s
Success
pipeinput2.cSuccessNone0.056204s4.226099s
Success
pipeonestring.cSuccessNone0.054106s4.226282s
Success
pipepong.cSuccessNone0.053936s4.239964s
Success
pipewrite.cSuccessNone0.048427s4.209744s
Success
poll.cSuccessNone0.052823s4.215938s
Success
recvfrom-sendto.cSuccessNone0.054554s4.231925s
Success
serverclient.cSuccessNone0.053774s3.827411s
Success
shutdown.cSuccessNone0.053509s3.880997s
Success
shutdown_fork.cSuccessNone0.053668s4.220476s
Success
simple-select.cSuccessNone0.053339s4.237652s
Success
simple_epoll.cSuccessNone0.052057s4.207799s
Success
socket.cSuccessNone0.051782s3.848748s
Success
socket_cloexec.cSuccessNone0.050021s4.218461s
Success
socketepoll.cSuccessNone0.049661s3.825998s
Success
socketpair.cSuccessNone0.049894s4.220102s
Success
socketselect.cSuccessNone0.051397s4.170951s
Success
tcp_connect_single.cSuccessNone0.051907s4.196513s
Success
uds-getsockname.cSuccessNone0.052019s4.208499s
Success
uds-socketselect.cSuccessNone0.052484s3.829057s
Success
Process Tests
chain_thread.cSuccessNone1.051525s5.330856s
Success
cxa_atexit_test.cSuccessNone0.047393s3.782869s
Success
exit.cSuccessNone0.048806s3.773932s
Success
fork2malloc.cSuccessNone0.052291s4.190847s
Success
fork_select.cSuccessNone0.049817s4.189430s
Success
fork_simple.cSuccessNone0.048667s4.170091s
Success
fork_syscall.cSuccessNone0.054963s4.246412s
Success
forkandopen.cSuccessNone0.051645s4.181071s
Success
forkdup.cSuccessNone0.059872s3.833250s
Success
forkexecuid.cSuccessNone0.048693s4.201392s
Success
forkexecv-arg.cSuccessNone0.049849s4.185246s
Success
forkexecv.cSuccessNone0.048409s4.184240s
Success
forkfiles.cSuccessNone0.051554s4.197036s
Success
forkmalloc.cSuccessNone0.052011s4.190929s
Success
forknodup.cSuccessNone0.051397s4.186068s
Success
function-ptr.cSuccessNone0.057243s4.161673s
Success
getegid_syscall.cSuccessNone0.052683s4.240599s
Success
getgid_syscall.cSuccessNone0.052783s4.254471s
Success
getpid.cSuccessNone0.044998s4.179169s
Success
getpid_syscall.cSuccessNone0.053739s4.221482s
Success
getppid.cSuccessNone0.050978s4.203264s
Success
getppid_syscall.cSuccessNone0.054258s4.221345s
Success
getuid.cSuccessNone0.051169s4.143194s
Success
getuid_syscall.cSuccessNone0.049712s4.224863s
Success
hello-arg.cSuccessNone0.041326s3.782309s
Success
hello.cSuccessNone0.042373s3.783040s
Success
longjmp.cSuccessNone0.043256s3.778969s
Success
mutex.cSuccessNone2.056139s6.448971s
Success
sem_forks.cSuccessNone0.053997s4.208176s
Success
setsid.cSuccessNone0.043610s3.769364s
Success
template.cSuccessNone0.050780s4.204202s
Success
test_exec_nofork.cSuccessNone0.049331s4.156108s
Success
test_unlink_open_file.cSuccessNone0.046548s3.761930s
Success
thread.cSuccessNone0.045564s4.304278s
Success
uname.cSuccessNone0.044122s4.156356s
Success
wait.cSuccessNone2.048732s5.833072s
Success
waitpid_anychild.cSuccessNone0.050851s4.170818s
Success
waitpid_syscall.cSuccessNone1.052319s5.216881s
Success
waitpid_wnohang.cSuccessNone0.051557s3.805219s
Success
Signal Tests
alarm.cSuccessNone7.051572s10.839612s
Success
setitimer.cSuccessNone7.052898s10.854904s
Success
sigalrm.cSuccessNone2.050790s5.805113s
Success
sigchld.cSuccessNone1.053827s4.850196s
Success
signal-fork.cSuccessNone4.059732s7.868402s
Success
signal-simple.cSuccessNone0.052577s3.813190s
Success
signal_fork.cSuccessNone0.047797s4.213985s
Success
signal_int_ignored.cSuccessNone2.053303s6.277477s
Success
sigprocmask.cSuccessNone1.050894s4.825200s
Success
Fail Tests

Summary

MetricCount
Total Test Cases2
Number of Successes2
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.115767s4.418154s
Success
mmap-negative2.cSuccessNone0.159295s4.075606s
Success

# 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

@rennergade rennergade left a comment

Choose a reason for hiding this comment

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

Left a minor comment. Also the title of the PR would be better to be more descriptive.

Other than that looks good, approved.

@vidyalakshmir
Copy link
Contributor Author

Thanks. Will change the title. Would like to wait to merge this since I might have additional fixes.

@vidyalakshmir vidyalakshmir changed the title WIP : Glibc fixes WIP : Glibc fixes to fix build errors and undefined symbol errors Feb 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants