From: Kyle Huey Date: Sat, 7 Sep 2024 15:20:05 +0000 (-0700) Subject: gdb: Support DW_OP_constx (the standardized version of DW_OP_GNU_const_index). X-Git-Tag: gdb-16-branchpoint~920 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1628e02267448cd82e219a60a4ed37cfa18fd35a;p=thirdparty%2Fbinutils-gdb.git gdb: Support DW_OP_constx (the standardized version of DW_OP_GNU_const_index). Approved-By: Tom Tromey --- diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index cb80dbf60b1..5ad17eaaaff 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -1593,8 +1593,9 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, uoffset))); result_val = value_from_ulongest (address_type, result); break; + case DW_OP_constx: case DW_OP_GNU_const_index: - ensure_have_per_cu (this->m_per_cu, "DW_OP_GNU_const_index"); + ensure_have_per_cu (this->m_per_cu, "DW_OP_constx"); op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); result = (ULONGEST) dwarf2_read_addr_index (this->m_per_cu, diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c index 3a47805ab3a..5d1a557cb98 100644 --- a/gdb/dwarf2/loc.c +++ b/gdb/dwarf2/loc.c @@ -1967,6 +1967,7 @@ dwarf2_get_symbol_read_needs (gdb::array_view expr, case DW_OP_GNU_reinterpret: case DW_OP_addrx: case DW_OP_GNU_addr_index: + case DW_OP_constx: case DW_OP_GNU_const_index: case DW_OP_constu: case DW_OP_plus_uconst: @@ -3265,10 +3266,13 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream, /* With -gsplit-dwarf a TLS variable can also look like this: DW_AT_location : 3 byte block: fc 4 e0 (DW_OP_GNU_const_index: 4; - DW_OP_GNU_push_tls_address) */ + DW_OP_GNU_push_tls_address) | + 3 byte block a2 4 e0 + (DW_OP_constx: 4; + DW_OP_form_tls_address) */ else if (data + 3 <= end && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end - && data[0] == DW_OP_GNU_const_index + && (data[0] == DW_OP_constx || 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_form_tls_address) @@ -3675,6 +3679,7 @@ disassemble_dwarf_expression (struct ui_file *stream, gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size)); break; + case DW_OP_constx: case DW_OP_GNU_const_index: data = safe_read_uleb128 (data, end, &ul); ul = (uint64_t) dwarf2_read_addr_index (per_cu, per_objfile, ul); diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 769ca91facc..e0dcf940402 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -21142,6 +21142,7 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu, case DW_OP_addrx: case DW_OP_GNU_addr_index: + case DW_OP_constx: case DW_OP_GNU_const_index: stack[++stacki] = (CORE_ADDR) read_addr_index_from_leb128 (cu, &data[i],