Browse Source

+ netware support
+ opened was not initialized

armin 22 years ago
parent
commit
898c56890a
1 changed files with 144 additions and 1 deletions
  1. 144 1
      rtl/inc/lineinfo.pp

+ 144 - 1
rtl/inc/lineinfo.pp

@@ -551,6 +551,136 @@ end;
 {$endif beos}
 
 
+{$ifdef netware}
+{the nlm format is not documented but we have the sources for
+ binutils ;-) }    
+function LoadNlmNetware:boolean;
+type str255 = string [255];
+Const NLM_FileBegin = 'NetWare Loadable Module'#$1A;
+      NLM_InternalFixedHdrSize = 130;
+      NLM_InternalVersionHdrSize = 32;
+      NLM_InternalExtHdrSize = 124;
+var HdrChk : string[24];
+    name   : string [30];
+    valid  : boolean;
+    dataOffset,align:longint;
+
+  function getByte : byte;
+  var b : byte;
+  begin
+    blockread (f, b, 1);
+    getByte := b;
+  end;
+
+  procedure skip (bytes : integer);
+  begin
+    seek (f, filepos (f)+bytes);
+  end;
+
+  procedure skipLString;
+  begin
+    skip (getByte+1);
+  end;
+
+  function getNullString : str255;
+  var c : char;
+      s : str255;
+  begin
+    s := '';
+    c := char (getbyte);
+    while (c <> #0) do
+    begin
+      s := s + c;
+      c := char (getbyte);
+    end;
+    getNullString := s;
+  end;
+
+  function getFixString (Len : byte) : str255;
+  var i : byte;
+      s : string;
+  begin
+    s := '';
+    for i := 1 to Len do
+      s := s + char (getbyte);
+    getFixString := s;  
+  end;
+
+  procedure getLongint (var l : longint);
+  begin
+    blockread (f, l, 4);
+  end;
+
+begin
+  LoadNlmNetware:=false;
+  stabofs:=-1;
+  stabstrofs:=-1;
+  processaddress := System.NetwareCodeStartAddress;
+  setlength(HdrChk,24);
+  blockread (f,HdrChk[1],24);
+  if HdrChk <> NLM_FileBegin then exit;
+  Seek (f, NLM_InternalFixedHdrSize);
+
+  {Read the Variable header}
+  skipLString;  {Description}
+  skip (4 {Stacksize} + 4{Reserved} +5{oldThreadName});
+
+  skipLString;  {ScreenName}
+  skipLString;  {threadName}
+
+  dataOffset := 0;
+
+  valid := true;
+  repeat
+    name := getFixString (8);
+    if (name = 'VeRsIoN#') then
+      Skip (NLM_InternalVersionHdrSize-8)
+    else
+    if (name = 'CoPyRiGh') then
+    begin
+      skip(2);  // T=
+      skipLString;  {Copyright}
+    end else
+    if (name = 'MeSsAgEs') then
+      skip (NLM_InternalExtHdrSize - 8)
+    else
+    if (name = 'CuStHeAd') then
+    begin
+      Skip(4); {hdrLength}
+      getLongint (dataOffset);
+      Skip(4+8); {dataLength(4), dataStamp(8)  or hdrLength-4 ?}
+      valid := false;
+    end else
+      Valid := false;
+  until not valid;
+
+  if dataOffset = 0 then exit;
+
+  Seek (F, dataOffset);
+  Repeat
+    Name := GetNullString;
+    align := 4 - ((length (Name) + 1) MOD 4);
+    Skip (align);
+    if (Name = '.stab') then
+    begin
+      getLongint (stabofs);
+      getLongint (stabcnt); {stabLength}
+      stabcnt:=stabcnt div sizeof(tstab);
+    end else
+    if (Name = '.stabstr') then
+    begin
+      getLongint (stabStrOfs);
+      Skip (4);  {stabStrLength}
+      if stabofs <> 0 then name := '';  {skip other sections}
+    end else
+      Skip (8);
+  until Name = '';
+  LoadNlmNetware := (stabofs<>-1) and (stabstrofs<>-1);
+end;
+{$endif}
+
+
+
 {****************************************************************************
                           Executable Open/Close
 ****************************************************************************}
@@ -611,6 +741,13 @@ begin
      OpenStabs:=true;
      exit;
    end;
+{$endif}
+{$ifdef netware}
+  if LoadNlmNetware then
+   begin
+     OpenStabs := true;
+     exit;
+   end;
 {$endif}
   CloseStabs;
 end;
@@ -773,6 +910,7 @@ end;
 
 initialization
   BackTraceStrFunc:=@StabBackTraceStr;
+  opened := false;
 
 finalization
   if opened then
@@ -781,7 +919,11 @@ finalization
 end.
 {
   $Log$
-  Revision 1.16  2003-03-17 14:30:11  peter
+  Revision 1.17  2003-03-17 15:30:06  armin
+  + netware support
+  + opened was not initialized
+
+  Revision 1.16  2003/03/17 14:30:11  peter
     * changed address parameter/return values to pointer instead
       of longint
 
@@ -808,3 +950,4 @@ end.
    * more Renamefest
 
 }
+