Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2023-08-01 15:16:40 +0300
committerCorinna Vinschen <corinna@vinschen.de>2023-08-01 15:16:40 +0300
commit0e711d6cc9b5206335fe8562817b6d5e6cad876e (patch)
tree5888b3d58134a6d131069df870376deb0b8f9b6a /winsup/cygwin/autoload.cc
parent4f258c55e87fe4c0ea7d5703c32890b63295bc23 (diff)
Cygwin: autoload: introduce LoadDLLfunc_pfx_only
This macro loads and defines a function just as usual, except that the Windows function is exposed only with the prefix _win32_. So Windows select (the immediate victim) is only exposed as _win32_select. That allows to autoload the windows function without collision with a Cygwin function of the same name. For a start, only define the most simple macro, setting all extensions to 0. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/autoload.cc')
-rw-r--r--winsup/cygwin/autoload.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
index c8909caff..c9ad92530 100644
--- a/winsup/cygwin/autoload.cc
+++ b/winsup/cygwin/autoload.cc
@@ -123,6 +123,33 @@ _win32_" #name ": \n\
.asciz \"" #name "\" \n\
.text \n\
");
+
+/* Do not export function "foo" as "foo". Only export it as "_win32_foo".
+ That allows to autoload and use a Windows function having the same name
+ as a Cygwin function. Namely select. */
+#define LoadDLLfunc_pfx_only(name, dllname) \
+ LoadDLLprime (dllname, dll_func_load, 0) \
+ __asm__ (" \n\
+ .section ." #dllname "_autoload_text,\"wx\" \n\
+ .global _win32_" #name " \n\
+ .align 16 \n\
+_win32_" #name ": \n\
+ movq 3f(%rip),%rax \n\
+ jmp *%rax \n\
+1:movq 2f(%rip),%rax \n\
+ push %rbp # Keep 16 byte aligned \n\
+ push %r9 \n\
+ push %r8 \n\
+ push %rdx \n\
+ push %rcx \n\
+ call *(%rax) \n\
+2:.quad ." #dllname "_info \n\
+ .hword 0 \n\
+ .hword 0 \n\
+3:.quad 1b \n\
+ .asciz \"" #name "\" \n\
+ .text \n\
+");
#else
#error unimplemented for this target
#endif