[Ada] Robustify traceback caching for executable in current dir
authorOlivier Hainque <hainque@adacore.com>
Mon, 21 May 2018 14:51:09 +0000 (14:51 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 21 May 2018 14:51:09 +0000 (14:51 +0000)
commit18c7a4eb877d3c3df5975a3841f76cb05897d1e9
tree0751981fbf86e8b4224a605d0371d452a9e89d44
parentbbb99006570016986e821b7ddad581b0f2042c44
[Ada] Robustify traceback caching for executable in current dir

Any program calling Gnat.Traceback.Symbolic.Enable_Cache for
dwarf based symbolization fails with a segmentation violation
when spawned with an inaccurate argv[0] such that it couldn't
be found on PATH.

argv[0] is most often found on PATH. One plausible case where
it isn't is when argv[0] is a mere file name and . isn't on PATH,
which might happen out of imprecise exec calls.

This change robustifies the Traceback.Symbolic implementation
to work in this case as well, by just trying to work with argv[0]
untouched as the executable file to fetch dwarf info from.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-trasym__dwarf.adb (Executable_Name): Return argv[0] instead
of empty string when argv[0] couldn't be found on PATH.
(Enable_Cache): Raise Program_Error instead of attempting a null
pointer dereference when the Exec_Module initialization failed.

From-SVN: r260456
gcc/ada/ChangeLog
gcc/ada/libgnat/s-trasym__dwarf.adb