From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23768 invoked by alias); 10 Dec 2009 02:32:54 -0000 Received: (qmail 23759 invoked by uid 22791); 10 Dec 2009 02:32:53 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-pw0-f49.google.com (HELO mail-pw0-f49.google.com) (209.85.160.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Dec 2009 02:32:46 +0000 Received: by pwj12 with SMTP id 12so2744092pwj.8 for ; Wed, 09 Dec 2009 18:32:45 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.150.37 with SMTP id x37mr1740941wfd.274.1260412365212; Wed, 09 Dec 2009 18:32:45 -0800 (PST) In-Reply-To: References: <4B11DA3C.3000203@vmware.com> <20091130162246.GE4034@adacore.com> <4B141157.3070709@vmware.com> <20091130185341.GI4034@adacore.com> <4B141469.5030402@vmware.com> <20091130190619.GJ4034@adacore.com> <4B1428F0.7090608@vmware.com> From: Hui Zhu Date: Thu, 10 Dec 2009 02:32:00 -0000 Message-ID: Subject: Re: [RFC] Let "gcore" command accept a suffix argument To: Michael Snyder , Joel Brobecker Cc: gdb-patches ml Content-Type: multipart/mixed; boundary=000e0cd28b1c4c8d92047a569fa4 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: 2009-12/txt/msg00136.txt.bz2 --000e0cd28b1c4c8d92047a569fa4 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 3497 Sorry I forgot post it to gdb-patches. Hi guys, I make a patch to make gdb support "eval gcore foo.$a" command. (gdb) set $cmd="pwd" (gdb) eval $cmd Working directory /home/teawater/gdb/bgdbno/gdb. (gdb) set $cmd="file ~/gdb/a.out" (gdb) eval $cmd Reading symbols from /home/teawater/gdb/a.out...done. (gdb) start Temporary breakpoint 1 at 0x80483be Starting program: /home/teawater/gdb/a.out Temporary breakpoint 1, 0x080483be in main () (gdb) set $name="eval" (gdb) set $num=3 (gdb) eval gcore $name.$num Saved corefile eval.3 Please post your comments about it. And the help and file that include this command is not very well. Please help me with them. :) Thanks, Hui 2009-12-10 Hui Zhu * printcmd.c (ctype.h): New include. (eval_command): New function. (_initialize_printcmd): New command "eval". --- printcmd.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) --- a/printcmd.c +++ b/printcmd.c @@ -50,6 +50,8 @@ #include "parser-defs.h" #include "charset.h" +#include + #ifdef TUI #include "tui/tui.h" /* For tui_active et.al. */ #endif @@ -2625,6 +2627,84 @@ printf_command (char *arg, int from_tty) do_cleanups (old_cleanups); } +static void +eval_command (char *exp, int from_tty) +{ +#define CMDSIZE 1024 + char cmd[CMDSIZE + 1]; + char *cmdp = cmd; + int is_eval = 0; + char *eval_begin; + + if (!exp) + return; + + while (cmdp - cmd < CMDSIZE) + { + if (is_eval) + { + if (!isalnum (exp[0]) && exp[0] != '_') + { + struct value *value; + gdb_byte *buffer; + int length = -1; + struct type *char_type = NULL; + const char *la_encoding = NULL; + char tmp = exp[0]; + + exp[0] = '\0'; + value = parse_and_eval (eval_begin); + + switch (TYPE_CODE (value_type (value))) + { + case TYPE_CODE_ARRAY: + LA_GET_STRING (value, &buffer, &length, + &char_type, &la_encoding); + break; + case TYPE_CODE_INT: + buffer = plongest (value_as_long (value)); + length = strlen (buffer); + break; + default: + buffer = eval_begin; + length = exp - eval_begin; + break; + } + + if (length > CMDSIZE - (cmdp - cmd)) + length = CMDSIZE - (cmdp - cmd); + memcpy (cmdp, buffer, length); + cmdp += length; + + exp[0] = tmp; + is_eval = 0; + } + else + exp ++; + } + else + { + if (!exp[0]) + break; + + if (exp[0] == '$') + { + is_eval = 1; + eval_begin = exp; + } + else + { + cmdp[0] = exp[0]; + cmdp ++; + } + exp ++; + } + } + cmdp[0] = '\0'; + + execute_command (cmd, from_tty); +} + void _initialize_printcmd (void) { @@ -2788,4 +2868,7 @@ Show printing of source filename and lin NULL, show_print_symbol_filename, &setprintlist, &showprintlist); + + add_com ("eval", no_class, eval_command, _("\ +Call command with variable.")); } --000e0cd28b1c4c8d92047a569fa4 Content-Type: text/plain; charset=US-ASCII; name="eval.txt" Content-Disposition: attachment; filename="eval.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g30x96x41 Content-length: 3583 LS0tCiBwcmludGNtZC5jIHwgICA4MyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKQoKLS0tIGEvcHJpbnRjbWQu YworKysgYi9wcmludGNtZC5jCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVk ZSAicGFyc2VyLWRlZnMuaCIKICNpbmNsdWRlICJjaGFyc2V0LmgiCiAKKyNp bmNsdWRlIDxjdHlwZS5oPgorCiAjaWZkZWYgVFVJCiAjaW5jbHVkZSAidHVp L3R1aS5oIgkJLyogRm9yIHR1aV9hY3RpdmUgZXQuYWwuICAgKi8KICNlbmRp ZgpAQCAtMjYyNSw2ICsyNjI3LDg0IEBAIHByaW50Zl9jb21tYW5kIChjaGFy ICphcmcsIGludCBmcm9tX3R0eSkKICAgZG9fY2xlYW51cHMgKG9sZF9jbGVh bnVwcyk7CiB9CiAKK3N0YXRpYyB2b2lkCitldmFsX2NvbW1hbmQgKGNoYXIg KmV4cCwgaW50IGZyb21fdHR5KQoreworI2RlZmluZSBDTURTSVpFIDEwMjQK KyAgY2hhciBjbWRbQ01EU0laRSArIDFdOworICBjaGFyICpjbWRwID0gY21k OworICBpbnQgaXNfZXZhbCA9IDA7CisgIGNoYXIgKmV2YWxfYmVnaW47CisK KyAgaWYgKCFleHApCisgICAgcmV0dXJuOworCisgIHdoaWxlIChjbWRwIC0g Y21kIDwgQ01EU0laRSkKKyAgICB7CisgICAgICBpZiAoaXNfZXZhbCkKKyAg ICAgICAgeworICAgICAgICAgIGlmICghaXNhbG51bSAoZXhwWzBdKSAmJiBl eHBbMF0gIT0gJ18nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBz dHJ1Y3QgdmFsdWUgKnZhbHVlOworICAgICAgICAgICAgICBnZGJfYnl0ZSAq YnVmZmVyOworICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gLTE7CisgICAg ICAgICAgICAgIHN0cnVjdCB0eXBlICpjaGFyX3R5cGUgPSBOVUxMOworICAg ICAgICAgICAgICBjb25zdCBjaGFyICpsYV9lbmNvZGluZyA9IE5VTEw7Cisg ICAgICAgICAgICAgIGNoYXIgdG1wID0gZXhwWzBdOworCisgICAgICAgICAg ICAgIGV4cFswXSA9ICdcMCc7CisgICAgICAgICAgICAgIHZhbHVlID0gcGFy c2VfYW5kX2V2YWwgKGV2YWxfYmVnaW4pOworCisgICAgICAgICAgICAgIHN3 aXRjaCAoVFlQRV9DT0RFICh2YWx1ZV90eXBlICh2YWx1ZSkpKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9DT0RF X0FSUkFZOgorICAgICAgICAgICAgICAgICAgICBMQV9HRVRfU1RSSU5HICh2 YWx1ZSwgJmJ1ZmZlciwgJmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmNoYXJfdHlwZSwgJmxhX2VuY29kaW5nKTsKKyAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgVFlQRV9DT0RFX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVy ID0gcGxvbmdlc3QgKHZhbHVlX2FzX2xvbmcgKHZhbHVlKSk7CisgICAgICAg ICAgICAgICAgICAgIGxlbmd0aCA9IHN0cmxlbiAoYnVmZmVyKTsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBldmFsX2JlZ2lu OworICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBleHAgLSBldmFsX2Jl Z2luOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IENNRFNJWkUg LSAoY21kcCAtIGNtZCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gQ01E U0laRSAtIChjbWRwIC0gY21kKTsKKyAgICAgICAgICAgICAgbWVtY3B5IChj bWRwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgIGNtZHAgKz0g bGVuZ3RoOworCisgICAgICAgICAgICAgIGV4cFswXSA9IHRtcDsKKyAgICAg ICAgICAgICAgaXNfZXZhbCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgZXhwICsrOworICAgICAgICB9CisgICAg ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWV4cFswXSkKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKGV4cFswXSA9PSAn JCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlzX2V2YWwgPSAx OworICAgICAgICAgICAgICBldmFsX2JlZ2luID0gZXhwOworICAgICAgICAg ICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgY21kcFswXSA9IGV4cFswXTsKKyAgICAgICAgICAgICAgY21kcCAr KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBleHAgKys7CisgICAgICAg IH0KKyAgICB9CisgIGNtZHBbMF0gPSAnXDAnOworCisgIGV4ZWN1dGVfY29t bWFuZCAoY21kLCBmcm9tX3R0eSk7Cit9CisKIHZvaWQKIF9pbml0aWFsaXpl X3ByaW50Y21kICh2b2lkKQogewpAQCAtMjc4OCw0ICsyODY4LDcgQEAgU2hv dyBwcmludGluZyBvZiBzb3VyY2UgZmlsZW5hbWUgYW5kIGxpbgogCQkJICAg TlVMTCwKIAkJCSAgIHNob3dfcHJpbnRfc3ltYm9sX2ZpbGVuYW1lLAogCQkJ ICAgJnNldHByaW50bGlzdCwgJnNob3dwcmludGxpc3QpOworCisgIGFkZF9j b20gKCJldmFsIiwgbm9fY2xhc3MsIGV2YWxfY29tbWFuZCwgXygiXAorQ2Fs bCBjb21tYW5kIHdpdGggdmFyaWFibGUuIikpOwogfQo= --000e0cd28b1c4c8d92047a569fa4--