<gex/i386.h> and rt/i386.c: gex_i386_call runs i386 code from the
program (cdecl or stdcall words, EDX:EAX or ST0), through gex's function
table to a return pad, as native Wine's gexrt does; GEX_I386_ENTRY and
gex_i386_bind let i386 code call the program back, its C running on the
guest thread's stack below the guest's frames, nested to any depth. The
link adds rt/i386.o and the container's flags (--guest-i386
--linux-space). install.sh builds the object against the gex_abi.h of an
x86 gexc; without one the flag is refused at link time.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_c8c04c00da9a4525ab21b0b9f146c598
glibc's group shadow functions (getsgnam_r, fgetsgent, putsgent and the
rest): systemd's user records read the file and sysusers writes it; musl
has no gshadow.h. tests/gexcc/gshadow.c compares parsing, ERANGE and
writing with the host's glibc.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_40f26e8988a74ea098d8bc80ff68287c
systemd checks its log and journal formats with it; musl has no
<printf.h>. Types as glibc gives them, sized for the target (%lld and %jd
are long long on wasm32). tests/gexcc/printfformat.c compares the sizes
with the host's glibc.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_40f26e8988a74ea098d8bc80ff68287c
- `.symver impl, name@@V`: the default version's name becomes an alias
of impl (C), as programs link to it (fuse's fuse_parse_cmdline,
lksctp's sctp_connectx); older versions' names are still left out.
- A shared library may leave symbols to the program or another library,
bound at load (libfl's main calls yylex), as ld -shared does; -z defs
or --no-undefined still asks for every one defined.
- features.h over musl's: _GNU_SOURCE gives the LFS64 names (pread64,
off64_t), as glibc's does (libpciaccess).
- Warnings, not errors, where GCC warns and clang errs: a size_t * for a
uint32_t * (size_t is unsigned long only on wasm32; kmod), `register`
in C++17 (libGLU), an unused static inline under -Werror (keyutils).
- -v on a link is verbose, not a query: CMake's compiler ABI check
linked nothing and every CMAKE_SIZEOF_VOID_P was empty (libjpeg-turbo).
driver.sh checks each.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_40f26e8988a74ea098d8bc80ff68287c
clang's wasm SjLj lowering recognises only calls to setjmp. sigsetjmp
returned 0 once and a siglongjmp to it was an uncaught exception (bash
trapped on its first error: 'indirect call type mismatch'). gexcc's
include/setjmp.h (searched before musl's, include_next) makes both
macros over setjmp; rt/sigsetjmp.c saves the mask before and restores it
on the second return, as musl's assembly does elsewhere. No musl change.
tests/gexcc/sigjmp.c: out of nested calls, out of a signal handler (the
mask restored), _setjmp/_longjmp.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_f83b79c55d9e472396aae1a74ab72f57