X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tools-for-build%2Fldso-stubs.lisp;h=132c44a9c4a5630ecc2d438a365819adbd4f60eb;hb=7c7e6276719b8d40fddec2070cad81064a25c8ed;hp=3c6bc3a06bc49e20c3228d1672056ff7f4db2c79;hpb=fab1ba8d4e92ecb5d496577fc205675218911b1d;p=sbcl.git diff --git a/tools-for-build/ldso-stubs.lisp b/tools-for-build/ldso-stubs.lisp index 3c6bc3a..132c44a 100644 --- a/tools-for-build/ldso-stubs.lisp +++ b/tools-for-build/ldso-stubs.lisp @@ -32,13 +32,13 @@ #!+sparc (defun ldso-stubify (fct str) (apply #'format str " -.globl ldso_stub__~A ; \ - FUNCDEF(ldso_stub__~A) ; \ -ldso_stub__~A: ; \ - sethi %hi(~A),%g1 ; \ - jmpl %g1+%lo(~A),%g0 ; \ - nop /* delay slot*/ ; \ -.L~Ae1: ; \ +.globl ldso_stub__~A ; \\ + FUNCDEF(ldso_stub__~A) ; \\ +ldso_stub__~A: ; \\ + sethi %hi(~A),%g1 ; \\ + jmpl %g1+%lo(~A),%g0 ; \\ + nop /* delay slot*/ ; \\ +.L~Ae1: ; \\ .size ldso_stub__~A,.L~Ae1-ldso_stub__~A ;~%" (make-list 9 :initial-element fct))) @@ -46,7 +46,9 @@ ldso_stub__~A: ; \ /* This is an automatically generated file, please do not hand-edit it. * See the program tools-for-build/ldso-stubs.lisp. */ +#ifndef LANGUAGE_ASSEMBLY #define LANGUAGE_ASSEMBLY +#endif #include \"sbcl.h\"" #!+sparc " @@ -55,59 +57,59 @@ ldso_stub__~A: ; \ #endif .text" -#!+x86 " -#define LDSO_STUBIFY(fct) \ - .align 16 ; \ -.globl ldso_stub__ ## fct ; \ - .type ldso_stub__ ## fct,@function ; \ -ldso_stub__ ## fct: ; \ - jmp fct ; \ -.L ## fct ## e1: ; \ +#!+(or x86 x86-64) " +#define LDSO_STUBIFY(fct) \\ + .align 16 ; \\ +.globl ldso_stub__ ## fct ; \\ + .type ldso_stub__ ## fct,@function ; \\ +ldso_stub__ ## fct: ; \\ + jmp fct ; \\ +.L ## fct ## e1: ; \\ .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;" ;;; osf1 has ancient cpp that doesn't do ## #!+(and osf1 alpha) " -#define LDSO_STUBIFY(fct) \ -.globl ldso_stub__/**/fct ; \ -ldso_stub__/**/fct: ; \ - jmp fct ; \ +#define LDSO_STUBIFY(fct) \\ +.globl ldso_stub__/**/fct ; \\ +ldso_stub__/**/fct: ; \\ + jmp fct ; \\ .L/**/fct/**/e1: ;" ;;; but there's no reason we need to put up with that on modern (Linux) OSes #!+(and linux alpha) " -#define LDSO_STUBIFY(fct) \ -.globl ldso_stub__ ## fct ; \ - .type ldso_stub__ ## fct,@function ; \ -ldso_stub__ ## fct: ; \ - jmp fct ; \ -.L ## fct ## e1: ; \ +#define LDSO_STUBIFY(fct) \\ +.globl ldso_stub__ ## fct ; \\ + .type ldso_stub__ ## fct,@function ; \\ +ldso_stub__ ## fct: ; \\ + jmp fct ; \\ +.L ## fct ## e1: ; \\ .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;" #!+(and linux ppc) " -#define LDSO_STUBIFY(fct) \ -.globl ldso_stub__ ## fct ; \ - .type ldso_stub__ ## fct,@function ; \ -ldso_stub__ ## fct: ; \ - b fct ; \ -.L ## fct ## e1: ; \ +#define LDSO_STUBIFY(fct) \\ +.globl ldso_stub__ ## fct ; \\ + .type ldso_stub__ ## fct,@function ; \\ +ldso_stub__ ## fct: ; \\ + b fct ; \\ +.L ## fct ## e1: ; \\ .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;" #!+(and darwin ppc) " -#define LDSO_STUBIFY(fct) @\ -.text @\ -.globl ldso_stub___ ## fct @\ -ldso_stub___ ## fct: @\ - b ldso_stub__ ## fct ## stub @\ -.symbol_stub ldso_stub__ ## fct ## stub: @\ -.indirect_symbol _ ## fct @\ - lis r11,ha16(ldso_stub__ ## fct ## $lazy_ptr) @\ - lwz r12,lo16(ldso_stub__ ## fct ## $lazy_ptr)(r11) @\ - mtctr r12 @\ - addi r11,r11,lo16(ldso_stub__ ## fct ## $lazy_ptr) @\ - bctr @\ -.lazy_symbol_pointer @\ -ldso_stub__ ## fct ## $lazy_ptr: @\ - .indirect_symbol _ ## fct @\ +#define LDSO_STUBIFY(fct) @\\ +.text @\\ +.globl ldso_stub___ ## fct @\\ +ldso_stub___ ## fct: @\\ + b ldso_stub__ ## fct ## stub @\\ +.symbol_stub ldso_stub__ ## fct ## stub: @\\ +.indirect_symbol _ ## fct @\\ + lis r11,ha16(ldso_stub__ ## fct ## $lazy_ptr) @\\ + lwz r12,lo16(ldso_stub__ ## fct ## $lazy_ptr)(r11) @\\ + mtctr r12 @\\ + addi r11,r11,lo16(ldso_stub__ ## fct ## $lazy_ptr) @\\ + bctr @\\ +.lazy_symbol_pointer @\\ +ldso_stub__ ## fct ## $lazy_ptr: @\\ + .indirect_symbol _ ## fct @\\ .long dyld_stub_binding_helper" ;;; KLUDGE: set up the vital fifth argument, passed on the @@ -116,24 +118,34 @@ ldso_stub__ ## fct ## $lazy_ptr: @\ ;;; 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 +;;; Expanded to 8 arguments regardless. -- ths, 2005-03-24 #!+mips " -#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 ;")) +#define LDSO_STUBIFY(fct) \\ + .globl ldso_stub__ ## fct ; \\ + .type ldso_stub__ ## fct,@function ; \\ + .ent ldso_stub__ ## fct ; \\ +ldso_stub__ ## fct: ; \\ + .set noat ; \\ + addiu $29,-48 ; \\ + sw $28,40($29) ; \\ + sw $31,44($29) ; \\ + lw $25,64($29) ; \\ + lw $1,68($29) ; \\ + sw $25,16($29) ; \\ + sw $1,20($29) ; \\ + lw $25,72($29) ; \\ + lw $1,76($29) ; \\ + sw $25,24($29) ; \\ + sw $1,28($29) ; \\ + .set at ; \\ + la $25, fct ; \\ + jalr $25 ; \\ + lw $31,44($29) ; \\ + lw $28,40($29) ; \\ + addiu $29,48 ; \\ + jr $31 ; \\ + .end ldso_stub__ ## fct ; \\ + .size ldso_stub__ ## fct,.-ldso_stub__ ## fct ;")) (defvar *stubs* (append '("accept" @@ -198,6 +210,8 @@ ldso_stub__ ## fct: ; \ "malloc" "memmove" "mkdir" + "nanosleep" + "nl_langinfo" "open" "opendir" "pipe" @@ -258,6 +272,8 @@ ldso_stub__ ## fct: ; \ "dlerror" "dlopen" "dlsym") + #!+os-provides-dladdr + '("dladdr") #!-(and sparc sunos) ;; !defined(SVR4) '("sigsetmask")))