RFC: tracepoints: extend range of ax_trace_quick function
Jim Blandy
jimb@codesourcery.com
Fri Oct 26 23:05:00 GMT 2007
In order to get Linux kernel tracepoints working, I needed to make a
number of fixes in GDB. This is one such patch; the code which uses
the function's new range comes a bit later.
Okay to commit?
gdb/ChangeLog:
2007-10-24 Jim Blandy <jimb@codesourcery.com>
* ax-general.c (ax_trace_quick): Generate trace16 instructions for
sizes from 256 to 65535.
diff -r 7625042dd5a0 -r eb635294a14e gdb/ax-general.c
--- a/gdb/ax-general.c Wed Oct 24 10:17:42 2007 -0700
+++ b/gdb/ax-general.c Wed Oct 24 18:02:15 2007 -0700
@@ -166,17 +166,29 @@ ax_zero_ext (struct agent_expr *x, int n
}
-/* Append a trace_quick instruction to EXPR, to record N bytes. */
+/* Append a trace_quick or trace16 instruction to EXPR, to record N bytes. */
void
ax_trace_quick (struct agent_expr *x, int n)
{
- /* N must fit in a byte. */
- if (n < 0 || n > 255)
- error (_("GDB bug: ax-general.c (ax_trace_quick): size out of range for trace_quick"));
-
- grow_expr (x, 2);
- x->buf[x->len++] = aop_trace_quick;
- x->buf[x->len++] = n;
+ if (n < 0)
+ internal_error (__FILE__, __LINE__,
+ _("ax_trace_quick: negative size"));
+ else if (n < (1 << 8))
+ {
+ grow_expr (x, 2);
+ x->buf[x->len++] = aop_trace_quick;
+ x->buf[x->len++] = n;
+ }
+ else if (n < (1 << 16))
+ {
+ grow_expr (x, 3);
+ x->buf[x->len++] = aop_trace16;
+ x->buf[x->len++] = n >> 8;
+ x->buf[x->len++] = n;
+ }
+ else
+ internal_error (__FILE__, __LINE__,
+ _("ax_trace_quick: size out of range"));
}
diff -r 7625042dd5a0 -r eb635294a14e gdb/ax.h
--- a/gdb/ax.h Wed Oct 24 10:17:42 2007 -0700
+++ b/gdb/ax.h Wed Oct 24 18:02:15 2007 -0700
@@ -157,7 +157,8 @@ extern void ax_ext (struct agent_expr *E
/* Append a zero-extension instruction to EXPR, to extend an N-bit value. */
extern void ax_zero_ext (struct agent_expr *EXPR, int N);
-/* Append a trace_quick instruction to EXPR, to record N bytes. */
+/* Append a trace_quick or trace16 instruction to EXPR, to record N bytes.
+ N must be less than 65536. */
extern void ax_trace_quick (struct agent_expr *EXPR, int N);
/* Append a goto op to EXPR. OP is the actual op (must be aop_goto or
More information about the Gdb-patches
mailing list