summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ldso/nt32/dlsym.s24
-rw-r--r--src/ldso/nt32/dynlink.c5
-rw-r--r--src/ldso/nt64/dlsym.s20
-rw-r--r--src/ldso/nt64/dynlink.c5
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);