OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 22 Sep 2019 07:26:01 +0000 (16:26 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 22 Sep 2019 07:26:01 +0000 (16:26 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_dwarf_expression.c
libgoblin/drd64_libgoblin_type_dwarf.h
libgoblin/test_libgoblin_dwarf_expression.c

index 73b28fe..ca67585 100644 (file)
@@ -109,6 +109,7 @@ DWord
        Word    w_value;
        DWord   dw_depth_resume;
        DWord   dw_value;
+       DWord   dw_flag;
        DWord   dw_bitoffset;
        QWord   qw_resume;
        QWord   qw_remain;
@@ -120,11 +121,11 @@ DWord
 
 #define        PUSH_DWARF(m,n) \
                { (m)->t_stack[(m)->dw_depth].value.qw_value = (n); \
-                 (m)->t_stack[(m)->dw_depth].b_flag = LIBGOBLIN_DWARF_FLAG_LOCATION; \
+                 (m)->t_stack[(m)->dw_depth].dw_flag = LIBGOBLIN_DWARF_FLAG_LOCATION; \
                  (m)->dw_depth++; } 
 #define        PUSH_DWARF_SIGN(m,n)    \
                { (m)->t_stack[(m)->dw_depth].value.ii_value = (n); \
-                 (m)->t_stack[(m)->dw_depth].b_flag \
+                 (m)->t_stack[(m)->dw_depth].dw_flag \
                        = (LIBGOBLIN_DWARF_FLAG_SIGN | LIBGOBLIN_DWARF_FLAG_LOCATION); \
                  (m)->dw_depth++; } 
 #define        POP_DWARF(m)            (m)->t_stack[--((m)->dw_depth)].value.qw_value 
@@ -586,7 +587,7 @@ DWord
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
                                ii_value        = POP_DWARF_SIGN( p_exp );
 
-                               if( LIBGOBLIN_DWARF_FLAG_SIGN & p_exp->t_stack[p_exp->dw_depth].b_flag )        {
+                               if( LIBGOBLIN_DWARF_FLAG_SIGN & p_exp->t_stack[p_exp->dw_depth].dw_flag )       {
                                        if( 0 > ii_value )      { ii_value      *= -1; }
                                        PUSH_DWARF_SIGN( p_exp, ii_value );
                                }
@@ -903,18 +904,14 @@ DWord
                        case DW_OP_reg29:                               // 0x6d
                        case DW_OP_reg30:                               // 0x6e
                        case DW_OP_reg31:                               // 0x6f
-                               // XXX: Not TESTED!!
                                b_reg   = b_opcode - DW_OP_reg0;
-                               p_exp->result[ p_exp->b_results ].b_type                        = b_reg;
+                               p_exp->result[ p_exp->b_results ].dw_flag                       = (LIBGOBLIN_DWARF_FLAG_REG | b_reg);
                                p_exp->result[ p_exp->b_results ].value.qw_value        = b_reg;        // reg.id
-                               //p_exp->b_results++;
                                break;
                        case DW_OP_regx:                                // 0x90
-                               // XXX: Not TESTED!!
                                pb_now  = DWARF_Common_DecodeULEB128( &qw_temp, pb_now, &qw_remain );
-                               p_exp->result[ p_exp->b_results ].b_type        = LIBGOBLIN_DWARF_FLAG_REGX;
+                               p_exp->result[ p_exp->b_results ].dw_flag                       = LIBGOBLIN_DWARF_FLAG_REGX;
                                p_exp->result[ p_exp->b_results ].value.qw_value        = qw_temp;      // reg.id
-                               //p_exp->b_results++;
                                break;
 
                        case DW_OP_piece:                               // 0x93
@@ -922,12 +919,13 @@ DWord
                                pb_now  = DWARF_Common_DecodeULEB128( &qw_temp, pb_now, &qw_remain );
                                dw_value        = (DWord)(qw_temp & 0xffffffff);
 
-                               b_value         = p_exp->result[ p_exp->b_results ].b_type;
-                               if( !(LIBGOBLIN_DWARF_FLAG_REG & b_value)
-                                                       && !(LIBGOBLIN_DWARF_FLAG_REGX & b_value))      {
+                               //b_value               = p_exp->result[ p_exp->b_results ].b_type;
+                               dw_flag         = p_exp->result[ p_exp->b_results ].dw_flag;
+                               if( !(LIBGOBLIN_DWARF_FLAG_REG & dw_flag)
+                                                       && !(LIBGOBLIN_DWARF_FLAG_REGX & dw_flag))      {
                                        if( 0 < p_exp->dw_depth )       {
-                                               p_exp->result[p_exp->b_results].b_type
-                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].b_flag;
+                                               p_exp->result[p_exp->b_results].dw_flag
+                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].dw_flag;
                                                p_exp->result[p_exp->b_results].value.qw_value
                                                                = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
                                        }
@@ -944,9 +942,10 @@ DWord
                                pb_now  = DWARF_Common_DecodeULEB128( &qw_value, pb_now, &qw_remain );
                                dw_bitoffset    += (DWord)(qw_value & 0xffffffff);
 
-                               b_value         = p_exp->result[ p_exp->b_results ].b_type;
-                               if( (LIBGOBLIN_DWARF_FLAG_REG & b_value)
-                                                       || (LIBGOBLIN_DWARF_FLAG_REGX & b_value) )      {
+                               //b_value               = p_exp->result[ p_exp->b_results ].b_type;
+                               dw_flag         = p_exp->result[ p_exp->b_results ].dw_flag;
+                               if( (LIBGOBLIN_DWARF_FLAG_REG & dw_flag)
+                                                       || (LIBGOBLIN_DWARF_FLAG_REGX & dw_flag) )      {
 
                                        p_exp->result[ p_exp->b_results ].dw_bit_offset = dw_bitoffset;
                                        p_exp->result[ p_exp->b_results ].dw_bit_size   = (DWord)(qw_temp & 0xffffffff);
@@ -954,8 +953,8 @@ DWord
                                        p_exp->b_results++;
                                }
                                else if( 0 < p_exp->dw_depth )  {
-                                       p_exp->result[p_exp->b_results].b_type
-                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].b_flag;
+                                       p_exp->result[p_exp->b_results].dw_flag
+                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].dw_flag;
                                        p_exp->result[p_exp->b_results].value.qw_value
                                                                = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
 
@@ -966,14 +965,49 @@ DWord
                                }
                                break;
                        case DW_OP_implicit_value:              // 0x9e
+                               // XXX: Not TESTED!!
+                               pb_now  = DWARF_Common_DecodeULEB128( &qw_temp, pb_now, &qw_remain );
+                               if( 8 == p_exp->b_dwsize )      { qw_value      = *((QWord *)pb_now); }
+                               else                                            { qw_value      = (QWord)(*((DWord *)pb_now)); }
+                               pb_now          += p_exp->b_dwsize;
+                               qw_remain       -= p_exp->b_dwsize;
+
+                               p_exp->result[ p_exp->b_results ].dw_flag       = LIBGOBLIN_DWARF_FLAG_LOCATION;
+                               p_exp->result[ p_exp->b_results ].value.qw_value        = qw_value;
+                               p_exp->result[ p_exp->b_results ].dw_bytes      = (DWord)qw_temp;
                                break;
                        case DW_OP_stack_value:                 // 0x9f
-                               break;
-               //      case DW_OP_lo_user:                             // 0xe0
-               //              break;
-               //      case DW_OP_hi_user:                             // 0xff
-               //              break;
+                               // XXX: Not TESTED!!
+                               if( 1 > p_exp->dw_depth )
+                                       { goto  goto_DWARF_Expression_Evaluate_post; }
+
+                               p_exp->dw_status                = LIBGOBLIN_DWARF_STATUS_EVALUATED;
+                               p_exp->result[p_exp->b_results].dw_flag = LIBGOBLIN_DWARF_FLAG_IMMEDIATE;;
+                               p_exp->result[p_exp->b_results].value.qw_value
+                                                       = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
+                               p_exp->b_results++;
+                               goto    goto_DWARF_Expression_Evaluate_post;
+                               break;  // NOT reach.
+
+                       //case DW_OP_lo_user:                           // 0xe0
+                       //case DW_OP_hi_user:                           // 0xff
                        case DW_OP_GNU_push_tls_address:        // 0xe0
+                               // XXX: Not TESTED!!
+                               if( 1 > p_exp->dw_depth )
+                                       { goto  goto_DWARF_Expression_Evaluate_post; }
+                               qw_pop[0]       = POP_DWARF( p_exp );
+
+                               if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_GNUTLS )        {
+                                       qw_value        = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_GNUTLS ];
+                                       PUSH_DWARF( p_exp, qw_value );
+                                       p_exp->dw_setdata       &= (~LIBGOBLIN_DWARF_REQUEST_GNUTLS);
+                                       qw_remain       = 0;    // for Loop-Break
+                               }
+                               else    {
+                                       p_exp->ptr_tlsbase.value        = (PtrValue)qw_pop[0];
+                                       p_exp->dw_requested                     |= LIBGOBLIN_DWARF_REQUEST_TLSADDR;
+                                       qw_remain       = 0;    // for Loop-Break
+                               }
                                break;
                        case DW_OP_GNU_uninit:                  // 0xf0
                                break;
