Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: jimb@codesourcery.com (Jim Blandy)
Cc: gdb-patches@sourceware.org
Subject: Re: [RFA][1/5] New port: Cell BE SPU (dwarf2loc.c fix)
Date: Wed, 15 Nov 2006 21:57:00 -0000	[thread overview]
Message-ID: <200611152157.kAFLv4Ab003607@d12av02.megacenter.de.ibm.com> (raw)
In-Reply-To: <m3u013qgnt.fsf@codesourcery.com> from "Jim Blandy" at Nov 13, 2006 11:40:22 AM

Jim Blandy wrote:

> This seems fine.  I tested it on i686 Fedora Core 5 and didn't see any
> new failures.
> 
> Would it be a good idea to introduce a new function, a companion to
> value_from_register, that wraps up the composition of
> value_from_register and value_as_address?

You mean something like the patch below?  Tested on spu, s390-ibm-linux
and s390x-ibm-linux.

Bye,
Ulrich


ChangeLog:

	* findvar.c (address_from_register): New function.
	* value.h (address_from_register): Add prototype.
	* dwarf2loc.c (dwarf_expr_read_reg): Use address_from_register.

diff -ur gdb-orig/gdb/dwarf2loc.c gdb-head/gdb/dwarf2loc.c
--- gdb-orig/gdb/dwarf2loc.c	2006-11-10 03:00:22.000000000 +0100
+++ gdb-head/gdb/dwarf2loc.c	2006-11-15 22:12:11.624037552 +0100
@@ -115,24 +115,17 @@
 /* Helper functions for dwarf2_evaluate_loc_desc.  */
 
 /* Using the frame specified in BATON, return the value of register
-   REGNUM, treated as an unsigned integer.  */
+   REGNUM, treated as a pointer.  */
 static CORE_ADDR
 dwarf_expr_read_reg (void *baton, int dwarf_regnum)
 {
   struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
   CORE_ADDR result;
-  gdb_byte *buf;
-  int regnum, regsize;
+  int regnum;
 
   regnum = DWARF2_REG_TO_REGNUM (dwarf_regnum);
-  regsize = register_size (current_gdbarch, regnum);
-  buf = alloca (regsize);
-
-  frame_register_read (debaton->frame, regnum, buf);
-  /* NOTE: cagney/2003-05-22: This extract is assuming that a DWARF 2
-     address is always unsigned.  That may or may not be true.  */
-  result = extract_unsigned_integer (buf, regsize);
-
+  result = address_from_register (builtin_type_void_data_ptr,
+				  regnum, debaton->frame);
   return result;
 }
 
diff -ur gdb-orig/gdb/findvar.c gdb-head/gdb/findvar.c
--- gdb-orig/gdb/findvar.c	2006-01-17 23:30:29.000000000 +0100
+++ gdb-head/gdb/findvar.c	2006-11-15 22:09:11.884934888 +0100
@@ -728,6 +728,26 @@
   return v;
 }
 
+/* Return contents of register REGNUM in frame FRAME as address,
+   interpreted as value of type TYPE.   Will abort if register
+   value is not available.  */
+
+CORE_ADDR
+address_from_register (struct type *type, int regnum, struct frame_info *frame)
+{
+  struct value *value;
+  CORE_ADDR result;
+
+  value = value_from_register (type, regnum, frame);
+  gdb_assert (value);
+
+  result = value_as_address (value);
+  release_value (value);
+  value_free (value);
+
+  return result;
+}
+
 \f
 /* Given a struct symbol for a variable or function,
    and a stack frame id, 
diff -ur gdb-orig/gdb/value.h gdb-head/gdb/value.h
--- gdb-orig/gdb/value.h	2006-07-13 06:31:42.000000000 +0200
+++ gdb-head/gdb/value.h	2006-11-15 22:10:31.813034144 +0100
@@ -282,6 +282,9 @@
 extern struct value *value_from_register (struct type *type, int regnum,
 					  struct frame_info *frame);
 
+extern CORE_ADDR address_from_register (struct type *type, int regnum,
+					struct frame_info *frame);
+
 extern struct value *value_of_variable (struct symbol *var, struct block *b);
 
 extern struct value *value_of_register (int regnum, struct frame_info *frame);

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


  reply	other threads:[~2006-11-15 21:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-11 18:37 Ulrich Weigand
2006-11-13 19:40 ` Jim Blandy
2006-11-15 21:57   ` Ulrich Weigand [this message]
2006-11-22  1:42     ` Jim Blandy
2006-11-22  2:30       ` Daniel Jacobowitz
2006-11-22 14:10       ` Ulrich Weigand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200611152157.kAFLv4Ab003607@d12av02.megacenter.de.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jimb@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox