)]}' { "commit": "211aafd18d10b7739a16df5cc637952fd3f508e8", "tree": "0f5787b71bcaf829dc407d2c24a156393daead85", "parents": [ "2762d288534f48dc8653524b878883472037a57c" ], "author": { "name": "Tom de Vries", "email": "tdevries@suse.de", "time": "Tue Sep 14 14:41:27 2021 +0200" }, "committer": { "name": "Tom de Vries", "email": "tdevries@suse.de", "time": "Tue Sep 14 14:41:27 2021 +0200" }, "message": "[gdb/symtab] Fix function range handling in psymtabs\n\nConsider the test-case from this patch.\n\nWe run into:\n...\n(gdb) PASS: gdb.dwarf2/dw2-ranges-psym-warning.exp: continue\nbt^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\nwarning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M\n^M\n read in psymtab, but not in symtab.)^M\n^M\n)^M\n(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: bt\n...\n\nThis happens as follows.\n\nThe function foo:\n...\n \u003c1\u003e\u003c31\u003e: Abbrev Number: 4 (DW_TAG_subprogram)\n \u003c33\u003e DW_AT_name : foo\n \u003c37\u003e DW_AT_ranges : 0x0\n...\nhas these ranges:\n...\n 00000000 00000000004004c1 00000000004004d2\n 00000000 00000000004004ae 00000000004004af\n 00000000 \u003cEnd of list\u003e\n...\nwhich have a hole at at [0x4004af,0x4004c1).\n\nHowever, the address map of the partial symtabs incorrectly maps addresses\nin the hole (such as 0x4004b6 in the backtrace) to the foo CU.\n\nThe address map of the full symbol table of the foo CU however does not\ncontain the addresses in the hole, which is what the warning / internal error\ncomplains about.\n\nFix this by making sure that ranges of functions are read correctly.\n\nThe patch adds a bit to struct partial_die_info, in this hole (shown for\nx86_64-linux):\n...\n/* 11: 7 | 4 */ unsigned int canonical_name : 1;\n/* XXX 4-byte hole */\n/* 16 | 8 */ const char *raw_name;\n...\nSo there\u0027s no increase in size for 64-bit, but AFAIU there will be an increase\nfor 32-bit.\n\nTested on x86_64-linux.\n\ngdb/ChangeLog:\n\n2021-08-10 Tom de Vries \u003ctdevries@suse.de\u003e\n\n\tPR symtab/28200\n\t* dwarf2/read.c (struct partial_die_info): Add has_range_info and\n\trange_offset field.\n\t(add_partial_subprogram): Handle pdi-\u003ehas_range_info.\n\t(partial_die_info::read): Set pdi-\u003ehas_range_info.\n\ngdb/testsuite/ChangeLog:\n\n2021-08-10 Tom de Vries \u003ctdevries@suse.de\u003e\n\n\tPR symtab/28200\n\t* gdb.dwarf2/dw2-ranges-psym-warning-main.c: New test.\n\t* gdb.dwarf2/dw2-ranges-psym-warning.c: New test.\n\t* gdb.dwarf2/dw2-ranges-psym-warning.exp: New file.\n", "tree_diff": [ { "type": "modify", "old_id": "5385a3aff53e9976fca1c59acb2949794083516a", "old_mode": 33188, "old_path": "gdb/dwarf2/read.c", "new_id": "192df2ac84374e1528e598d9bcb50e59ae8b3302", "new_mode": 33188, "new_path": "gdb/dwarf2/read.c" }, { "type": "add", "old_id": "0000000000000000000000000000000000000000", "old_mode": 0, "old_path": "/dev/null", "new_id": "dfca2c984f33fda0b3aa72c3f0850060b57c2b6c", "new_mode": 33188, "new_path": "gdb/testsuite/gdb.dwarf2/dw2-ranges-psym-warning-main.c" }, { "type": "add", "old_id": "0000000000000000000000000000000000000000", "old_mode": 0, "old_path": "/dev/null", "new_id": "d6cd2d458b724e91aca1fbd112bcc630d48a6dc9", "new_mode": 33188, "new_path": "gdb/testsuite/gdb.dwarf2/dw2-ranges-psym-warning.c" }, { "type": "add", "old_id": "0000000000000000000000000000000000000000", "old_mode": 0, "old_path": "/dev/null", "new_id": "0caeb839ee4af5e06b92036dd596491ff4215bdd", "new_mode": 33188, "new_path": "gdb/testsuite/gdb.dwarf2/dw2-ranges-psym-warning.exp" } ] }