X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tools-for-build%2Fldso-stubs.lisp;h=0360b1d8d3375292304fa378e02ec55d43bdb2f2;hb=dedc93e4b7ed42ee697006b017e4a6095be3c5b7;hp=6d33c02d694d357772d8bef253d587157d315055;hpb=e8607908388c96db633bb7046a4b97844642768b;p=sbcl.git diff --git a/tools-for-build/ldso-stubs.lisp b/tools-for-build/ldso-stubs.lisp index 6d33c02..0360b1d 100644 --- a/tools-for-build/ldso-stubs.lisp +++ b/tools-for-build/ldso-stubs.lisp @@ -57,7 +57,7 @@ ldso_stub__~A: ; \\ #endif .text" -#!+(or x86 x86-64) " +#!+(and (or x86 x86-64) (not darwin)) " #define LDSO_STUBIFY(fct) \\ .align 16 ; \\ .globl ldso_stub__ ## fct ; \\ @@ -85,7 +85,7 @@ ldso_stub__ ## fct: ; \\ .L ## fct ## e1: ; \\ .size ldso_stub__ ## fct,.L ## fct ## e1-ldso_stub__ ## fct ;" -#!+(and linux ppc) " +#!+(and (not darwin) ppc) " #define LDSO_STUBIFY(fct) \\ .globl ldso_stub__ ## fct ; \\ .type ldso_stub__ ## fct,@function ; \\ @@ -112,6 +112,33 @@ ldso_stub__ ## fct ## $lazy_ptr: @\\ .indirect_symbol _ ## fct @\\ .long dyld_stub_binding_helper" +;;; darwin x86 assembler is weird and follows the ppc assembler syntax +#!+(and darwin x86) " +#define LDSO_STUBIFY(fct) \\ +.text ; \\ + .align 4 ; \\ +.globl ldso_stub___ ## fct ; \\ +ldso_stub___ ## fct: ; \\ + jmp L ## fct ## $stub ; \\ + .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 ; \\ +L ## fct ## $stub: ; \\ + .indirect_symbol _ ## fct ; \\ + hlt ; \\ + hlt ; \\ + hlt ; \\ + hlt ; \\ + hlt ; \\ + .subsections_via_symbols ; " + +;;; darwin x86-64 +#!+(and darwin x86-64) " +#define LDSO_STUBIFY(fct) \\ + .align 4 ; \\ +.globl ldso_stub___ ## fct ; \\ +ldso_stub___ ## fct: ; \\ + jmp _ ## fct ; \\ +.L ## fct ## e1: ; " + ;;; 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 @@ -267,6 +294,14 @@ ldso_stub__ ## fct: ; \\ #!+alpha '("ieee_get_fp_control" "ieee_set_fp_control") + ;; FIXME: After 1.0 this should be made + ;; #!-linkage-table, as we only need these stubs if + ;; we don't have linkage-table. Done this way now to + ;; cut down on the number of ports affected. + #!-(or win32 darwin freebsd netbsd) + '("ptsname" + "grantpt" + "unlockpt") #!-darwin '("dlclose" "dlerror" @@ -274,7 +309,7 @@ ldso_stub__ ## fct: ; \\ "dlsym") #!+os-provides-dladdr '("dladdr") - #!-(and sparc sunos) ;; !defined(SVR4) + #!-sunos ;; !defined(SVR4) '("sigsetmask"))) (with-open-file (f "src/runtime/ldso-stubs.S" :direction :output :if-exists :supersede)