mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-28 07:31:23 +02:00
* new try for correct debug info generation
This commit is contained in:
parent
44f5d0a911
commit
c89458e721
@ -23,6 +23,9 @@
|
||||
unit pmodules;
|
||||
|
||||
{.$define TEST_IMPL does not work well }
|
||||
{ other way to get correct type info, in test (PM) }
|
||||
|
||||
{$define New_GDB}
|
||||
|
||||
interface
|
||||
|
||||
@ -575,6 +578,7 @@ unit pmodules;
|
||||
while assigned(hp) do
|
||||
begin
|
||||
{$IfDef GDB}
|
||||
{$IfnDef New_GDB}
|
||||
if (cs_debuginfo in aktmoduleswitches) and
|
||||
not hp^.is_stab_written then
|
||||
begin
|
||||
@ -582,6 +586,7 @@ unit pmodules;
|
||||
hp^.is_stab_written:=true;
|
||||
hp^.unitid:=psymtable(hp^.u^.globalsymtable)^.unitid;
|
||||
end;
|
||||
{$endIf nDef New_GDB}
|
||||
{$EndIf GDB}
|
||||
if hp^.in_uses then
|
||||
begin
|
||||
@ -612,6 +617,47 @@ unit pmodules;
|
||||
end;
|
||||
|
||||
|
||||
procedure write_gdb_info;
|
||||
var
|
||||
hp : pused_unit;
|
||||
begin
|
||||
{$IfDef GDB}
|
||||
{ now insert the units in the symtablestack }
|
||||
hp:=pused_unit(current_module^.used_units.first);
|
||||
while assigned(hp) do
|
||||
begin
|
||||
if (cs_debuginfo in aktmoduleswitches) and
|
||||
not hp^.is_stab_written then
|
||||
begin
|
||||
punitsymtable(hp^.u^.globalsymtable)^.concattypestabto(debuglist);
|
||||
hp^.is_stab_written:=true;
|
||||
hp^.unitid:=psymtable(hp^.u^.globalsymtable)^.unitid;
|
||||
end;
|
||||
hp:=pused_unit(hp^.next);
|
||||
end;
|
||||
if current_module^.in_implementation then
|
||||
begin
|
||||
if assigned(current_module^.localsymtable) then
|
||||
begin
|
||||
{ all types }
|
||||
punitsymtable(current_module^.localsymtable)^.concattypestabto(debuglist);
|
||||
{ and all local symbols}
|
||||
punitsymtable(current_module^.localsymtable)^.concatstabto(debuglist);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if assigned(current_module^.globalsymtable) then
|
||||
begin
|
||||
{ all types }
|
||||
punitsymtable(current_module^.globalsymtable)^.concattypestabto(debuglist);
|
||||
{ and all local symbols}
|
||||
punitsymtable(current_module^.globalsymtable)^.concatstabto(debuglist);
|
||||
end;
|
||||
end;
|
||||
{$EndIf GDB}
|
||||
end;
|
||||
|
||||
procedure parse_implementation_uses(symt:Psymtable);
|
||||
begin
|
||||
if token=_USES then
|
||||
@ -805,6 +851,10 @@ unit pmodules;
|
||||
exit;
|
||||
end;
|
||||
|
||||
{$ifdef New_GDB}
|
||||
write_gdb_info;
|
||||
{$endIf Def New_GDB}
|
||||
|
||||
{ Parse the implementation section }
|
||||
consume(_IMPLEMENTATION);
|
||||
current_module^.in_implementation:=true;
|
||||
@ -922,6 +972,7 @@ unit pmodules;
|
||||
{ add all used definitions even for implementation}
|
||||
if (cs_debuginfo in aktmoduleswitches) then
|
||||
begin
|
||||
{$IfnDef New_GDB}
|
||||
if assigned(current_module^.globalsymtable) then
|
||||
begin
|
||||
{ all types }
|
||||
@ -929,10 +980,13 @@ unit pmodules;
|
||||
{ and all local symbols}
|
||||
punitsymtable(current_module^.globalsymtable)^.concatstabto(debuglist);
|
||||
end;
|
||||
{ all types }
|
||||
{ all local types }
|
||||
punitsymtable(st)^.concattypestabto(debuglist);
|
||||
{ and all local symbols}
|
||||
st^.concatstabto(debuglist);
|
||||
{$else New_GDB}
|
||||
write_gdb_info;
|
||||
{$endIf Def New_GDB}
|
||||
end;
|
||||
{$endif GDB}
|
||||
|
||||
@ -1113,6 +1167,9 @@ unit pmodules;
|
||||
{ consume the last point }
|
||||
consume(POINT);
|
||||
|
||||
{$ifdef New_GDB}
|
||||
write_gdb_info;
|
||||
{$endIf Def New_GDB}
|
||||
{ leave when we got an error }
|
||||
if (status.errorcount>0) and not status.skip_error then
|
||||
begin
|
||||
@ -1160,7 +1217,10 @@ unit pmodules;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.86 1998-11-30 09:43:22 pierre
|
||||
Revision 1.87 1998-12-01 23:40:53 pierre
|
||||
* new try for correct debug info generation
|
||||
|
||||
Revision 1.86 1998/11/30 09:43:22 pierre
|
||||
* some range check bugs fixed (still not working !)
|
||||
+ added DLL writing support for win32 (also accepts variables)
|
||||
+ TempAnsi for code that could be used for Temporary ansi strings
|
||||
|
Loading…
Reference in New Issue
Block a user