aboutsummaryrefslogtreecommitdiff
path: root/gdb/target.c
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-10-22 17:23:25 +0200
committerTom de Vries <tdevries@suse.de>2020-10-22 17:23:25 +0200
commit5fb4027fae1839cabbea75112c31bd89d46d2af0 (patch)
tree574eaa3daf329dec86822491ef390c4b739233a0 /gdb/target.c
parent4a636814934b4403baeffbf29af44ed3a3cb2962 (diff)
downloadgdb-5fb4027fae1839cabbea75112c31bd89d46d2af0.zip
gdb-5fb4027fae1839cabbea75112c31bd89d46d2af0.tar.gz
gdb-5fb4027fae1839cabbea75112c31bd89d46d2af0.tar.bz2
[gdb/symtab] Make find_block_in_blockvector more robust
While working on PR25858 I noticed that the following trigger patch: ... @@ -2918,6 +2918,7 @@ find_pc_sect_compunit_symtab const struct blockvector *bv; bv = COMPUNIT_BLOCKVECTOR (cust); + (volatile int)blockvector_contains_pc (bv, pc); b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); if (BLOCK_START (b) <= pc ... triggers this assert, which checks that the returned block indeed contains pc: ... @@ -170,7 +170,10 @@ find_block_in_blockvector { b = BLOCKVECTOR_BLOCK (bl, bot); if (BLOCK_END (b) > pc) - return b; + { + gdb_assert (BLOCK_START (b) <= pc); + return b; + } bot--; } ... when running test-case gdb.ada/bp_c_mixed_case.exp. It's possible that the trigger patch breaks an undocumented invariant: I've tried a build and test run without the trigger patch and did not manage to trigger the assert. For robustness-sake, fix the assert by bailing out if 'BLOCK_START (b) <= pc' doesn't hold. Tested on x86_64-linux. gdb/ChangeLog: 2020-10-22 Tom de Vries <tdevries@suse.de> * block.c (find_block_in_blockvector): Make sure the returned block contains pc.
Diffstat (limited to 'gdb/target.c')
0 files changed, 0 insertions, 0 deletions