X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fldso-stubs.S;h=98f73f1551186f4de9b863a4f7aeeac63840c728;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=5e3a86cc6686f9866fedf4694f8d77ec5a4ccbbc;hpb=506253505641855dc8bb87033f7af894904f848b;p=sbcl.git diff --git a/src/runtime/ldso-stubs.S b/src/runtime/ldso-stubs.S index 5e3a86c..98f73f1 100644 --- a/src/runtime/ldso-stubs.S +++ b/src/runtime/ldso-stubs.S @@ -99,6 +99,33 @@ ldso_stub__ ## fct: ; \ nop /* delay slot*/ ; \ .L ## fct ## e1: ; \ .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ; + +#elif defined LISP_FEATURE_MIPS + +/* KLUDGE: set up the vital fifth argument, passed on the + stack. Do this unconditionally, even if the stub is for a + function with few arguments: it can't hurt. We only do this for + the fifth argument, as the first four are passed in registers + and we apparently don't ever need to pass six arguments to a + libc function. -- CSR, 2003-10-29 */ + +#define LDSO_STUBIFY(fct) \ +.globl ldso_stub__ ## fct ; \ + .type ldso_stub__ ## fct,@function ; \ +ldso_stub__ ## fct: ; \ + addiu $29,-48 ; \ + sw $28,40($29) ; \ + sw $31,44($29) ; \ + lw $25,64($29) ; \ + sw $25,16($29) ; \ + la $25, fct ; \ + jalr $25 ; \ + lw $31,44($29) ; \ + lw $28,40($29) ; \ + addiu $29,48 ; \ + jr $31 ; \ +.L ## fct ## e1: ; \ + .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ; #else #error unsupported CPU architecture @@ -123,10 +150,12 @@ ldso_stub__ ## fct: ; \ LDSO_STUBIFY(connect) LDSO_STUBIFY(cosh) LDSO_STUBIFY(creat) +#ifndef LISP_FEATURE_DARWIN LDSO_STUBIFY(dlclose) LDSO_STUBIFY(dlerror) LDSO_STUBIFY(dlopen) LDSO_STUBIFY(dlsym) +#endif LDSO_STUBIFY(dup) LDSO_STUBIFY(dup2) LDSO_STUBIFY(execve) @@ -218,7 +247,7 @@ ldso_stub__ ## fct: ; \ * Note: There might be some other functions in this category as well. * E.g. I notice tanh() and acos() in the list above.. -- WHN 2001-06-07 */ -#if !defined __i386__ +#if !defined LISP_FEATURE_X86 LDSO_STUBIFY(sin) LDSO_STUBIFY(cos) LDSO_STUBIFY(tan)