65fc5205276471d97b4788f68ce185171f8323b1
[sbcl.git] / src / runtime / ldso-stubs.S
1 /*
2  * stubs for C-linkage library functions which we need to refer to 
3  * from Lisp 
4  *
5  * (But note this is only the Linux version, as per the FIXME
6  * note in the BSD version in undefineds.h.)
7  *
8  * These stubs exist for the benefit of Lisp code that needs to refer 
9  * to foreign symbols when dlsym() is not available (i.e. when dumping
10  * cold-sbcl.core, when we may be running in a host that's not SBCL,
11  * or on platforms that don't have it at all). If the runtime is
12  * dynamically linked, library functions won't be linked into it, so
13  * the map file won't show them. So, we need a bunch of stubs that
14  * nm(1) _can_ see.  
15  */
16
17 /*
18  * This software is part of the SBCL system. See the README file for
19  * more information.
20  *
21  * This software is derived from the CMU CL system, which was
22  * written at Carnegie Mellon University and released into the
23  * public domain. The software is in the public domain and is
24  * provided with absolutely no warranty. See the COPYING and CREDITS
25  * files for more information.
26  */
27 #define LANGUAGE_ASSEMBLY
28 #include "sbcl.h"
29         .text
30
31 #if defined LISP_FEATURE_X86
32         
33 #define LDSO_STUBIFY(fct)                       \
34         .align 16 ;                             \
35 .globl ldso_stub__ ## fct ;                     \
36         .type    ldso_stub__ ## fct,@function ; \
37 ldso_stub__ ## fct: ;                           \
38         jmp fct ;                               \
39 .L ## fct ## e1: ;                              \
40         .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
41
42 #elif ((defined LISP_FEATURE_OSF1) && (defined LISP_FEATURE_ALPHA))
43 /* osf1 has ancient cpp that doesn't do ## */
44 #define LDSO_STUBIFY(fct)                       \
45 .globl ldso_stub__/**/fct ;                     \
46 ldso_stub__/**/fct: ;                           \
47         jmp fct ;                               \
48 .L/**/fct/**/e1: ;                              
49
50
51 #elif ((defined LISP_FEATURE_LINUX) && (defined LISP_FEATURE_ALPHA))    
52 /* but there's no reason we need to put up with that on modern (Linux) OSes */
53 #define LDSO_STUBIFY(fct)                       \
54 .globl ldso_stub__ ## fct ;                     \
55         .type    ldso_stub__ ## fct,@function ; \
56 ldso_stub__ ## fct: ;                           \
57         jmp fct ;                               \
58 .L ## fct ## e1: ;                              \
59         .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
60
61 #elif defined LISP_FEATURE_PPC
62 #define LDSO_STUBIFY(fct)                       \
63 .globl ldso_stub__ ## fct ;                     \
64         .type    ldso_stub__ ## fct,@function ; \
65 ldso_stub__ ## fct: ;                           \
66         b fct ;                                 \
67 .L ## fct ## e1: ;                              \
68         .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
69         
70 #elif defined LISP_FEATURE_SPARC
71         
72         /* This is an attempt to follow DB's hint of sbcl-devel
73          * 2001-09-18. -- CSR */
74 #define LDSO_STUBIFY(fct)                       \
75 .globl ldso_stub__ ## fct ;                     \
76         .type    ldso_stub__ ## fct,@function ; \
77 ldso_stub__ ## fct: ;                           \
78         sethi %hi(fct),%g1      ;               \
79         jmpl %g1+%lo(fct),%g0   ;               \
80         nop /* delay slot*/     ;               \
81 .L ## fct ## e1: ;                              \
82         .size    ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;
83         
84 #else
85 #error unsupported CPU architecture
86 #endif
87         
88  LDSO_STUBIFY(accept)
89  LDSO_STUBIFY(access)
90  LDSO_STUBIFY(acos)
91  LDSO_STUBIFY(acosh)
92  LDSO_STUBIFY(asin)
93  LDSO_STUBIFY(asinh)
94  LDSO_STUBIFY(atanh)
95  LDSO_STUBIFY(bind)
96  LDSO_STUBIFY(cfgetispeed)
97  LDSO_STUBIFY(cfgetospeed)
98  LDSO_STUBIFY(cfsetispeed)
99  LDSO_STUBIFY(cfsetospeed)
100  LDSO_STUBIFY(chmod)
101  LDSO_STUBIFY(chown)
102  LDSO_STUBIFY(close)
103  LDSO_STUBIFY(closedir)
104  LDSO_STUBIFY(connect)
105  LDSO_STUBIFY(cosh)
106  LDSO_STUBIFY(creat)
107  LDSO_STUBIFY(dlclose)
108  LDSO_STUBIFY(dlerror)
109  LDSO_STUBIFY(dlopen)
110  LDSO_STUBIFY(dlsym)
111  LDSO_STUBIFY(dup)
112  LDSO_STUBIFY(dup2)
113  LDSO_STUBIFY(execve)
114  LDSO_STUBIFY(exit)
115  LDSO_STUBIFY(fchmod)
116  LDSO_STUBIFY(fchown)
117  LDSO_STUBIFY(fcntl)
118  LDSO_STUBIFY(fork)
119  LDSO_STUBIFY(free)
120  LDSO_STUBIFY(fstat)
121  LDSO_STUBIFY(fsync)
122  LDSO_STUBIFY(ftruncate)
123  LDSO_STUBIFY(getcwd)
124  LDSO_STUBIFY(getdtablesize)
125  LDSO_STUBIFY(getegid)
126  LDSO_STUBIFY(getenv)
127  LDSO_STUBIFY(getgid)
128  LDSO_STUBIFY(gethostbyaddr)
129  LDSO_STUBIFY(gethostbyname)
130  LDSO_STUBIFY(gethostname)
131  LDSO_STUBIFY(getitimer)
132  LDSO_STUBIFY(getpagesize)
133  LDSO_STUBIFY(getpeername)
134  LDSO_STUBIFY(getpgrp)
135  LDSO_STUBIFY(getpid)
136  LDSO_STUBIFY(getppid)
137  LDSO_STUBIFY(getrusage)
138  LDSO_STUBIFY(getsockname)
139  LDSO_STUBIFY(gettimeofday)
140  LDSO_STUBIFY(getuid)
141  LDSO_STUBIFY(hypot)
142  LDSO_STUBIFY(ioctl)
143  LDSO_STUBIFY(isatty)
144  LDSO_STUBIFY(kill)
145  LDSO_STUBIFY(killpg)
146  LDSO_STUBIFY(link)
147  LDSO_STUBIFY(listen)
148  LDSO_STUBIFY(log1p)
149  LDSO_STUBIFY(lseek)
150  LDSO_STUBIFY(lstat)
151  LDSO_STUBIFY(malloc)
152  LDSO_STUBIFY(memmove)
153  LDSO_STUBIFY(mkdir)
154  LDSO_STUBIFY(open)
155  LDSO_STUBIFY(opendir)
156  LDSO_STUBIFY(pipe)
157  LDSO_STUBIFY(pow)
158  LDSO_STUBIFY(read)
159  LDSO_STUBIFY(readdir)
160  LDSO_STUBIFY(readlink)
161  LDSO_STUBIFY(recv)
162  LDSO_STUBIFY(rename)
163  LDSO_STUBIFY(rmdir)
164  LDSO_STUBIFY(select)
165  LDSO_STUBIFY(send)
166  LDSO_STUBIFY(setitimer)
167  LDSO_STUBIFY(setpgrp)
168  LDSO_STUBIFY(setsid)
169 #if !defined(SVR4)
170  LDSO_STUBIFY(sigsetmask)
171 #endif
172  LDSO_STUBIFY(sinh)
173  LDSO_STUBIFY(socket)
174  LDSO_STUBIFY(stat)
175  LDSO_STUBIFY(strerror)
176  LDSO_STUBIFY(strlen)
177  LDSO_STUBIFY(symlink)
178  LDSO_STUBIFY(sync)
179  LDSO_STUBIFY(tanh)
180  LDSO_STUBIFY(tcdrain)
181  LDSO_STUBIFY(tcflow)
182  LDSO_STUBIFY(tcflush)
183  LDSO_STUBIFY(tcgetattr)
184  LDSO_STUBIFY(tcsendbreak)
185  LDSO_STUBIFY(tcsetattr)
186  LDSO_STUBIFY(truncate)
187  LDSO_STUBIFY(ttyname)
188  LDSO_STUBIFY(tzname)
189  LDSO_STUBIFY(unlink)
190  LDSO_STUBIFY(utimes)
191  LDSO_STUBIFY(wait3)    
192  LDSO_STUBIFY(write)
193
194 /*
195  * These aren't needed on the X86 because they're microcoded into the
196  * FPU, so the Lisp VOPs can implement them directly without having to
197  * call C code.
198  *
199  * Note: There might be some other functions in this category as well.
200  * E.g. I notice tanh() and acos() in the list above.. -- WHN 2001-06-07
201  */
202 #if !defined __i386__
203  LDSO_STUBIFY(sin)
204  LDSO_STUBIFY(cos) 
205  LDSO_STUBIFY(tan)      
206  LDSO_STUBIFY(atan) 
207  LDSO_STUBIFY(atan2) 
208  LDSO_STUBIFY(exp)      
209  LDSO_STUBIFY(log) 
210  LDSO_STUBIFY(log10) 
211  LDSO_STUBIFY(sqrt) 
212 #endif
213 #if defined alpha
214  LDSO_STUBIFY(ieee_get_fp_control)
215  LDSO_STUBIFY(ieee_set_fp_control)
216 #endif