@@ -1024,10 +1058,17 @@ DWord
                goto    goto_DWARF_Expression_Evaluate_post;
        }
 
+       if(     ( p_exp->result[ p_exp->b_results ].dw_flag & LIBGOBLIN_DWARF_FLAG_REG )
+                       || ( p_exp->result[ p_exp->b_results ].dw_flag & LIBGOBLIN_DWARF_FLAG_REGX ))   {
+               p_exp->dw_status                = LIBGOBLIN_DWARF_STATUS_EVALUATED;
+               p_exp->b_results++;
+               goto    goto_DWARF_Expression_Evaluate_post;
+       }
+
        if( 0 < p_exp->dw_depth )       {
                p_exp->dw_status                = LIBGOBLIN_DWARF_STATUS_EVALUATED;
-               p_exp->result[p_exp->b_results].b_type
-                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].b_flag;
+               p_exp->result[p_exp->b_results].dw_flag
+                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].dw_flag;
                p_exp->result[p_exp->b_results].value.qw_value
                                                = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
                p_exp->b_results++;
index 5e52f3e..a905ad5 100644 (file)
@@ -58,6 +58,7 @@ Comment:
 #define        LIBGOBLIN_DWARF_REQUEST_TLSADDR                 0x00004000
 #define        LIBGOBLIN_DWARF_REQUEST_CFAADDR                 0x00008000
 #define        LIBGOBLIN_DWARF_REQUEST_REGX                    0x00010000
