• Namhyung Kim's avatar
    perf dwarf-aux: Check allowed DWARF Ops · 55442cc2
    Namhyung Kim authored
    The DWARF location expression can be fairly complex and it'd be hard
    to match it with the condition correctly.  So let's be conservative
    and only allow simple expressions.  For now it just checks the first
    operation in the list.  The following operations looks ok:
    
     * DW_OP_stack_value
     * DW_OP_deref_size
     * DW_OP_deref
     * DW_OP_piece
    
    To refuse complex (and unsupported) location expressions, add
    check_allowed_ops() to compare the rest of the list.  It seems earlier
    result contained those unsupported expressions.  For example, I found
    some local struct variable is placed like below.
    
     <2><43d1517>: Abbrev Number: 62 (DW_TAG_variable)
        <43d1518>   DW_AT_location    : 15 byte block: 91 50 93 8 91 78 93 4 93 84 8 91 68 93 4
            (DW_OP_fbreg: -48; DW_OP_piece: 8;
             DW_OP_fbreg: -8; DW_OP_piece: 4;
             DW_OP_piece: 1028;
             DW_OP_fbreg: -24; DW_OP_piece: 4)
    
    Another example is something like this.
    
        0057c8be ffffffffffffffff ffffffff812109f0 (base address)
        0057c8ce ffffffff812112b5 ffffffff812112c8 (DW_OP_breg3 (rbx): 0;
                                                    DW_OP_constu: 18446744073709551612;
                                                    DW_OP_and;
                                                    DW_OP_stack_value)
    
    It should refuse them.  After the change, the stat shows:
    
      Annotate data type stats:
      total 294, ok 158 (53.7%), bad 136 (46.3%)
      -----------------------------------------------------------
              30 : no_sym
              32 : no_mem_ops
              53 : no_var
              14 : no_typeinfo
               7 : bad_offset
    Acked-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: default avatarIan Rogers <irogers@google.com>
    Cc: Stephane Eranian <eranian@google.com>
    Link: https://lore.kernel.org/r/20240117062657.985479-10-namhyung@kernel.orgSigned-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    55442cc2
dwarf-aux.c 45.4 KB