https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117538
Bug ID: 117538
Summary: Tracebacks don’t include the load address of PIE
executables
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: simon at pushface dot org
Target Milestone: ---
MacOS can only create position-independent executables (PIE). Other OSs may
be able to.
When an unhandled exception occurs, the traceback report includes the load
address, which is necessary in order to decode the error. On the other hand,
the
report output by GNAT.Traceback.Symbolic (a renaming of
System.Traceback.Symbolic)
doesn’t, as this test program shows:
with Ada.Exceptions;
with Ada.Exceptions.Traceback;
with Ada.Text_IO; use Ada.Text_IO;
with GNAT.Traceback.Symbolic;
procedure Traceback is
begin
raise Constraint_Error;
exception
when E : others =>
Put_Line ("--- Ada.Exceptions.Exception_Information ---");
Put_Line (Ada.Exceptions.Exception_Information (E));
Put_Line ("--- GNAT.Traceback.Symbolic.Symbolic_Traceback ---");
Put_Line
(GNAT.Traceback.Symbolic.Symbolic_Traceback
(Ada.Exceptions.Traceback.Tracebacks (E)));
end Traceback;
$ ./traceback
--- Ada.Exceptions.Exception_Information ---
raised CONSTRAINT_ERROR : traceback.adb:7 explicit raise
Load address: 0x1045e4000
Call stack traceback locations:
0x1045e5dcd 0x1045e5d41
--- GNAT.Traceback.Symbolic.Symbolic_Traceback ---
0x00000001045E5DCD 0x00000001045E5D41
I have a patch for this, which I’ll post to gcc-patches.
With the patch (on a different run, of course, so the addresses are
different), the output is
--- Ada.Exceptions.Exception_Information ---
raised CONSTRAINT_ERROR : traceback.adb:7 explicit raise
Load address: 0x10ff88000
Call stack traceback locations:
0x10ff8ab0f 0x10ff8b267
--- GNAT.Traceback.Symbolic.Symbolic_Traceback ---
Load address: 0x10FF88000
0x10FF8AB0F 0x10FF8B267
Further tests at https://github.com/simonjwright/traceback .