+#define        LIBGOBLIN_DWARF_REQUEST_GNUTLS                  0x00020000
 
 #define        LIBGOBLIN_DWARF_REQDATA_MAX                                       0x40
 #define        LIBGOBLIN_DWARF_DATAID_REG                              0x0000001f      // 0x00 - 0x1f
@@ -69,20 +70,21 @@ Comment:
 #define        LIBGOBLIN_DWARF_DATAID_TLSADDR                  0x00000025
 #define        LIBGOBLIN_DWARF_DATAID_CFAADDR                  0x00000026
 #define        LIBGOBLIN_DWARF_DATAID_REGX                             0x00000027
+#define        LIBGOBLIN_DWARF_DATAID_GNUTLS                   0x00000028
 
-#define        LIBGOBLIN_DWARF_FLAG_REG                                0x1f    // 0x00 - 0x1f
-#define        LIBGOBLIN_DWARF_FLAG_REGX                               0x20
-#define        LIBGOBLIN_DWARF_FLAG_LOCATION                   0x30
-#define        LIBGOBLIN_DWARF_FLAG_IMMEDIATE                  0x40
-//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x50
-//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x60
-//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x70
-#define        LIBGOBLIN_DWARF_FLAG_SIGN                               0x80    // First bit is sign-flag
+#define        LIBGOBLIN_DWARF_FLAG_NONE                               0x00000000
+#define        LIBGOBLIN_DWARF_FLAG_REGMASK                    0x0000001f      // 0x00 - 0x1f
+#define        LIBGOBLIN_DWARF_FLAG_REG                                0x00000020
+#define        LIBGOBLIN_DWARF_FLAG_REGX                               0x00000100
+#define        LIBGOBLIN_DWARF_FLAG_LOCATION                   0x00000200
+#define        LIBGOBLIN_DWARF_FLAG_IMMEDIATE                  0x00000400
+#define        LIBGOBLIN_DWARF_FLAG_SIGN                               0x80000000      // First bit is sign-flag
 
 
 /*=====================================================================*/
 typedef        struct  {
-       Byte    b_flag;
+       //Byte  b_flag;
+       DWord   dw_flag;
        union   {
                QWord   qw_value;
                Int64   ii_value;
@@ -114,7 +116,8 @@ typedef     struct  {
 
        Byte    b_results;
        struct  {
-               Byte    b_type;
+               //Byte  b_type;
+               DWord   dw_flag;
                DWord   dw_bytes;
                DWord   dw_bit_offset;
                DWord   dw_bit_size;
index 41e0796..2cd0aab 100644 (file)
@@ -1932,6 +1932,155 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        return;
 }
 
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_CheckReg( Byte b_regop )
+{
+       int             i_result;
+       Byte    b_data[8];
+       DWord   dw_result;
+       LibGoblin_DWARF_Expression      *p_exp;
+
+       p_exp           = DWARF_Expression_Alloc();
+       CU_ASSERT( NULL != p_exp );
+
+       //DW_OP_reg0 - 31:              // 0x50 - 0x6f
+       b_data[0]       = b_regop;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result[0].dw_flag == (LIBGOBLIN_DWARF_FLAG_REG | (b_regop - DW_OP_reg0)) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (b_regop - DW_OP_reg0) );
+       CU_ASSERT( p_exp->b_results == 1 );
+       CU_ASSERT( p_exp->dw_depth == 0 );
+
+       i_result        = DWARF_Expression_Free( p_exp );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+
+void Test_LibGoblin_DWARF_Expression_RegLocation_test01_001( void )
+{
+       int             i_result;
+       Byte    b_data[16];
+       DWord   dw_result;
+       LibGoblin_DWARF_Expression      *p_exp;
+
+       i_result        = DWARF_Expression_Init();
+       CU_ASSERT( 0x00 == i_result );
+
+       p_exp           = DWARF_Expression_Alloc();
+       CU_ASSERT( NULL != p_exp );
+
+       //DW_OP_reg0 - 31:              // 0x50 - 0x6f
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg0 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg1 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg2 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg3 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg4 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg5 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg6 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg7 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg8 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg9 );
+
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg10 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg11 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg12 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg13 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg14 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg15 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg16 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg17 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg18 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg19 );
+
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg20 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg21 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg22 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg23 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg24 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg25 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg26 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg27 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg28 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg29 );
+
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg30 );
+       Test_LibGoblin_DWARF_Expression_CheckReg( DW_OP_reg31 );
+
+       //DW_OP_regx:                   // 0x90
+       b_data[0]       = DW_OP_regx;
+       b_data[1]       = 0x81;
+       b_data[2]       = 0x01;         // value = 129 (0x81 0x01)
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result[0].dw_flag == LIBGOBLIN_DWARF_FLAG_REGX );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 129 );
+       CU_ASSERT( p_exp->b_results == 1 );
+       CU_ASSERT( p_exp->dw_depth == 0 );
+
+       i_result        = DWARF_Expression_Free( p_exp );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DWARF_Expression_Term();
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_Special_test01_001( void )
+{
+       int             i_result;
+       Byte    b_data[16];
+       DWord   dw_result;
+       LibGoblin_DWARF_Expression      *p_exp;
+
+       i_result        = DWARF_Expression_Init();
+       CU_ASSERT( 0x00 == i_result );
+
+       p_exp           = DWARF_Expression_Alloc();
+       CU_ASSERT( NULL != p_exp );
+
+       // DW_OP_piece:                 // 0x93
+       // DW_OP_bit_piece:             // 0x9d
+       // DW_OP_implicit_value:        // 0x9e
+       // DW_OP_stack_value:           // 0x9f
+       // DW_OP_nop:                           // 0x96
+       // DW_OP_GNU_push_tls_address:  // 0xe0
+
+/*
+       DW_OP_GNU_uninit:               // 0xf0
+       DW_OP_GNU_encoded_addr: // 0xf1
+       DW_OP_GNU_implicit_pointer:     // 0xf2
+       DW_OP_GNU_entry_value:  // 0xf3
+       DW_OP_GNU_const_type:   // 0xf4
+       DW_OP_GNU_regval_type:  // 0xf5
+       DW_OP_GNU_deref_type:   // 0xf6
+       DW_OP_GNU_convert:              // 0xf7
+       DW_OP_GNU_reinterpret:  // 0xf9
+       DW_OP_GNU_parameter_ref:        // 0xfa
+       DW_OP_GNU_addr_index:   // 0xfb
+       DW_OP_GNU_const_index:  // 0xfc
+*/
+
+       i_result        = DWARF_Expression_Free( p_exp );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DWARF_Expression_Term();
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
@@ -1961,63 +2110,14 @@ int
                                                                 Test_LibGoblin_DWARF_Expression_FlowControl_test01_001 );
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_FlowControl_test02_001",
                                                                 Test_LibGoblin_DWARF_Expression_FlowControl_test02_001 );
