From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18950 invoked by alias); 2 Jun 2012 19:33:56 -0000 Received: (qmail 18692 invoked by uid 22791); 2 Jun 2012 19:33:51 -0000 X-SWARE-Spam-Status: No, hits=-7.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 02 Jun 2012 19:33:26 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q52JXPk5007721 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 2 Jun 2012 15:33:25 -0400 Received: from psique.redhat.com ([10.3.113.17]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q52JXKPb011324; Sat, 2 Jun 2012 15:33:24 -0400 From: Sergio Durigan Junior To: GDB Patches Cc: Tom Tromey , Sergio Durigan Junior Subject: [PATCH 02/10] SystemTap integration Date: Sat, 02 Jun 2012 19:33:00 -0000 Message-Id: <1338665528-5932-3-git-send-email-sergiodj@redhat.com> In-Reply-To: <1338665528-5932-1-git-send-email-sergiodj@redhat.com> References: <1338665528-5932-1-git-send-email-sergiodj@redhat.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-06/txt/msg00056.txt.bz2 With the inclusion of the SystemTap integration patch, I had to create this other patch to make it compile with this refactoring. It simply uses the new field `pstate' present in `struct stap_parse_info'. --- gdb/arm-linux-tdep.c | 26 ++++++++-------- gdb/i386-tdep.c | 85 ++++++++++++++++++++++++++------------------------ gdb/ppc-linux-tdep.c | 6 ++-- gdb/stap-probe.c | 64 +++++++++++++++++++------------------ gdb/stap-probe.h | 6 +++ 5 files changed, 99 insertions(+), 88 deletions(-) diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index f4eaa5c..be4f202 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -1147,28 +1147,28 @@ arm_stap_parse_special_token (struct gdbarch *gdbarch, return 0; /* The displacement. */ - write_exp_elt_opcode (OP_LONG); - write_exp_elt_type (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (displacement); - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); + write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, displacement); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (got_minus) - write_exp_elt_opcode (UNOP_NEG); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); /* The register name. */ - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); str.ptr = regname; str.length = len; - write_exp_string (str); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, str); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); - write_exp_elt_opcode (BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); /* Casting to the expected type. */ - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (lookup_pointer_type (p->arg_type)); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); + write_exp_elt_type (&p->pstate, lookup_pointer_type (p->arg_type)); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); - write_exp_elt_opcode (UNOP_IND); + write_exp_elt_opcode (&p->pstate, UNOP_IND); p->arg = tmp; } diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 5b04505..5751a2d 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -3499,34 +3499,36 @@ i386_stap_parse_special_token (struct gdbarch *gdbarch, for (i = 0; i < 3; i++) { - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); write_exp_elt_type - (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (displacements[i]); - write_exp_elt_opcode (OP_LONG); + (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, displacements[i]); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (got_minus[i]) - write_exp_elt_opcode (UNOP_NEG); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); } - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); str.ptr = regname; str.length = len; - write_exp_string (str); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, str); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (builtin_type (gdbarch)->builtin_data_ptr); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); + write_exp_elt_type (&p->pstate, + builtin_type (gdbarch)->builtin_data_ptr); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); - write_exp_elt_opcode (BINOP_ADD); - write_exp_elt_opcode (BINOP_ADD); - write_exp_elt_opcode (BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (lookup_pointer_type (p->arg_type)); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); + write_exp_elt_type (&p->pstate, + lookup_pointer_type (p->arg_type)); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); - write_exp_elt_opcode (UNOP_IND); + write_exp_elt_opcode (&p->pstate, UNOP_IND); p->arg = s; @@ -3627,49 +3629,50 @@ i386_stap_parse_special_token (struct gdbarch *gdbarch, if (offset) { - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); write_exp_elt_type - (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (offset); - write_exp_elt_opcode (OP_LONG); + (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, offset); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (offset_minus) - write_exp_elt_opcode (UNOP_NEG); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); } - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); base_token.ptr = base; base_token.length = len_base; - write_exp_string (base_token); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, base_token); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); if (offset) - write_exp_elt_opcode (BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); index_token.ptr = index; index_token.length = len_index; - write_exp_string (index_token); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, index_token); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); if (size) { - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); write_exp_elt_type - (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (size); - write_exp_elt_opcode (OP_LONG); + (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, size); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (size_minus) - write_exp_elt_opcode (UNOP_NEG); - write_exp_elt_opcode (BINOP_MUL); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); + write_exp_elt_opcode (&p->pstate, BINOP_MUL); } - write_exp_elt_opcode (BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (lookup_pointer_type (p->arg_type)); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); + write_exp_elt_type (&p->pstate, + lookup_pointer_type (p->arg_type)); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); - write_exp_elt_opcode (UNOP_IND); + write_exp_elt_opcode (&p->pstate, UNOP_IND); p->arg = s; diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 98704c1..2bf3259 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1335,11 +1335,11 @@ ppc_stap_parse_special_token (struct gdbarch *gdbarch, error (_("Invalid register name `%s' on expression `%s'."), regname, p->saved_arg); - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); str.ptr = regname; str.length = len; - write_exp_string (str); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, str); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); p->arg = s; } diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c index 506e6c3..80b0671 100644 --- a/gdb/stap-probe.c +++ b/gdb/stap-probe.c @@ -427,12 +427,12 @@ stap_parse_register_operand (struct stap_parse_info *p) displacement = strtol (p->arg, (char **) &p->arg, 10); /* Generating the expression for the displacement. */ - write_exp_elt_opcode (OP_LONG); - write_exp_elt_type (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (displacement); - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); + write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, displacement); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (got_minus) - write_exp_elt_opcode (UNOP_NEG); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); } /* Getting rid of register indirection prefix. */ @@ -487,23 +487,23 @@ stap_parse_register_operand (struct stap_parse_info *p) error (_("Invalid register name `%s' on expression `%s'."), regname, p->saved_arg); - write_exp_elt_opcode (OP_REGISTER); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); str.ptr = regname; str.length = len; - write_exp_string (str); - write_exp_elt_opcode (OP_REGISTER); + write_exp_string (&p->pstate, str); + write_exp_elt_opcode (&p->pstate, OP_REGISTER); if (indirect_p) { if (disp_p) - write_exp_elt_opcode (BINOP_ADD); + write_exp_elt_opcode (&p->pstate, BINOP_ADD); /* Casting to the expected type. */ - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (lookup_pointer_type (p->arg_type)); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); + write_exp_elt_type (&p->pstate, lookup_pointer_type (p->arg_type)); + write_exp_elt_opcode (&p->pstate, UNOP_CAST); - write_exp_elt_opcode (UNOP_IND); + write_exp_elt_opcode (&p->pstate, UNOP_IND); } /* Getting rid of the register name suffix. */ @@ -608,9 +608,9 @@ stap_parse_single_operand (struct stap_parse_info *p) ++p->arg; stap_parse_argument_conditionally (p); if (c == '-') - write_exp_elt_opcode (UNOP_NEG); + write_exp_elt_opcode (&p->pstate, UNOP_NEG); else if (c == '~') - write_exp_elt_opcode (UNOP_COMPLEMENT); + write_exp_elt_opcode (&p->pstate, UNOP_COMPLEMENT); } else { @@ -639,10 +639,11 @@ stap_parse_single_operand (struct stap_parse_info *p) && strncmp (tmp, reg_ind_prefix, reg_ind_prefix_len) != 0) { /* We are dealing with a numeric constant. */ - write_exp_elt_opcode (OP_LONG); - write_exp_elt_type (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (number); - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); + write_exp_elt_type (&p->pstate, + builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, number); + write_exp_elt_opcode (&p->pstate, OP_LONG); p->arg = tmp; @@ -671,10 +672,10 @@ stap_parse_single_operand (struct stap_parse_info *p) p->arg += const_prefix_len; number = strtol (p->arg, (char **) &p->arg, 10); - write_exp_elt_opcode (OP_LONG); - write_exp_elt_type (builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (number); - write_exp_elt_opcode (OP_LONG); + write_exp_elt_opcode (&p->pstate, OP_LONG); + write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long); + write_exp_elt_longcst (&p->pstate, number); + write_exp_elt_opcode (&p->pstate, OP_LONG); if (const_suffix) { @@ -822,7 +823,7 @@ stap_parse_argument_1 (struct stap_parse_info *p, int has_lhs, stap_parse_argument_1 (p, 1, lookahead_prec); } - write_exp_elt_opcode (opcode); + write_exp_elt_opcode (&p->pstate, opcode); } } @@ -863,8 +864,8 @@ stap_parse_argument (const char **arg, struct type *atype, /* We need to initialize the expression buffer, in order to begin our parsing efforts. The language here does not matter, since we are using our own parser. */ - initialize_expout (10, current_language, gdbarch); - back_to = make_cleanup (free_current_contents, &expout); + initialize_expout (&p.pstate, 10, current_language, gdbarch); + back_to = make_cleanup (free_current_contents, &p.pstate.expout); p.saved_arg = *arg; p.arg = *arg; @@ -879,16 +880,17 @@ stap_parse_argument (const char **arg, struct type *atype, gdb_assert (p.inside_paren_p == 0); /* Casting the final expression to the appropriate type. */ - write_exp_elt_opcode (UNOP_CAST); - write_exp_elt_type (atype); - write_exp_elt_opcode (UNOP_CAST); + write_exp_elt_opcode (&p.pstate, UNOP_CAST); + write_exp_elt_type (&p.pstate, atype); + write_exp_elt_opcode (&p.pstate, UNOP_CAST); - reallocate_expout (); + reallocate_expout (&p.pstate); p.arg = skip_spaces_const (p.arg); *arg = p.arg; - return expout; + /* We can safely return EXPOUT here. */ + return p.pstate.expout; } /* Function which parses an argument string from PROBE, correctly splitting diff --git a/gdb/stap-probe.h b/gdb/stap-probe.h index e30d56a..003fad9 100644 --- a/gdb/stap-probe.h +++ b/gdb/stap-probe.h @@ -20,6 +20,9 @@ #if !defined (STAP_PROBE_H) #define STAP_PROBE_H 1 +/* For `struct parser_state'. */ +#include "parser-defs.h" + /* Structure which holds information about the parsing process of one probe's argument. */ @@ -28,6 +31,9 @@ struct stap_parse_info /* The probe's argument in a string format. */ const char *arg; + /* The parser state to be used when generating the expression. */ + struct parser_state pstate; + /* A pointer to the full chain of arguments. This is useful for printing error messages. The parser functions should not modify this argument directly; instead, they should use the ARG pointer above. */ -- 1.7.7.6