Handle DW_OP_form_tls_address
[deliverable/binutils-gdb.git] / gdb / dwarf2loc.c
index e60475fecc499a555c5f756d479eece9d805e4c7..946ddf8b6e94d8a4908d237ec8cf12ead2d8ff41 100644 (file)
@@ -3571,6 +3571,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
          break;
 
        case DW_OP_GNU_push_tls_address:
+       case DW_OP_form_tls_address:
          unimplemented (op);
          break;
 
@@ -3907,7 +3908,8 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
           && (data[0] == DW_OP_addr
               || (addr_size == 4 && data[0] == DW_OP_const4u)
               || (addr_size == 8 && data[0] == DW_OP_const8u))
-          && data[1 + addr_size] == DW_OP_GNU_push_tls_address
+          && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
+              || data[1 + addr_size] == DW_OP_form_tls_address)
           && piece_end_p (data + 2 + addr_size, end))
     {
       ULONGEST offset;
@@ -3930,7 +3932,8 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
           && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
           && data[0] == DW_OP_GNU_const_index
           && leb128_size > 0
-          && data[1 + leb128_size] == DW_OP_GNU_push_tls_address
+          && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
+              || data[1 + leb128_size] == DW_OP_form_tls_address)
           && piece_end_p (data + 2 + leb128_size, end))
     {
       uint64_t offset;
This page took 0.024672 seconds and 4 git commands to generate.