+
+       CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_RegLocation_test01_001",
+                                                                Test_LibGoblin_DWARF_Expression_RegLocation_test01_001 );
+       CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_Special_test01_001",
+                                                                Test_LibGoblin_DWARF_Expression_Special_test01_001 );
+
        return 0x00;
 }
 
 
 /* EOF of drd64_.c ----------------------------------- */
-/*
-       DW_OP_reg0:                             // 0x50
-       DW_OP_reg1:                             // 0x51
-       DW_OP_reg2:                             // 0x52
-       DW_OP_reg3:                             // 0x53
-       DW_OP_reg4:                             // 0x54
-       DW_OP_reg5:                             // 0x55
-       DW_OP_reg6:                             // 0x56
-       DW_OP_reg7:                             // 0x57
-       DW_OP_reg8:                             // 0x58
-       DW_OP_reg9:                             // 0x59
-       DW_OP_reg10:                    // 0x5a
-       DW_OP_reg11:                    // 0x5b
-       DW_OP_reg12:                    // 0x5c
-       DW_OP_reg13:                    // 0x5d
-       DW_OP_reg14:                    // 0x5e
-       DW_OP_reg15:                    // 0x5f
-       DW_OP_reg16:                    // 0x60
-       DW_OP_reg17:                    // 0x61
-       DW_OP_reg18:                    // 0x62
-       DW_OP_reg19:                    // 0x63
-       DW_OP_reg20:                    // 0x64
-       DW_OP_reg21:                    // 0x65
-       DW_OP_reg22:                    // 0x66
-       DW_OP_reg23:                    // 0x67
-       DW_OP_reg24:                    // 0x68
-       DW_OP_reg25:                    // 0x69
-       DW_OP_reg26:                    // 0x6a
-       DW_OP_reg27:                    // 0x6b
-       DW_OP_reg28:                    // 0x6c
-       DW_OP_reg29:                    // 0x6d
-       DW_OP_reg30:                    // 0x6e
-       DW_OP_reg31:                    // 0x6f
-       DW_OP_regx:                             // 0x90
-       DW_OP_piece:                    // 0x93
-       DW_OP_bit_piece:                // 0x9d
-       DW_OP_implicit_value:   // 0x9e
-       DW_OP_stack_value:              // 0x9f
-       DW_OP_nop:                              // 0x96
-       DW_OP_lo_user:                  // 0xe0
-       DW_OP_hi_user:                  // 0xff
-       DW_OP_GNU_push_tls_address:     // 0xe0
-       DW_OP_GNU_uninit:               // 0xf0
-       DW_OP_GNU_encoded_addr: // 0xf1
-       DW_OP_GNU_implicit_pointer:     // 0xf2
-       DW_OP_GNU_entry_value:  // 0xf3
-       DW_OP_GNU_const_type:   // 0xf4
-       DW_OP_GNU_regval_type:  // 0xf5
-       DW_OP_GNU_deref_type:   // 0xf6
-       DW_OP_GNU_convert:              // 0xf7
-       DW_OP_GNU_reinterpret:  // 0xf9
-       DW_OP_GNU_parameter_ref:        // 0xfa
-       DW_OP_GNU_addr_index:   // 0xfb
-       DW_OP_GNU_const_index:  // 0xfc
-*/