[PING][PATCH v2 2/2] DWARFv5: Fix for the filename complaint when printing macro
Achra, Nitika
Nitika.Achra@amd.com
Mon Sep 7 07:40:42 GMT 2020
[AMD Official Use Only - Internal Distribution Only]
Just a gentle reminder.
Regards,
Nitika
-----Original Message-----
From: Achra, Nitika <Nitika.Achra@amd.com>
Sent: Monday, August 10, 2020 8:37 PM
To: gdb-patches@sourceware.org; simark@simark.ca; tom@tromey.com
Cc: George, Jini Susan <JiniSusan.George@amd.com>; Achra, Nitika <Nitika.Achra@amd.com>
Subject: [PATCH v2 2/2] DWARFv5: Fix for the filename complaint when printing macro
GDB complaints "During symbol reading: symtab found for 'macro.c', but that file is not covered in the compilation unit's macro information.
No symbol "MAX_SIZE" in the current context" when printing the macro with the testcase file macro.c given below. This patch fixes this and prints the correct value.
When gdb reads file number from DW_MACRO_start_file data in .debug_macro section, it will do name lookup in file_names and include_directories index table of .debug_line section. Prior to DWARFv5 include_directories[0] has no info, so a lookup at that index will return NULL and we have file name "macro.c". But in dwarfv5 current directory is explicitly represented at index 0 (as shown in the snippet below), hence after lookup you get "PATH/macro.c".
A snippet of .debug_line is as follows-
include_directories[ 0] = "/home/nitika/workspace"
include_directories[ 1] = "/usr/include"
include_directories[ 2] = "/usr/include/x86_64-linux-gnu/bits"
include_directories[ 3] = "/usr/include/x86_64-linux-gnu/sys"
include_directories[ 4] = "/usr/include/x86_64-linux-gnu/gnu"
include_directories[ 5] = "up_llvm/llvm-project/build/lib/clang/11.0.0/include"
include_directories[ 6] = "/usr/include/x86_64-linux-gnu/bits/types"
file_names[ 0]:
name: "macro.c"
dir_index: 0
md5_checksum: 0ee310711170f2dd9844b522e844207d
Test case used (macro.c):
#define MAX_SIZE 10
int main(void)
{
int size = 0;
size = size + MAX_SIZE;
printf("\n The value of size is [%d]\n",size);
return 0;
}
clang -gdwarf-5 -fdebug-macro macro.c -o macro.out
Before the patch:
gdb -q macro.out -ex "start" -ex "set complaints 1" -ex "p MAX_SIZE"
Reading symbols from macro.out...
Temporary breakpoint 1 at 0x4004df: file macro.c, line 7.
Starting program: /home/nitika/workspace/macro.out
Temporary breakpoint 1, main () at macro.c:7
7 int size = 0;
During symbol reading: symtab found for 'macro.c', but that file is not covered in the compilation unit's macro information No symbol "MAX_SIZE" in current context.
After the patch:
gdb -q macro.out -ex "start" -ex "p MAX_SIZE"
Reading symbols from macro.out...
Temporary breakpoint 1 at 0x4004df: file macro.c, line 7.
Starting program: /home/nitika/workspace/macro.out
Temporary breakpoint 1, main () at macro.c:7
7 int size = 0;
$1 = 10
Tested by running the testsuite before and after the patch with
-gdwarf-5 and there is no increase in the number of test cases that fails. Used clang 11.0.0.
gdb/ChangeLog:
* macrotab.c (macro_lookup_inclusion): In DWARF version 5 filename includes
the full directory path.
---
gdb/macrotab.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gdb/macrotab.c b/gdb/macrotab.c index 9ada436eaf..4ffb2d67cb 100644
--- a/gdb/macrotab.c
+++ b/gdb/macrotab.c
@@ -507,7 +507,8 @@ struct macro_source_file * macro_lookup_inclusion (struct macro_source_file *source, const char *name) {
/* Is SOURCE itself named NAME? */
- if (filename_cmp (name, source->filename) == 0)
+ if (filename_cmp (name, source->filename) == 0 ||
+ filename_cmp (basename (name), basename (source->filename)) == 0)
return source;
/* It's not us. Try all our children, and return the lowest. */
--
2.17.1
More information about the Gdb-patches
mailing list