binutils-gdb/gdb/dwarf2
Simon Marchi cd3f655cc7 gdb: add accessors for field (and call site) location
Add accessors for the various location values in struct field.  This
lets us assert that when we get a location value of a certain kind (say,
bitpos), the field's location indeed contains a value of that kind.

Remove the SET_FIELD_* macros, instead use the new setters directly.
Update the FIELD_* macros used to access field locations to go through
the getters.  They will be removed in a subsequent patch.

There are places where the FIELD_* macros are used on call_site_target
structures, because it contains members of the same name (loc_kind and
loc).  For now, I have replicated the getters/setters in
call_site_target.  But we could perhaps eventually factor them in a
"location" structure that can be used at both places.

Note that the field structure, being zero-initialized, defaults to a
bitpos location with value 0.  While writing this patch, I tried to make
it default to an "unset" location, to catch places where we would miss
setting a field's location.  However, I found that some places relied on
the default being "bitpos 0", so I left it as-is.  This change could
always be done as follow-up work, making these places explicitly set the
"bitpos 0" location.

I found two issues to fix:

 - I got some failures in the gdb.base/infcall-nested-structs-c++.exp
   test.  They were caused by two functions in amd64-tdep.c using
   TYPE_FIELD_BITPOS before checking if the location is of the bitpos
   kind, which they do indirectly through `field_is_static`.  Simply
   move getting the bitpos below the field_is_static call.

 - I got a failure in gdb.xml/tdesc-regs.exp.  It turns out that in
   make_gdb_type_enum, we set enum field values using SET_FIELD_BITPOS,
   and later access them through FIELD_ENUMVAL.  Fix that by using
   set_loc_enumval to set the value.

Change-Id: I53d3734916c46457576ba11dd77df4049d2fc1e8
2021-10-07 11:03:54 -04:00
..
abbrev.c
abbrev.h
attribute.c
attribute.h
comp-unit-head.c
comp-unit-head.h
cu.c
cu.h
die.h
dwz.c gdb: make string-like set show commands use std::string variable 2021-10-03 17:53:16 +01:00
dwz.h
expr.c Add lval_funcs::is_optimized_out 2021-10-05 12:34:55 -06:00
expr.h
frame-tailcall.c [gdb/symtab] C++-ify call_site 2021-10-04 18:16:40 +02:00
frame-tailcall.h
frame.c
frame.h
index-cache.c gdb: make string-like set show commands use std::string variable 2021-10-03 17:53:16 +01:00
index-cache.h
index-common.c
index-common.h
index-write.c gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd 2021-09-30 15:21:48 -04:00
index-write.h
leb.c
leb.h
line-header.c
line-header.h
loc.c Add lval_funcs::is_optimized_out 2021-10-05 12:34:55 -06:00
loc.h
macro.c
macro.h
public.h
read.c gdb: add accessors for field (and call site) location 2021-10-07 11:03:54 -04:00
read.h
sect-names.h
section.c
section.h
stringify.c
stringify.h