This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] Prune some deadwood in dwarf2read.c:decode_locdesc
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Sun, 16 Nov 2003 23:19:50 -0500
- Subject: [PATCH] Prune some deadwood in dwarf2read.c:decode_locdesc
This patch is obvious; barring comments I'll commit it in a day or two.
Neither of these flags is checked any more now that LOC_COMPUTED is used.
The current status quo, by the way, is that there is one caller of
decode_locdesc left which checks these global flags. I believe that that
call (for DW_AT_frame_base) is entirely dead and can be removed, after which
it will be possible to simplify decode_locdesc even further. But it's
slightly less trivially dead, so I'll do that in a separate patch when I'm
more awake.
After that, decode_locdesc will only ever be used in places where we expect
a constant result - a global variable, a structure offset, et cetera.
Everything else has been converted to LOC_COMPUTED and LOC_COMPUTED_ARG.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
2003-11-16 Daniel Jacobowitz <drow@mvista.com>
* dwarf2read.c (optimized_out, islocal): Remove.
(decode_locdesc): Update comments. Don't set optimized_out
or islocal.
Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.112
diff -u -p -r1.112 dwarf2read.c
--- dwarf2read.c 12 Nov 2003 17:10:55 -0000 1.112
+++ dwarf2read.c 17 Nov 2003 04:13:41 -0000
@@ -443,8 +443,6 @@ static struct pending **list_in_scope =
none of the flags are set, the object lives at the address returned
by decode_locdesc. */
-static int optimized_out; /* No ops in location in expression,
- so object was optimized out. */
static int isreg; /* Object lives in register.
decode_locdesc's return value is
the register number. */
@@ -454,12 +452,6 @@ static int offreg; /* Object's address
static int basereg; /* See `offreg'. */
static int isderef; /* Value described by flags above is
the address of a pointer to the object. */
-static int islocal; /* Variable is at the returned offset
- from the frame start, but there's
- no identified frame pointer for
- this function, so we can't say
- which register it's relative to;
- use LOC_LOCAL. */
/* DW_AT_frame_base values for the current function.
frame_base_reg is -1 if DW_AT_frame_base is missing, otherwise it
@@ -6891,8 +6883,10 @@ dwarf2_fundamental_type (struct objfile
FIXME: Implement more operations as necessary.
A location description containing no operations indicates that the
- object is optimized out. The global optimized_out flag is set for
- those, the return value is meaningless.
+ object is optimized out. The return value is meaningless for that case.
+ FIXME drow/2003-11-16: No callers check for this case any more; soon all
+ callers will only want a very basic result and this can become a
+ complaint.
When the result is a register number, the global isreg flag is set,
otherwise it is cleared.
@@ -6901,9 +6895,7 @@ dwarf2_fundamental_type (struct objfile
and the register number is returned in basereg, otherwise it is cleared.
When the DW_OP_fbreg operation is encountered without a corresponding
- DW_AT_frame_base attribute, the global islocal flag is set.
- Hopefully the machine dependent code knows how to set up a virtual
- frame pointer for the local references.
+ DW_AT_frame_base attribute, we complain.
Note that stack[0] is unused except as a default error return.
Note that stack overflow is not yet handled. */
@@ -6927,12 +6919,9 @@ decode_locdesc (struct dwarf_block *blk,
isreg = 0;
offreg = 0;
isderef = 0;
- islocal = 0;
- optimized_out = 1;
while (i < size)
{
- optimized_out = 0;
op = data[i++];
switch (op)
{
@@ -7073,7 +7062,6 @@ decode_locdesc (struct dwarf_block *blk,
{
complaint (&symfile_complaints,
"DW_AT_frame_base missing for DW_OP_fbreg");
- islocal = 1;
}
break;