Deal with full path in .file 0 directive
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 15 Nov 2021 11:50:51 +0000 (12:50 +0100)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 15 Nov 2021 11:56:10 +0000 (12:56 +0100)
commitf9402ccaa9fac7858713a7672fae5760ae3d5ce7
tree120dc7c0bafe4ff49b5b8e6022db155264abd330
parente6c46d077240565fac4d70066719a8bbe2c212d1
Deal with full path in .file 0 directive

Gas uses the directory part, if present, of the .file 0 directive to set
entry 0 of the directory table in DWARF 5, which represents the "current
directory".

Now Gas also uses the file part of the same directive to set entry 0 of the
file table, which represents the "current compilation file".  But the latter
need not be located in the former so GCC will use a full path in the file
part when it is passed a full path:

gcc -c /full/path/test.c -save-temps

yields:

 .file 0 "/current/directory" "/full/path/test.c"

in the assembly file and:

 The Directory Table (offset 0x22, lines 2, columns 1):
  Entry Name
  0     (indirect line string, offset: 0x25): /current/directory
  1     (indirect line string, offset: 0x38): /full/path

 The File Name Table (offset 0x30, lines 2, columns 2):
  Entry Dir     Name
  0     0       (indirect line string, offset: 0x43): /full/path/test.c

in the object file.  Note the full path and the questionable Dir value in
the 0 entry of the file table.
gas/ChangeLog
gas/doc/as.texi
gas/dwarf2dbg.c
gas/testsuite/gas/elf/dwarf-5-file0-2.d
gas/testsuite/gas/elf/dwarf-5-file0-3.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf-5-file0-3.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf-5-file0.d
gas/testsuite/gas/elf/elf.exp