dbghelp: Support CIE version 4 in parse_cie_details().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f85e7d1716
commit
ab27cb48fc
|
@ -2641,7 +2641,7 @@ static BOOL parse_cie_details(dwarf2_traverse_context_t* ctx, struct frame_info*
|
||||||
|
|
||||||
/* parse the CIE first */
|
/* parse the CIE first */
|
||||||
version = dwarf2_parse_byte(ctx);
|
version = dwarf2_parse_byte(ctx);
|
||||||
if (version != 1 && version != 3)
|
if (version != 1 && version != 3 && version != 4)
|
||||||
{
|
{
|
||||||
FIXME("unknown CIE version %u at %p\n", version, ctx->data - 1);
|
FIXME("unknown CIE version %u at %p\n", version, ctx->data - 1);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2649,12 +2649,21 @@ static BOOL parse_cie_details(dwarf2_traverse_context_t* ctx, struct frame_info*
|
||||||
augmentation = (const char*)ctx->data;
|
augmentation = (const char*)ctx->data;
|
||||||
ctx->data += strlen(augmentation) + 1;
|
ctx->data += strlen(augmentation) + 1;
|
||||||
|
|
||||||
|
switch (version)
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
/* skip 'address_size' and 'segment_size' */
|
||||||
|
ctx->data += 2;
|
||||||
|
/* fallthrough */
|
||||||
|
case 1:
|
||||||
|
case 3:
|
||||||
info->code_align = dwarf2_leb128_as_unsigned(ctx);
|
info->code_align = dwarf2_leb128_as_unsigned(ctx);
|
||||||
info->data_align = dwarf2_leb128_as_signed(ctx);
|
info->data_align = dwarf2_leb128_as_signed(ctx);
|
||||||
if (version == 1)
|
info->retaddr_reg = version == 1 ? dwarf2_parse_byte(ctx) :dwarf2_leb128_as_unsigned(ctx);
|
||||||
info->retaddr_reg = dwarf2_parse_byte(ctx);
|
break;
|
||||||
else
|
default:
|
||||||
info->retaddr_reg = dwarf2_leb128_as_unsigned(ctx);
|
;
|
||||||
|
}
|
||||||
info->state.cfa_rule = RULE_CFA_OFFSET;
|
info->state.cfa_rule = RULE_CFA_OFFSET;
|
||||||
|
|
||||||
end = NULL;
|
end = NULL;
|
||||||
|
|
Loading…
Reference in New Issue