gdb/source: Fix open_source_file error handling
authorAaron Merey <amerey@redhat.com>
Fri, 10 Feb 2023 01:35:32 +0000 (20:35 -0500)
committerAaron Merey <amerey@redhat.com>
Sat, 11 Feb 2023 02:05:05 +0000 (21:05 -0500)
commit8cc96ee4169f631917d048cbaeec14ddf8ccb90d
treea201a360447b005e62941fd4e51afcad74c68d54
parent40dfb28b56fe55a370a35495e0f1eb6c95110f35
gdb/source: Fix open_source_file error handling

open_source_file relies on errno to communicate the reason for a missing
source file.

open_source_file may also call debuginfod_find_source.  It is possible
for debuginfod_find_source to set errno to a value unrelated to the
reason for a failed download.

This can result in bogus error messages being reported as the reason for
a missing source file.  The following error message should instead be
"No such file or directory":

  Temporary breakpoint 1, 0x00005555556f4de0 in main ()
  (gdb) list
  Downloading source file /usr/src/debug/glibc-2.36-8.fc37.x86_64/elf/<built-in>
  1       /usr/src/debug/glibc-2.36-8.fc37.x86_64/elf/<built-in>: Directory not empty.

Fix this by having open_source_file return a negative errno if it fails
to open a source file.  Use this value to generate the error message
instead of errno.

Approved-By: Tom Tromey <tom@tromey.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29999
gdb/debuginfod-support.h
gdb/source-cache.c
gdb/source.c
gdb/source.h