浏览代码

Fix phdr pointer increment and use envp variable from system unit for Solaris operating system

git-svn-id: trunk@33008 -
pierre 9 年之前
父节点
当前提交
3de617c79e
共有 1 个文件被更改,包括 5 次插入2 次删除
  1. 5 2
      rtl/inc/exeinfo.pp

+ 5 - 2
rtl/inc/exeinfo.pp

@@ -800,9 +800,12 @@ type
 {$if defined(ELF32) or defined(ELF64) or defined(BEOS)}
 
 {$ifdef FIND_BASEADDR_ELF}
+{$ifndef SOLARIS}
+  { Solaris has envp variable in system unit interface,
+    so we directly use system envp variable in that case }
 var
   envp : ppchar external name 'operatingsystem_parameter_envp';
-
+{$endif not SOLARIS}
 procedure GetExeInMemoryBaseAddr(addr : pointer; var BaseAddr : pointer;
                                  var filename : openstring);
 type
@@ -860,7 +863,7 @@ begin
           begin
             if (phdr^.p_type = 1 {PT_LOAD}) and (ptruint(phdr^.p_vaddr) < found_addr) then
               found_addr:=phdr^.p_vaddr;
-            inc(phdr, phdr_size);
+            inc(pointer(phdr), phdr_size);
           end;
       {$ifdef DEBUG}
       end