Przeglądaj źródła

* fixed OpenBSD shared library initialization

git-svn-id: trunk@41752 -
nickysn 6 lat temu
rodzic
commit
fb3d287971
1 zmienionych plików z 6 dodań i 55 usunięć
  1. 6 55
      rtl/openbsd/x86_64/si_dll.inc

+ 6 - 55
rtl/openbsd/x86_64/si_dll.inc

@@ -22,55 +22,18 @@ procedure _init; external name '_init';
 procedure _init; weakexternal name '_init';
 {$endif VER3_0}
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); forward;
-
-procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
-  asm
-    movq    %rbx,%r9
-    movq    %rcx,%r8
-    movq    %rdx,%rcx
-    movq    (%rsp),%rdi
-    leaq    16(%rsp,%rdi,8),%rdx
-    leaq    8(%rsp),%rsi
-    subq    $8,%rsp
-    andq    $0xFFFFFFFFFFFFFFF0,%rsp
-    addq    $8,%rsp
-    jmp     _FPC_proc___start
-  end;
-
-procedure _FPC_proc_haltproc; forward;
-function _strrchr(str: PChar; character: LongInt): PChar; forward;
-
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord);
+procedure _FPC_shared_lib_start; cdecl; public name 'FPC_LIB_START';
   var
     I: SizeUInt;
   begin
-    environ:=envp;
-    operatingsystem_parameter_envp:=envp;
-    operatingsystem_parameter_argc:=argc;
-    operatingsystem_parameter_argv:=argv;
-    if argv[0]<>nil then
-      begin
-        __progname:=_strrchr(argv[0], Ord('/'));
-        if __progname<>nil then
-          Inc(__progname)
-        else
-          __progname:=argv[0];
-        I:=Low(__progname_storage);
-        while (I<High(__progname_storage)) and (__progname[I]<>#0) do
-          begin
-            __progname_storage[I]:=__progname[I-Low(__progname_storage)];
-            Inc(I);
-          end;
-        __progname_storage[I]:=#0;
-        __progname:=@__progname_storage;
-      end;
+    { todo: figure out if there's any way to obtain these in OpenBSD shared libraries }
+    environ:=nil;
+    operatingsystem_parameter_envp:=nil;
+    operatingsystem_parameter_argc:=0;
+    operatingsystem_parameter_argv:=nil;
     if Assigned(@_init) then
       _init;
     PascalMain;
-    asm
-      jmp     _FPC_proc_haltproc@PLT
-    end;
   end;
 
 procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
@@ -91,15 +54,3 @@ procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
     movq    %rax,%rbx
     movq    $-1,%rax
   end;
-
-function _strrchr(str: PChar; character: LongInt): PChar; public name '_strrchr';
-  begin
-    _strrchr:=nil;
-    repeat
-      if str^=Chr(character) then
-        _strrchr:=str;
-      if str^<>#0 then
-        Inc(str);
-    until str^=#0;
-  end;
-