diff options
author | midipix <writeonce@midipix.org> | 2025-05-13 02:53:35 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-05-13 02:53:35 +0000 |
commit | 8b6d8ffe409b377cc974de9534cf951a74f05590 (patch) | |
tree | 1ff76fa0e6184ed00e25dbb0e51cf8d9b7cb4fc3 /src | |
parent | 415adf92a4337acfaf9eac16c72729099440e0e3 (diff) | |
download | mmglue-8b6d8ffe409b377cc974de9534cf951a74f05590.tar.bz2 mmglue-8b6d8ffe409b377cc974de9534cf951a74f05590.tar.xz |
Diffstat (limited to 'src')
-rw-r--r-- | src/ldso/nt32/dlsym.s | 24 | ||||
-rw-r--r-- | src/ldso/nt32/dynlink.c | 5 | ||||
-rw-r--r-- | src/ldso/nt64/dlsym.s | 20 | ||||
-rw-r--r-- | src/ldso/nt64/dynlink.c | 5 |
4 files changed, 48 insertions, 6 deletions
diff --git a/src/ldso/nt32/dlsym.s b/src/ldso/nt32/dlsym.s index e69de29..f9e104d 100644 --- a/src/ldso/nt32/dlsym.s +++ b/src/ldso/nt32/dlsym.s @@ -0,0 +1,24 @@ +############################################################################ +## mmglue: midipix architecture- and target-specific bits for musl libc ## +## Copyright (C) 2013--2025 SysDeer Technologies, LLC ## +## Released under GPLv2 and GPLv3; see COPYING.MMGLUE. ## +############################################################################ + +.text +.global _dlsym + +.def _dlsym; .scl 2; .type 32; .endef + +_dlsym: + movl %esp,%ecx # save stack pointer + push (%ecx) # original return address + push 12(%ecx) # original second argument + push 12(%ecx) # original first argument + call ___dlsym + movl %ecx,%esp # restore stack pointer + + .section .got$_dlsym,"r" + .global __imp__dlsym +__imp__dlsym: + .long _dlsym + .linkonce discard diff --git a/src/ldso/nt32/dynlink.c b/src/ldso/nt32/dynlink.c index eddd8cd..032f679 100644 --- a/src/ldso/nt32/dynlink.c +++ b/src/ldso/nt32/dynlink.c @@ -173,9 +173,9 @@ int __dlinfo(void * dso, int req, void * res) return (__ldso_vtbl->dlinfo(dso,req,res)) ? -1 : 0; } -void *__dlsym(void * restrict p, const char * restrict s) +void *__dlsym(void * restrict p, const char * restrict s, void * restrict a) { - return __ldso_vtbl->dlsym(p,s,0); + return __ldso_vtbl->dlsym(p,s,a); } int dlclose(void *p) @@ -188,6 +188,5 @@ char * dlerror(void) return __ldso_vtbl->dlerror(); } -weak_alias(__dlsym,dlsym); weak_alias(__dladdr,dladdr); weak_alias(__dlinfo,dlinfo); diff --git a/src/ldso/nt64/dlsym.s b/src/ldso/nt64/dlsym.s index e69de29..0677d8c 100644 --- a/src/ldso/nt64/dlsym.s +++ b/src/ldso/nt64/dlsym.s @@ -0,0 +1,20 @@ +############################################################################ +## mmglue: midipix architecture- and target-specific bits for musl libc ## +## Copyright (C) 2013--2025 SysDeer Technologies, LLC ## +## Released under GPLv2 and GPLv3; see COPYING.MMGLUE. ## +############################################################################ + +.text +.global dlsym + +.def dlsym; .scl 2; .type 32; .endef + +dlsym: + movq (%rsp),%r8 # original return address as third parameter + jmp __dlsym + + .section .got$dlsym,"r" + .global __imp_dlsym +__imp_dlsym: + .quad dlsym + .linkonce discard diff --git a/src/ldso/nt64/dynlink.c b/src/ldso/nt64/dynlink.c index eddd8cd..032f679 100644 --- a/src/ldso/nt64/dynlink.c +++ b/src/ldso/nt64/dynlink.c @@ -173,9 +173,9 @@ int __dlinfo(void * dso, int req, void * res) return (__ldso_vtbl->dlinfo(dso,req,res)) ? -1 : 0; } -void *__dlsym(void * restrict p, const char * restrict s) +void *__dlsym(void * restrict p, const char * restrict s, void * restrict a) { - return __ldso_vtbl->dlsym(p,s,0); + return __ldso_vtbl->dlsym(p,s,a); } int dlclose(void *p) @@ -188,6 +188,5 @@ char * dlerror(void) return __ldso_vtbl->dlerror(); } -weak_alias(__dlsym,dlsym); weak_alias(__dladdr,dladdr); weak_alias(__dlinfo,dlinfo); |