aboutsummaryrefslogtreecommitdiff
path: root/gdb/findvar.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r--gdb/findvar.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c
index df4ab1a..9da5c48 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -1,6 +1,6 @@
/* Find a variable's value in memory, for GDB, the GNU debugger.
- Copyright (C) 1986-2024 Free Software Foundation, Inc.
+ Copyright (C) 1986-2025 Free Software Foundation, Inc.
This file is part of GDB.
@@ -449,8 +449,8 @@ language_defn::read_var_value (struct symbol *var,
(var->arch (),
[var, &bmsym] (objfile *objfile)
{
- bmsym = lookup_minimal_symbol (var->linkage_name (), nullptr,
- objfile);
+ bmsym = lookup_minimal_symbol (current_program_space,
+ var->linkage_name (), objfile);
/* Stop if a match is found. */
return bmsym.minsym != nullptr;
@@ -485,7 +485,8 @@ language_defn::read_var_value (struct symbol *var,
/* Determine address of TLS variable. */
if (obj_section
&& (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
- addr = target_translate_tls_address (obj_section->objfile, addr);
+ addr = target_translate_tls_address (obj_section->objfile, addr,
+ var->print_name ());
}
break;
@@ -541,6 +542,24 @@ default_value_from_register (gdbarch *gdbarch, type *type, int regnum,
return value;
}
+/* Default implementation of gdbarch_dwarf2_reg_piece_offset. Implements
+ DW_OP_bits_piece for DW_OP_piece. */
+
+ULONGEST
+default_dwarf2_reg_piece_offset (gdbarch *gdbarch, int gdb_regnum, ULONGEST size)
+{
+ ULONGEST reg_size = register_size (gdbarch, gdb_regnum);
+ gdb_assert (size <= reg_size);
+ if (reg_size == size)
+ return 0;
+
+ if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+ return reg_size - size;
+
+ return 0;
+}
+
+
/* VALUE must be an lval_register value. If regnum is the value's
associated register number, and len the length of the value's type,
read one or more registers in VALUE's frame, starting with register REGNUM,