reserve proposed new bytecodes

Message ID 524.1409090060@usendtaylorx2l
State New, archived
Headers

Commit Message

David Taylor Aug. 26, 2014, 9:54 p.m. UTC
  I proposed on the gdb list some new bytecodes -- setmem8, setmem16,
setmem32, setmem64, and setreg -- for the GDB agent expression
mechanism.  I posted a message on July 28th and then a more detailed
version on August 22nd.

So far only Eli Zaretskii has replied.  I take that to mean that no one
has strong feelings yea or nay about it or possibly no one other than
Eli has bothered to read it.  Hopefully the former.

We (EMC) plan to implment some variant of this and I'd like it to be
done in such a manner as to be acceptable for inclusion into GDB.

While I am hoping that we (EMC) implement this before the end of the
year, I realize that I don't control the which task has the highest
priority.  So...

I'd like to informally reserve the opcodes and define their syntax and
semantics.  Anyone looking to add a new opcode will look at either
gdb/doc/agentexpr.texi and/or gdb/common/ax.def.

To that end, here's a patch that edits both files and includes ChangeLog
entries.  With this change gdb still builds as do the pdf, html, and
info targets.

Entry for gdb/ChangeLog:

2014-08-26  David Taylor  <dtaylor@emc.com>

	* common/ax.def: Add DEFOP entries for proposed bytecodes setmem8,
	setmem16, setmem32, setmem64, and setreg.

Entry for gdb/doc/ChangeLog:

2014-08-26  David Taylor  <dtaylor@emc.com>

	* agentexpr.texi (Bytecode Descriptions): Add decsriptions of
	propmosed bytecodes setmem8, setmem16, setmem32, setmem64, and
	setreg.

The actual diff (against GDB 7.8, but these two files don't change very
often):

EMC has a copyright assignment on file.  I do not have commit privileges.
  

Comments

Eli Zaretskii Aug. 27, 2014, 2:46 a.m. UTC | #1
> From: David Taylor <dtaylor@emc.com>
> Date: Tue, 26 Aug 2014 17:54:20 -0400
> 
> +@item @code{setmem8} (0x35): @var{addr} @var{value} @result{}
> +@itemx @code{setmem16} (0x36): @var{addr} @var{value} @result{}
> +@itemx @code{setmem32} (0x37): @var{addr} @var{value} @result{}
> +@itemx @code{setmem64} (0x38): @var{addr} @var{value} @result{}

I asked you to put "(nothing)" after @result{}.

> +@item @code{setreg} (0x39) @var{regnum}: @var{value} @result{}

Likewise here.
  
Yao Qi Aug. 28, 2014, 1:05 p.m. UTC | #2
David Taylor <dtaylor@emc.com> writes:

> I'd like to informally reserve the opcodes and define their syntax and
> semantics.  Anyone looking to add a new opcode will look at either
> gdb/doc/agentexpr.texi and/or gdb/common/ax.def.

I don't understand why do you have to reserve these opcodes?  IMO, these
opcodes should be added when you contribute your work, together with the
implementations.  Although it may be possible that some one adds a new
opcode during your development, you still can simply 'rebase' your
opcodes on top of the trunk.
  

Patch

Index: gdb/common/ax.def
===================================================================
RCS file: /home/cvsroot/GDB/gdb/common/ax.def,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 ax.def
--- gdb/common/ax.def	18 Feb 2014 15:36:03 -0000	1.1.1.2
+++ gdb/common/ax.def	26 Aug 2014 19:22:12 -0000
@@ -95,3 +95,9 @@ 
 DEFOP (rot, 0, 0, 3, 3, 0x33)
 /* Both the argument and consumed numbers are dynamic for this one.  */
 DEFOP (printf, 0, 0, 0, 0, 0x34)
+/* The following five operands are not yet implemented.  */
+DEFOP (setmem8, 0, 8, 2, 0, 0x35)
+DEFOP (setmem16, 0, 16, 2, 0, 0x36)
+DEFOP (setmem32, 0, 32, 2, 0, 0x37)
+DEFOP (setmem64, 0, 64, 2, 0, 0x38)
+DEFOP (setreg, 2, 0, 1, 0, 0x39)
Index: gdb/doc/agentexpr.texi
===================================================================
RCS file: /home/cvsroot/GDB/gdb/doc/agentexpr.texi,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 agentexpr.texi
--- gdb/doc/agentexpr.texi	18 Feb 2014 15:36:03 -0000	1.1.1.2
+++ gdb/doc/agentexpr.texi	26 Aug 2014 19:22:12 -0000
@@ -516,6 +516,28 @@ 
 range of memory, then the next-to-top of the stack is the lvalue's
 address, and the top of the stack is the lvalue's size, in bytes.
 
+@item @code{setmem8} (0x35): @var{addr} @var{value} @result{}
+@itemx @code{setmem16} (0x36): @var{addr} @var{value} @result{}
+@itemx @code{setmem32} (0x37): @var{addr} @var{value} @result{}
+@itemx @code{setmem64} (0x38): @var{addr} @var{value} @result{}
+Pop an address @var{addr} and value @var{value} from the stack.  For
+bytecode @code{setmem}@var{n}, set an @var{n}-bit value at @var{addr},
+using the @var{n}-bit least significant bits of @var{value} and natural
+target endianness.
+
+If attempting to write memory at @var{addr} would cause a processor
+exception of some sort, terminate with an error.
+
+Not implemented yet.
+
+@item @code{setreg} (0x39) @var{regnum}: @var{value} @result{}
+Pop @var{value} from the stack.  Set register @var{regnum} to @var{value}.
+
+If the register is read-only or if attempting to write @var{value} to it
+would cause a processor exception of some sort, terminate with an error.
+
+Not implemented yet.
+
 @end table