Page MenuHomePhabricator

[DebugInfo] Use DW_OP_LLVM_convert_generic after sign/zero exts

Authored by dstenb on Mar 13 2020, 10:48 AM.



This is a follow-up to D76145.

DW_OP_LLVM_convert is used to do sign- and zero extensions in
DIExpressions. When using DWARFv5, that LLVM operation is translated
into DWARFv5's DW_OP_convert operation.

DWARFv5 section specifies the following for arithmetical and
logical operations:

"Operands of an operation with two operands must have the same type,
either the same base type or the generic type."

So when we have used DW_OP_LLVM_convert in an expression, we need to
make sure that any arithmetical and logical operations operating on that
element have operands of the same type. As we currently don't have a
good interface for detecting what type is on top of the stack, and we
add arithmetical and logical operations, e.g. appending expressions like
{DW_OP_constu 1, DW_OP_plus}, in many places, this patch attempts to
alleviate such cases by introduced a new operation,
DW_OP_LLVM_convert_generic, which converts the top of the stack back to
the generic type.

This operation is appended to the sign/zero extension expression that
DIExpression::getExtOps() produces.

Diff Detail

Event Timeline

dstenb created this revision.Mar 13 2020, 10:48 AM
Herald added a project: Restricted Project. · View Herald TranscriptMar 13 2020, 10:48 AM

Mechanically LGTM to me. I'm not sure if this shouldn't be done in DwarfExpression instead.

Mechanically LGTM to me. I'm not sure if this shouldn't be done in DwarfExpression instead.

So that we basically insert a DW_OP_convert 0x0 after each chain of DW_OP_convert operations in the input DIExpression? That sounds reasonable, and it should have a lot smaller impact on the code. I wonder though if it would be limiting to only have the DwarfExpression world type ware if/when we later want on to support more base type-based operations (e.g. DW_OP_const_type), but perhaps not?

vsk accepted this revision.Mar 16 2020, 4:37 PM

It seems sensible to limit conversions back to the generic type as much as possible, so this approach lgtm.

This revision is now accepted and ready to land.Mar 16 2020, 4:37 PM