From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8704 invoked by alias); 6 Sep 2002 20:44:34 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 8697 invoked from network); 6 Sep 2002 20:44:32 -0000 Received: from unknown (HELO mailhub.lss.emc.com) (168.159.1.79) by sources.redhat.com with SMTP; 6 Sep 2002 20:44:32 -0000 Received: from popimap.lss.emc.com (vesta-ge.lss.emc.com [10.254.140.138]) by mailhub.lss.emc.com (Switch-2.2.0/Switch-2.2.0) with ESMTP id g86KiSm06387 for ; Fri, 6 Sep 2002 16:44:28 -0400 (EDT) Received: from emc.com (lul1173.lss.emc.com [168.159.33.173]) by popimap.lss.emc.com (Switch-2.2.0/Switch-2.2.0) with ESMTP id g86KiQt05772; Fri, 6 Sep 2002 16:44:26 -0400 (EDT) Message-ID: <3D7913E5.9080107@emc.com> Date: Fri, 06 Sep 2002 13:44:00 -0000 From: Josef Ezra User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.0.0) Gecko/20020530 X-Accept-Language: en-us, en MIME-Version: 1.0 CC: Josef Ezra , gdb-patches@sources.redhat.com Subject: Re: [RFA] new command: 'maintenance info lines' References: <02ea01c1e6eb$65f850c0$ad219fa8@lss.emc.com> <3CBEFC88.37807AEF@redhat.com> <3D08D15E.7030805@emc.com> <3D08DB87.A8119A1D@redhat.com> <3D0E39E6.5060701@emc.com> <3D0FA3CD.5681BF89@redhat.com> Content-Type: multipart/mixed; boundary="------------020308000703090702060308" X-SW-Source: 2002-09/txt/msg00096.txt.bz2 This is a multi-part message in MIME format. --------------020308000703090702060308 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 793 Michael Snyder wrote: > Josef Ezra wrote: > >>Michael Snyder wrote: >> >>>I like it as maybe a maintainer command (or even a user one, if >>>you think users might gain something from it. >>> >>>I don't like the name, though -- "info orientation" doesn't say >>>anything to me. Maybe "info lines"? Or, as a maintainer command, >>>"info sal"? >>> >> >>Following the line of 'maintenance info breakpoints / sections / >>sol-threads' commands, I'd like to suggest 'maintenance info lines' for >>this line-address dump. > > > Works for me. > > hi It took a while to resolve the legal issues, so I'm re-committing .. - jezra * printcmd.c (maintenance_info_lines): created (_initialize_printcmd): add command * doc/gdb.textinfo: add documentation for 'maint info lines' --------------020308000703090702060308 Content-Type: text/plain; name="diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff" Content-length: 3783 Index: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.120 diff -u -3 -r1.120 gdb.texinfo --- doc/gdb.texinfo 5 Sep 2002 12:13:08 -0000 1.120 +++ doc/gdb.texinfo 5 Sep 2002 21:01:23 -0000 @@ -4362,6 +4362,13 @@ can set @var{instruction-set} to either @code{intel} or @code{att}. The default is @code{att}, the AT&T flavor used by default by Unix assemblers for x86-based targets. + +@kindex maint info lines +@item maint info lines +This command takes same parameters as @code{disassemble}, but only +dumps an @code{@var{address}:@var{line}} pairs. Every pair means: ``from this +@var{address} forward, the code was generated by that @var{line}''. + @end table Index: printcmd.c =================================================================== RCS file: /cvs/src/src/gdb/printcmd.c,v retrieving revision 1.40 diff -u -3 -r1.40 printcmd.c --- printcmd.c 11 Jul 2002 20:46:19 -0000 1.40 +++ printcmd.c 5 Sep 2002 21:01:23 -0000 @@ -2390,6 +2390,75 @@ } +/* + Print range as 'Address:Line' pairs. This command might be usefull + to associate sources and assembly commands. +*/ + +static void +maintenance_info_lines (char *arg, int from_tty) +{ + CORE_ADDR low, high; + { + char *name; + CORE_ADDR pc, pc_masked; + char *space_index; + name = NULL; + if (!arg) + { + if (!selected_frame) + error ("No frame selected.\n"); + + pc = get_frame_pc (selected_frame); + if (find_pc_partial_function (pc, &name, &low, &high) == 0) + error ("No function contains program counter for selected frame.\n"); + + low += FUNCTION_START_OFFSET; + } + else if (!(space_index = (char *) strchr (arg, ' '))) + { + /* One argument. */ + pc = parse_and_eval_address (arg); + if (find_pc_partial_function (pc, &name, &low, &high) == 0) + error ("No function contains specified address.\n"); + low += FUNCTION_START_OFFSET; + } + else + { + /* Two arguments. */ + *space_index = '\0'; + low = parse_and_eval_address (arg); + high = parse_and_eval_address (space_index + 1); + } + } + /* OK, we got the low-high range, what now? */ + { + struct symtab *symtab ; + struct linetable_entry *le ; + int i, nitems ; + symtab = find_pc_symtab (low ) ; + if (symtab && symtab->linetable) + { + + le = symtab->linetable->item ; + nitems = symtab->linetable->nitems ; + + /* skip to low */ + for (i = 0 ; + (i < nitems - 1) && (le[i + 1].pc < low) ; + i++ ) ; + + /* and print all the way to high */ + for (; (i < nitems -1) && (le[i].pc <= high); i++ ) + { + if (le[i].pc != le[i+1].pc ) + /* optimized line ? */ + printf_filtered ("0x%08x:%d\n", (unsigned) le[i].pc, le[i].line ) ; + } + } + } +} + void _initialize_printcmd (void) { @@ -2568,5 +2637,11 @@ examine_h_type = init_type (TYPE_CODE_INT, 2, 0, "examine_h_type", NULL); examine_w_type = init_type (TYPE_CODE_INT, 4, 0, "examine_w_type", NULL); examine_g_type = init_type (TYPE_CODE_INT, 8, 0, "examine_g_type", NULL); + add_cmd ( "lines", class_maintenance, maintenance_info_lines, + concat ("Dump a line-address table a specified section of memory.\n\ +Default is the function surrounding the pc of the selected frame.\n\ +With a single argument, the function surrounding that address is dumped.\n\ +Two arguments are taken as a range of memory to dump.", NULL ), + &maintenanceinfolist) ; } --------------020308000703090702060308--