mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
Assertion failure dumping .eh_frame_hdr
dwarf.c can hit "Assertion '(start) <= (end)' failed" on truncated sections, due to get_encoded_eh_value wrongly returning a full count for truncated words. * dwarf.c (get_encoded_eh_value): Return zero for truncated words.
This commit is contained in:
parent
8409b75c8d
commit
e14f7abaf8
@ -9236,37 +9236,37 @@ get_encoded_eh_value (unsigned int encoding,
|
||||
case DW_EH_PE_udata2:
|
||||
old_start = start;
|
||||
SAFE_BYTE_GET_AND_INC (val, start, 2, end);
|
||||
len = (start == old_start) ? 0 : 2;
|
||||
len = start - old_start == 2 ? 2 : 0;
|
||||
break;
|
||||
|
||||
case DW_EH_PE_udata4:
|
||||
old_start = start;
|
||||
SAFE_BYTE_GET_AND_INC (val, start, 4, end);
|
||||
len = (start == old_start) ? 0 : 4;
|
||||
len = start - old_start == 4 ? 4 : 0;
|
||||
break;
|
||||
|
||||
case DW_EH_PE_udata8:
|
||||
old_start = start;
|
||||
SAFE_BYTE_GET_AND_INC (val, start, 8, end);
|
||||
len = (start == old_start) ? 0 : 8;
|
||||
len = start - old_start == 8 ? 8 : 0;
|
||||
break;
|
||||
|
||||
case DW_EH_PE_sdata2:
|
||||
old_start = start;
|
||||
SAFE_SIGNED_BYTE_GET_AND_INC (val, start, 2, end);
|
||||
len = (start == old_start) ? 0 : 2;
|
||||
len = start - old_start == 2 ? 2 : 0;
|
||||
break;
|
||||
|
||||
case DW_EH_PE_sdata4:
|
||||
old_start = start;
|
||||
SAFE_SIGNED_BYTE_GET_AND_INC (val, start, 4, end);
|
||||
len = (start == old_start) ? 0 : 4;
|
||||
len = start - old_start == 4 ? 4 : 0;
|
||||
break;
|
||||
|
||||
case DW_EH_PE_sdata8:
|
||||
old_start = start;
|
||||
SAFE_SIGNED_BYTE_GET_AND_INC (val, start, 8, end);
|
||||
len = (start == old_start) ? 0 : 8;
|
||||
len = start - old_start == 8 ? 8 : 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user