Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* should gdb require '.text' and '.data' sections?
@ 2002-04-18  8:11 josef ezra
  2002-04-18 11:15 ` Michael Snyder
  0 siblings, 1 reply; 24+ messages in thread
From: josef ezra @ 2002-04-18  8:11 UTC (permalink / raw)
  To: gdb-patches

Hello

I'm trying to debug a symbol file that has no '.text' section. Unlike 5.0
version, the new SECT_OFF_TEXT(objfile) macro calls (no-return) internal
error and prevent the read.

Should gdb work that way (requiring '.text' and '.data' sections)?

If not, can we consider the first sections flagged 'SEC_CODE'/'SEC_DATA' as
substitutes? Or maybe better have a default 0/1 values (like 5.0)? Both
should work in my case.

- Jezra





^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: should gdb require '.text' and '.data' sections?
  2002-04-18  8:11 should gdb require '.text' and '.data' sections? josef ezra
@ 2002-04-18 11:15 ` Michael Snyder
  2002-04-22  6:32   ` Josef Ezra
                     ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Michael Snyder @ 2002-04-18 11:15 UTC (permalink / raw)
  To: josef ezra; +Cc: gdb-patches

josef ezra wrote:
> 
> Hello
> 
> I'm trying to debug a symbol file that has no '.text' section. Unlike 5.0
> version, the new SECT_OFF_TEXT(objfile) macro calls (no-return) internal
> error and prevent the read.
> 
> Should gdb work that way (requiring '.text' and '.data' sections)?
> 
> If not, can we consider the first sections flagged 'SEC_CODE'/'SEC_DATA' as
> substitutes? Or maybe better have a default 0/1 values (like 5.0)? Both
> should work in my case.

I agree, gdb should not require .text and .data.  For one thing, 
a simple embedded assembler program might have no initialized data.  
For another, those segments might be called something else.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: should gdb require '.text' and '.data' sections?
  2002-04-18 11:15 ` Michael Snyder
@ 2002-04-22  6:32   ` Josef Ezra
  2002-04-24  6:45   ` [RFA] " Josef Ezra
  2002-06-13 10:06   ` Request for new gdb command: 'info orientation' Josef Ezra
  2 siblings, 0 replies; 24+ messages in thread
From: Josef Ezra @ 2002-04-22  6:32 UTC (permalink / raw)
  To: Michael Snyder; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1120 bytes --]

Michael Snyder wrote:

>josef ezra wrote:
>
>>Hello
>>
>>I'm trying to debug a symbol file that has no '.text' section. Unlike 5.0
>>version, the new SECT_OFF_TEXT(objfile) macro calls (no-return) internal
>>error and prevent the read.
>>
>>Should gdb work that way (requiring '.text' and '.data' sections)?
>>
>>If not, can we consider the first sections flagged 'SEC_CODE'/'SEC_DATA' as
>>substitutes? Or maybe better have a default 0/1 values (like 5.0)? Both
>>should work in my case.
>>
>
>I agree, gdb should not require .text and .data.  For one thing, 
>a simple embedded assembler program might have no initialized data.  
>For another, those segments might be called something else.
>

Thanks Michael

This patch will set the index of the first section that contains 
CODE/DATA flag as the default value of
objfile->sect_index_code/data.

- jezra

bfd/ChangeLog:
* section.c (bfd_get_first_code_section): new function.
* section.c (bfd_get_first_data_section): new function.
* bfd-in2.h: Regenerated.

gdb/ChangeLog:
* symfile.c ( default_symfile_offsets): default index for '.text' and 
'.data' sections.





[-- Attachment #2: sect_index_gdb.pat --]
[-- Type: text/plain, Size: 712 bytes --]

Index: gdb/symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.58
diff -u -3 -r1.58 symfile.c
--- gdb/symfile.c	29 Mar 2002 01:09:27 -0000	1.58
+++ gdb/symfile.c	22 Apr 2002 13:05:51 -0000
@@ -522,10 +522,14 @@
      .rodata sections. */
 
   sect = bfd_get_section_by_name (objfile->obfd, ".text");
+  if (!sect)
+    sect = bfd_get_first_code_section (objfile->obfd); 
   if (sect) 
     objfile->sect_index_text = sect->index;
 
   sect = bfd_get_section_by_name (objfile->obfd, ".data");
+  if (!sect)
+    sect = bfd_get_first_data_section (objfile->obfd) ; 
   if (sect) 
     objfile->sect_index_data = sect->index;
 

[-- Attachment #3: sect_index_bfd.pat --]
[-- Type: text/plain, Size: 1910 bytes --]

Index: bfd/section.c
===================================================================
RCS file: /cvs/src/src/bfd/section.c,v
retrieving revision 1.44
diff -u -3 -r1.44 section.c
--- bfd/section.c	30 Jan 2002 18:12:16 -0000	1.44
+++ bfd/section.c	19 Apr 2002 21:19:44 -0000
@@ -772,6 +772,56 @@
 
 /*
 FUNCTION
+	bfd_get_first_code_section
+
+SYNOPSIS
+	asection *bfd_get_first_code_section(bfd *abfd);
+
+DESCRIPTION
+	Run through @var{abfd} and return the first
+	<<asection>>s whose flagged SEC_CODE, <<NULL>> 
+	@xref{Sections} if none (just in case .. )
+*/
+
+asection *
+bfd_get_first_code_section (abfd)
+     bfd *abfd;
+{
+  asection *sect;
+
+  for (sect = abfd->sections; sect != NULL; sect = sect->next)
+    if (sect->flags & SEC_CODE)
+      return sect;
+  return NULL;
+}
+
+/*
+FUNCTION
+	bfd_get_first_data_section
+
+SYNOPSIS
+	asection *bfd_get_first_data_section(bfd *abfd);
+
+DESCRIPTION
+	Run through @var{abfd} and return the first
+	<<asection>>s whose flagged SEC_DATA, <<NULL>> 
+	@xref{Sections} if none (just in case .. )
+*/
+
+asection *
+bfd_get_first_data_section (abfd)
+     bfd *abfd;
+{
+  asection *sect;
+
+  for (sect = abfd->sections; sect != NULL; sect = sect->next)
+    if (sect->flags & SEC_DATA)
+      return sect;
+  return NULL;
+}
+
+/*
+FUNCTION
 	bfd_get_unique_section_name
 
 SYNOPSIS
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.149
diff -u -3 -r1.149 bfd-in2.h
--- bfd/bfd-in2.h	4 Apr 2002 19:53:34 -0000	1.149
+++ bfd/bfd-in2.h	19 Apr 2002 21:19:45 -0000
@@ -1401,6 +1401,12 @@
 
 asection *
 bfd_get_section_by_name PARAMS ((bfd *abfd, const char *name));
+
+asection *
+bfd_get_first_code_section PARAMS ((bfd *abfd));
+
+asection *
+bfd_get_first_data_section PARAMS ((bfd *abfd));
 
 char *
 bfd_get_unique_section_name PARAMS ((bfd *abfd,

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [RFA] should gdb require '.text' and '.data' sections?
  2002-04-18 11:15 ` Michael Snyder
  2002-04-22  6:32   ` Josef Ezra
@ 2002-04-24  6:45   ` Josef Ezra
  2002-06-13 10:06   ` Request for new gdb command: 'info orientation' Josef Ezra
  2 siblings, 0 replies; 24+ messages in thread
From: Josef Ezra @ 2002-04-24  6:45 UTC (permalink / raw)
  Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1135 bytes --]

Michael Snyder wrote:

>josef ezra wrote:
>
>>Hello
>>
>>I'm trying to debug a symbol file that has no '.text' section. Unlike 5.0
>>version, the new SECT_OFF_TEXT(objfile) macro calls (no-return) internal
>>error and prevent the read.
>>
>>Should gdb work that way (requiring '.text' and '.data' sections)?
>>
>>If not, can we consider the first sections flagged 'SEC_CODE'/'SEC_DATA' as
>>substitutes? Or maybe better have a default 0/1 values (like 5.0)? Both
>>should work in my case.
>>
>
>I agree, gdb should not require .text and .data.  For one thing, 
>a simple embedded assembler program might have no initialized data.  
>For another, those segments might be called something else.
>

This patch will set objfile->sect_index_code/data index to the first 
section that contains CODE/DATA flag when no section was named 
'.text'/'.data'.

- jezra

bfd/ChangeLog:
* section.c (bfd_get_first_code_section): new function.
* section.c (bfd_get_first_data_section): new function.
* bfd-in2.h: Regenerated via 'make headers'.

gdb/ChangeLog:
* symfile.c ( default_symfile_offsets): default index for '.text' and 
'.data' sections.


[-- Attachment #2: sect_index_bfd.pat --]
[-- Type: text/plain, Size: 1910 bytes --]

Index: bfd/section.c
===================================================================
RCS file: /cvs/src/src/bfd/section.c,v
retrieving revision 1.44
diff -u -3 -r1.44 section.c
--- bfd/section.c	30 Jan 2002 18:12:16 -0000	1.44
+++ bfd/section.c	19 Apr 2002 21:19:44 -0000
@@ -772,6 +772,56 @@
 
 /*
 FUNCTION
+	bfd_get_first_code_section
+
+SYNOPSIS
+	asection *bfd_get_first_code_section(bfd *abfd);
+
+DESCRIPTION
+	Run through @var{abfd} and return the first
+	<<asection>>s whose flagged SEC_CODE, <<NULL>> 
+	@xref{Sections} if none (just in case .. )
+*/
+
+asection *
+bfd_get_first_code_section (abfd)
+     bfd *abfd;
+{
+  asection *sect;
+
+  for (sect = abfd->sections; sect != NULL; sect = sect->next)
+    if (sect->flags & SEC_CODE)
+      return sect;
+  return NULL;
+}
+
+/*
+FUNCTION
+	bfd_get_first_data_section
+
+SYNOPSIS
+	asection *bfd_get_first_data_section(bfd *abfd);
+
+DESCRIPTION
+	Run through @var{abfd} and return the first
+	<<asection>>s whose flagged SEC_DATA, <<NULL>> 
+	@xref{Sections} if none (just in case .. )
+*/
+
+asection *
+bfd_get_first_data_section (abfd)
+     bfd *abfd;
+{
+  asection *sect;
+
+  for (sect = abfd->sections; sect != NULL; sect = sect->next)
+    if (sect->flags & SEC_DATA)
+      return sect;
+  return NULL;
+}
+
+/*
+FUNCTION
 	bfd_get_unique_section_name
 
 SYNOPSIS
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.149
diff -u -3 -r1.149 bfd-in2.h
--- bfd/bfd-in2.h	4 Apr 2002 19:53:34 -0000	1.149
+++ bfd/bfd-in2.h	19 Apr 2002 21:19:45 -0000
@@ -1401,6 +1401,12 @@
 
 asection *
 bfd_get_section_by_name PARAMS ((bfd *abfd, const char *name));
+
+asection *
+bfd_get_first_code_section PARAMS ((bfd *abfd));
+
+asection *
+bfd_get_first_data_section PARAMS ((bfd *abfd));
 
 char *
 bfd_get_unique_section_name PARAMS ((bfd *abfd,

[-- Attachment #3: sect_index_gdb.pat --]
[-- Type: text/plain, Size: 712 bytes --]

Index: gdb/symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.58
diff -u -3 -r1.58 symfile.c
--- gdb/symfile.c	29 Mar 2002 01:09:27 -0000	1.58
+++ gdb/symfile.c	22 Apr 2002 13:05:51 -0000
@@ -522,10 +522,14 @@
      .rodata sections. */
 
   sect = bfd_get_section_by_name (objfile->obfd, ".text");
+  if (!sect)
+    sect = bfd_get_first_code_section (objfile->obfd); 
   if (sect) 
     objfile->sect_index_text = sect->index;
 
   sect = bfd_get_section_by_name (objfile->obfd, ".data");
+  if (!sect)
+    sect = bfd_get_first_data_section (objfile->obfd) ; 
   if (sect) 
     objfile->sect_index_data = sect->index;
 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Request for new gdb command: 'info orientation'
  2002-04-18 11:15 ` Michael Snyder
  2002-04-22  6:32   ` Josef Ezra
  2002-04-24  6:45   ` [RFA] " Josef Ezra
@ 2002-06-13 10:06   ` Josef Ezra
  2002-06-13 10:35     ` Andrew Cagney
  2002-06-13 11:06     ` Michael Snyder
  2 siblings, 2 replies; 24+ messages in thread
From: Josef Ezra @ 2002-06-13 10:06 UTC (permalink / raw)
  To: gdb-patches; +Cc: jezra


Hi all

While writing a perl gui for gdb, I had to add a new command. It looks 
like this:

(gdb) info orientation main
0x00034960:753
0x00034b44:757
0x00034b48:761
0x00034b50:759
0x00034b54:761
0x00034b68:763
0x00034b70:772
(gdb)

and associate addresses with line numbers. This information allow 
merging the disassemble with the sources without executing 'info line' 
command for each address, since the last took too long (the difference 
between O(n^2) to O(n)).
(The command was also useful for analyzing patches and code changes.)

Is there an existing way of doing it? If not, will you consider adding 
this (or similar) command?

- jezra

The perl gui (temporally named 'sgdb') is in the process of becoming an 
open source. Snapshots can be found at http://sgdb.sourceforge.net

The linkage between perl and gdb can be downloaded from CPAN. The module 
name is Devel::GDB.





^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Request for new gdb command: 'info orientation'
  2002-06-13 10:06   ` Request for new gdb command: 'info orientation' Josef Ezra
@ 2002-06-13 10:35     ` Andrew Cagney
  2002-06-13 11:06     ` Michael Snyder
  1 sibling, 0 replies; 24+ messages in thread
From: Andrew Cagney @ 2002-06-13 10:35 UTC (permalink / raw)
  To: Josef Ezra; +Cc: gdb-patches


> Hi all
> 
> While writing a perl gui for gdb, I had to add a new command. It looks like this:
> 
> (gdb) info orientation main
> 0x00034960:753
> 0x00034b44:757
> 0x00034b48:761
> 0x00034b50:759
> 0x00034b54:761
> 0x00034b68:763
> 0x00034b70:772
> (gdb)
> 
> and associate addresses with line numbers. This information allow merging the disassemble with the sources without executing 'info line' command for each address, since the last took too long (the difference between O(n^2) to O(n)).
> (The command was also useful for analyzing patches and code changes.)
> 
> Is there an existing way of doing it? If not, will you consider adding this (or similar) command?

FYI, there is already an equivalent mechanism.  Please have a look at:

http://sources.redhat.com/gdb/current/onlinedocs/gdb_25.html#SEC283

Andrew


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Request for new gdb command: 'info orientation'
  2002-06-13 10:06   ` Request for new gdb command: 'info orientation' Josef Ezra
  2002-06-13 10:35     ` Andrew Cagney
@ 2002-06-13 11:06     ` Michael Snyder
  2002-06-13 11:20       ` Josef Ezra
  2002-06-17 12:34       ` [RFA] new command: 'maintenance info lines' Josef Ezra
  1 sibling, 2 replies; 24+ messages in thread
From: Michael Snyder @ 2002-06-13 11:06 UTC (permalink / raw)
  To: Josef Ezra; +Cc: gdb-patches

Josef Ezra wrote:
> 
> Hi all
> 
> While writing a perl gui for gdb, I had to add a new command. It looks
> like this:
> 
> (gdb) info orientation main
> 0x00034960:753
> 0x00034b44:757
> 0x00034b48:761
> 0x00034b50:759
> 0x00034b54:761
> 0x00034b68:763
> 0x00034b70:772
> (gdb)
> 
> and associate addresses with line numbers. This information allow
> merging the disassemble with the sources without executing 'info line'
> command for each address, since the last took too long (the difference
> between O(n^2) to O(n)).
> (The command was also useful for analyzing patches and code changes.)

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"?


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Request for new gdb command: 'info orientation'
  2002-06-13 11:06     ` Michael Snyder
@ 2002-06-13 11:20       ` Josef Ezra
  2002-06-17 12:34       ` [RFA] new command: 'maintenance info lines' Josef Ezra
  1 sibling, 0 replies; 24+ messages in thread
From: Josef Ezra @ 2002-06-13 11:20 UTC (permalink / raw)
  To: Michael Snyder; +Cc: Josef Ezra, gdb-patches

Michael Snyder wrote:
> Josef Ezra wrote:
> 
>>Hi all
>>
>>While writing a perl gui for gdb, I had to add a new command. It looks
>>like this:
>>
>>(gdb) info orientation main
>>0x00034960:753
>>0x00034b44:757
>>0x00034b48:761
>>0x00034b50:759
>>0x00034b54:761
>>0x00034b68:763
>>0x00034b70:772
>>(gdb)
>>
>>and associate addresses with line numbers. This information allow
>>merging the disassemble with the sources without executing 'info line'
>>command for each address, since the last took too long (the difference
>>between O(n^2) to O(n)).
>>(The command was also useful for analyzing patches and code changes.)
> 
> 
> 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"?
> 

How about 'maintenance info-lines'?



^ permalink raw reply	[flat|nested] 24+ messages in thread

* [RFA] new command: 'maintenance info lines'
  2002-06-13 11:06     ` Michael Snyder
  2002-06-13 11:20       ` Josef Ezra
@ 2002-06-17 12:34       ` Josef Ezra
  2002-06-17 22:26         ` Eli Zaretskii
  2002-06-18 14:35         ` Michael Snyder
  1 sibling, 2 replies; 24+ messages in thread
From: Josef Ezra @ 2002-06-17 12:34 UTC (permalink / raw)
  To: Michael Snyder; +Cc: Josef Ezra, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 572 bytes --]

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.

  	- jezra

* printcmd.c (maintenance_info_lines): created
              (_initialize_printcmd): add command


[-- Attachment #2: m-i-lines.patch --]
[-- Type: text/plain, Size: 3185 bytes --]

Index: printcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/printcmd.c,v
retrieving revision 1.39
diff -u -5 -r1.39 printcmd.c
--- printcmd.c	11 May 2002 23:48:23 -0000	1.39
+++ printcmd.c	17 Jun 2002 18:36:58 -0000
@@ -2383,10 +2383,79 @@
 
   return TARGET_PRINT_INSN (memaddr, TARGET_PRINT_INSN_INFO);
 }
 \f
 
+/*
+  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)
 {
   struct cmd_list_element *c;
 
@@ -2561,7 +2630,13 @@
 
   examine_b_type = init_type (TYPE_CODE_INT, 1, 0, "examine_b_type", NULL);
   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) ; 
 
 }

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-17 12:34       ` [RFA] new command: 'maintenance info lines' Josef Ezra
@ 2002-06-17 22:26         ` Eli Zaretskii
  2002-06-18 13:47           ` josef ezra
  2002-06-18 14:35         ` Michael Snyder
  1 sibling, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2002-06-17 22:26 UTC (permalink / raw)
  To: Josef Ezra; +Cc: Michael Snyder, gdb-patches


On Mon, 17 Jun 2002, Josef Ezra wrote:

> Following the line of 'maintenance info breakpoints / sections / 
> sol-threads' commands, I'd like to suggest 'maintenance info lines' for 
> this line-address dump.
> 
>   	- jezra
> 
> * printcmd.c (maintenance_info_lines): created
>               (_initialize_printcmd): add command

Please also consider adding a suitable description to gdb.texinfo.
TIA


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-17 22:26         ` Eli Zaretskii
@ 2002-06-18 13:47           ` josef ezra
  2002-06-18 14:42             ` Michael Snyder
  2002-06-18 22:42             ` Eli Zaretskii
  0 siblings, 2 replies; 24+ messages in thread
From: josef ezra @ 2002-06-18 13:47 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Michael Snyder, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 529 bytes --]

Eli Zaretskii wrote:
>
> On Mon, 17 Jun 2002, Josef Ezra wrote:
>
> > Following the line of 'maintenance info breakpoints / sections /
> > sol-threads' commands, I'd like to suggest 'maintenance info lines' for
> > this line-address dump.
> >
> >   - jezra
> >
> > * printcmd.c (maintenance_info_lines): created
> >               (_initialize_printcmd): add command
>
> Please also consider adding a suitable description to gdb.texinfo.
> TIA
>

I'm adding this gdb.textinfo entry (should I re-commit the whole thing?)

- jezra


[-- Attachment #2: diff --]
[-- Type: application/octet-stream, Size: 766 bytes --]

Index: gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.102
diff -u -3 -r1.102 gdb.texinfo
--- gdb.texinfo	11 Jun 2002 20:36:57 -0000	1.102
+++ gdb.texinfo	18 Jun 2002 20:40:29 -0000
@@ -4360,6 +4360,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 'address:line' pairs.  Every pair means: "from this address 
+to the next pair, the code was generated by that line".  
+
 @end table
 
 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-17 12:34       ` [RFA] new command: 'maintenance info lines' Josef Ezra
  2002-06-17 22:26         ` Eli Zaretskii
@ 2002-06-18 14:35         ` Michael Snyder
  2002-09-06  5:08           ` Josef Ezra
  2002-09-06 13:44           ` Josef Ezra
  1 sibling, 2 replies; 24+ messages in thread
From: Michael Snyder @ 2002-06-18 14:35 UTC (permalink / raw)
  To: Josef Ezra; +Cc: gdb-patches

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.

> 
>         - jezra
> 
> * printcmd.c (maintenance_info_lines): created
>               (_initialize_printcmd): add command
> 
>   ------------------------------------------------------------------------
> Index: printcmd.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/printcmd.c,v
> retrieving revision 1.39
> diff -u -5 -r1.39 printcmd.c
> --- printcmd.c  11 May 2002 23:48:23 -0000      1.39
> +++ printcmd.c  17 Jun 2002 18:36:58 -0000
> @@ -2383,10 +2383,79 @@
> 
>    return TARGET_PRINT_INSN (memaddr, TARGET_PRINT_INSN_INFO);
>  }
> 
> 
> +/*
> +  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)
>  {
>    struct cmd_list_element *c;
> 
> @@ -2561,7 +2630,13 @@
> 
>    examine_b_type = init_type (TYPE_CODE_INT, 1, 0, "examine_b_type", NULL);
>    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) ;
> 
>  }


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-18 13:47           ` josef ezra
@ 2002-06-18 14:42             ` Michael Snyder
  2002-06-18 22:42             ` Eli Zaretskii
  1 sibling, 0 replies; 24+ messages in thread
From: Michael Snyder @ 2002-06-18 14:42 UTC (permalink / raw)
  To: josef ezra; +Cc: Eli Zaretskii, gdb-patches

josef ezra wrote:
> 
> Eli Zaretskii wrote:
> >
> > On Mon, 17 Jun 2002, Josef Ezra wrote:
> >
> > > Following the line of 'maintenance info breakpoints / sections /
> > > sol-threads' commands, I'd like to suggest 'maintenance info lines' for
> > > this line-address dump.
> > >
> > >   - jezra
> > >
> > > * printcmd.c (maintenance_info_lines): created
> > >               (_initialize_printcmd): add command
> >
> > Please also consider adding a suitable description to gdb.texinfo.
> > TIA
> >
> 
> I'm adding this gdb.textinfo entry (should I re-commit the whole thing?)

No, if you've already committed the earlier part, you don't have to
do it again.  If Eli approves the Docs change, you can commit it 
separately.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-18 13:47           ` josef ezra
  2002-06-18 14:42             ` Michael Snyder
@ 2002-06-18 22:42             ` Eli Zaretskii
  2002-06-19  7:27               ` Josef Ezra
  1 sibling, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2002-06-18 22:42 UTC (permalink / raw)
  To: josef ezra; +Cc: Michael Snyder, gdb-patches


On Tue, 18 Jun 2002, josef ezra wrote:

> I'm adding this gdb.textinfo entry

Thanks.  A couple of minor comments:

> +This command takes same parameters as @code{disassemble}, but only 
> +dumps an 'address:line' pairs.

`address' and `line' stand for something else, so they should have the 
@var markup:

   ... @code{@var{address}:@var{line}} pairs ...

> +  Every pair means: "from this address 
> +to the next pair, the code was generated by that line".  

Please use `` and '' rather than " in Texinfo.  The former will look much 
better when typeset by TeX in the printed manual (in the Info output, 
they are converted to " automatically).

Other than that, the documentation patch is approved.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-18 22:42             ` Eli Zaretskii
@ 2002-06-19  7:27               ` Josef Ezra
  0 siblings, 0 replies; 24+ messages in thread
From: Josef Ezra @ 2002-06-19  7:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 817 bytes --]

Eli Zaretskii wrote:
> On Tue, 18 Jun 2002, josef ezra wrote:
> 
> 
>>I'm adding this gdb.textinfo entry
> 
> 
> Thanks.  A couple of minor comments:
> 
> 
>>+This command takes same parameters as @code{disassemble}, but only 
>>+dumps an 'address:line' pairs.
> 
> 
> `address' and `line' stand for something else, so they should have the 
> @var markup:
> 
>    ... @code{@var{address}:@var{line}} pairs ...
> 
> 
>>+  Every pair means: "from this address 
>>+to the next pair, the code was generated by that line".  
> 
> 
> Please use `` and '' rather than " in Texinfo.  The former will look much 
> better when typeset by TeX in the printed manual (in the Info output, 
> they are converted to " automatically).
> 
> Other than that, the documentation patch is approved.
> 

thanks.
Updated patch attached ...


[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 767 bytes --]

Index: gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.102
diff -u -3 -r1.102 gdb.texinfo
--- gdb.texinfo	11 Jun 2002 20:36:57 -0000	1.102
+++ gdb.texinfo	19 Jun 2002 14:10:47 -0000
@@ -4360,6 +4360,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
 
 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [RFA] new command: 'maintenance info lines'
  2002-06-18 14:35         ` Michael Snyder
@ 2002-09-06  5:08           ` Josef Ezra
  2002-09-18 22:33             ` Eli Zaretskii
  2002-09-25 13:26             ` Fernando Nasser
  2002-09-06 13:44           ` Josef Ezra
  1 sibling, 2 replies; 24+ messages in thread
From: Josef Ezra @ 2002-09-06  5:08 UTC (permalink / raw)
  To: Michael Snyder; +Cc: Josef Ezra, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 792 bytes --]

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'



[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 3783 bytes --]

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 @@
 }
 \f
 
+/*
+  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) ; 
 
 }

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-06-18 14:35         ` Michael Snyder
  2002-09-06  5:08           ` Josef Ezra
@ 2002-09-06 13:44           ` Josef Ezra
  1 sibling, 0 replies; 24+ messages in thread
From: Josef Ezra @ 2002-09-06 13:44 UTC (permalink / raw)
  Cc: Josef Ezra, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 793 bytes --]

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'



[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 3783 bytes --]

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 @@
 }
 \f
 
+/*
+  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) ; 
 
 }

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-06  5:08           ` Josef Ezra
@ 2002-09-18 22:33             ` Eli Zaretskii
  2002-09-23  8:06               ` Josef Ezra
  2002-09-25 13:26             ` Fernando Nasser
  1 sibling, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2002-09-18 22:33 UTC (permalink / raw)
  To: Josef Ezra; +Cc: Michael Snyder, Josef Ezra, gdb-patches


On Fri, 6 Sep 2002, Josef Ezra wrote:

> * doc/gdb.textinfo: add documentation for 'maint info lines'

Thanks.  Please add a cross-reference to the place where `disassemble' is 
described, so that the reader could find out what arguments does this 
command accept.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-18 22:33             ` Eli Zaretskii
@ 2002-09-23  8:06               ` Josef Ezra
  2002-09-23 22:12                 ` Eli Zaretskii
  0 siblings, 1 reply; 24+ messages in thread
From: Josef Ezra @ 2002-09-23  8:06 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Josef Ezra, Michael Snyder, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 483 bytes --]

Eli Zaretskii wrote:

>On Fri, 6 Sep 2002, Josef Ezra wrote:
>  
>
>>* doc/gdb.textinfo: add documentation for 'maint info lines'
>>    
>>
>
>Thanks.  Please add a cross-reference to the place where `disassemble' is 
>described, so that the reader could find out what arguments does this 
>command accept.
>
>  
>
Done.

* printcmd.c (maintenance_info_lines): created
              (_initialize_printcmd): add command

* doc/gdb.textinfo: add documentation for 'maint info lines'



[-- Attachment #2: diff --]
[-- Type: application/x-java-applet, Size: 3808 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-23  8:06               ` Josef Ezra
@ 2002-09-23 22:12                 ` Eli Zaretskii
  0 siblings, 0 replies; 24+ messages in thread
From: Eli Zaretskii @ 2002-09-23 22:12 UTC (permalink / raw)
  To: Josef Ezra; +Cc: Josef Ezra, Michael Snyder, gdb-patches


On Mon, 23 Sep 2002, Josef Ezra wrote:

> >Thanks.  Please add a cross-reference to the place where `disassemble' is 
> >described, so that the reader could find out what arguments does this 
> >command accept.
> >
> Done.
> 
> * printcmd.c (maintenance_info_lines): created
>               (_initialize_printcmd): add command
> 
> * doc/gdb.textinfo: add documentation for 'maint info lines'

The documentation patch is approved.  Thanks!


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-06  5:08           ` Josef Ezra
  2002-09-18 22:33             ` Eli Zaretskii
@ 2002-09-25 13:26             ` Fernando Nasser
  2002-09-26  6:49               ` Josef Ezra
  1 sibling, 1 reply; 24+ messages in thread
From: Fernando Nasser @ 2002-09-25 13:26 UTC (permalink / raw)
  To: Josef Ezra; +Cc: Michael Snyder, Josef Ezra, gdb-patches

Josef,

The maintenance commands are to be used to debug (or test) GDB only.
We could say you'd be dumping the line table but that is hardly what is being 
done and we don't have a real need for that anyway.

As Andrew told you on June 13, 2002:

http://sources.redhat.com/ml/gdb-patches/2002-06/msg00222.html

We already have a mechanism for obtaining that information in GDB.
The MI interface is what you should be using to obtain data.
And you don't even need to create the mixed source+assembler output as that is 
already done for you.

If you really want to use a CLI command, you need to add a set/show variable to 
request that the source lines are included in the 'disassemble' command output.
The newer disassembler code that handles mixed output is still in the MI 
subdirectory (and in an older form in the gdbtk subdir) but it is intended to 
replace the one in printcmd.c.  It shouldn't be too difficult and you can always 
ask if you have any doubts.

Regards,
Fernando


Josef Ezra wrote:> 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'
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 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 @@
>  }
>  \f
>  
> +/*
> +  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) ; 
>  
>  }



-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-25 13:26             ` Fernando Nasser
@ 2002-09-26  6:49               ` Josef Ezra
  2002-09-26 10:45                 ` Fernando Nasser
  0 siblings, 1 reply; 24+ messages in thread
From: Josef Ezra @ 2002-09-26  6:49 UTC (permalink / raw)
  To: Fernando Nasser; +Cc: Michael Snyder, gdb-patches

Fernando Nasser wrote:

> The maintenance commands are to be used to debug (or test) GDB only.
> We could say you'd be dumping the line table but that is hardly what 
> is being done and we don't have a real need for that anyway.
>
well, WE have a real need for this command (is there a wrong way to use 
gdb?). but we sure don't need it to maintain gdb.

> If you really want to use a CLI command, you need to add a set/show 
> variable to request that the source lines are included in the 
> 'disassemble' command output. 

do you mean something like:

(gdb) set  disassem dump-source-or-something 1
(gdb) disassemble main
Dump of assembler code for function main:
    Line ../gdb/main.c:757
0x50ce4 <main>: save  %sp, -120, %sp
0x50ce8 <main+4>:       std  %i0, [ %fp + -24 ]
0x50cec <main+8>:       sethi  %hi(0x50000), %o0
0x50cf0 <main+12>:      or  %o0, 0x16c, %o0     ! 0x5016c <captured_main>
0x50cf4 <main+16>:      sethi  %hi(0x2a7c00), %o2
    Line ../gdb/main.c:759
0x50cf8 <main+20>:      add  %fp, -24, %o1
0x50cfc <main+24>:      or  %o2, 0x3c0, %o2
0x50d00 <main+28>:      call  0xb2374 <catch_errors>
0x50d04 <main+32>:      mov  6, %o3
    Line ../gdb/main.c:775
0x50d08 <main+36>:      ret
0x50d0c <main+40>:      restore  %g0, 0, %o0
End of assembler dump.

that would be a great solution for our needs. how about setting the 
dump-source to 1 to show line location, and 2 to try presenting the 
actual source lines (like mixed list and disassemble)

> The newer disassembler code that handles mixed output is still in the 
> MI subdirectory (and in an older form in the gdbtk subdir) but it is 
> intended to replace the one in printcmd.c.  It shouldn't be too 
> difficult and you can always ask if you have any doubts. 

?? please explain

thanks - jezra




^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-26  6:49               ` Josef Ezra
@ 2002-09-26 10:45                 ` Fernando Nasser
  2002-09-26 19:03                   ` Andrew Cagney
  0 siblings, 1 reply; 24+ messages in thread
From: Fernando Nasser @ 2002-09-26 10:45 UTC (permalink / raw)
  To: Josef Ezra; +Cc: Michael Snyder, gdb-patches

Josef Ezra wrote:
> Fernando Nasser wrote:
> 
>> The maintenance commands are to be used to debug (or test) GDB only.
>> We could say you'd be dumping the line table but that is hardly what 
>> is being done and we don't have a real need for that anyway.
>>
> well, WE have a real need for this command 

That is the problem.  We can't go and add things to GDB to the use of each 
individual need.  That is why the MI was added so that any tool developer can 
use that to talk to GDB.

> (is there a wrong way to use 
> gdb?). 
> 

Definitively parsing CLI output is one.

>> If you really want to use a CLI command, you need to add a set/show 
>> variable to request that the source lines are included in the 
>> 'disassemble' command output. 
> 
> 
> do you mean something like:
> 
> (gdb) set  disassem dump-source-or-something 1
> (gdb) disassemble main
> Dump of assembler code for function main:
>    Line ../gdb/main.c:757
> 0x50ce4 <main>: save  %sp, -120, %sp
> 0x50ce8 <main+4>:       std  %i0, [ %fp + -24 ]
> 0x50cec <main+8>:       sethi  %hi(0x50000), %o0
> 0x50cf0 <main+12>:      or  %o0, 0x16c, %o0     ! 0x5016c <captured_main>
> 0x50cf4 <main+16>:      sethi  %hi(0x2a7c00), %o2
>    Line ../gdb/main.c:759
> 0x50cf8 <main+20>:      add  %fp, -24, %o1
> 0x50cfc <main+24>:      or  %o2, 0x3c0, %o2
> 0x50d00 <main+28>:      call  0xb2374 <catch_errors>
> 0x50d04 <main+32>:      mov  6, %o3
>    Line ../gdb/main.c:775
> 0x50d08 <main+36>:      ret
> 0x50d0c <main+40>:      restore  %g0, 0, %o0
> End of assembler dump.
> 

Exactly, but the source line itself (if available) will be displayed as well.

> that would be a great solution for our needs. how about setting the 
> dump-source to 1 to show line location, and 2 to try presenting the 
> actual source lines (like mixed list and disassemble)
> 

Actually, I was thinking of

set/show mixed-disassembly on/off

There is no point in not showing the source lines themselves on the CLI output. 
  Tools using GDB as the backend may want to manipulate the source files 
themselves, and that is why the MI output only have the line number (not the 
content of the source file line).


>> The newer disassembler code that handles mixed output is still in the 
>> MI subdirectory (and in an older form in the gdbtk subdir) but it is 
>> intended to replace the one in printcmd.c.  It shouldn't be too 
>> difficult and you can always ask if you have any doubts. 
> 
> 
> ?? please explain
> 

Sure.  The newest code for disassembly is in the file mi/mi-cmd-disas.c.
This is supposed to replace the old one in printcmd.c which was not capable of 
mixed-mode disassembly.  Once this code is in the libgdb proper, all interfaces 
(CLI, MI and gdbtk) will use this same code.

Maybe it helps if you know the story:
.the code in printcmd.c came first
.it was improved in gdbtk land to allow mixed-mode disassembly
.it was copied with small changes to MI land
.the code in MI was improved to be more modular (and facilitate splitting the UI 
and core parts).
.MISSING: Replace the old code and use the new one (from mi-cmd-disas.c) and use 
it everywhere, getting rid of all the other versions.


We are slowly doing this.  It was not a priority as it is already working on the 
MI and having mixed-mode disassembly in the CLI is just an enhancement no one 
has ever asked for (although I think it would be nice).  We are doing it more 
like a clean-up.

I will take a look and see if I can find time and do it.  Or do you want to give 
it a try yourself?

Regards,
Fernando


-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [RFA] new command: 'maintenance info lines'
  2002-09-26 10:45                 ` Fernando Nasser
@ 2002-09-26 19:03                   ` Andrew Cagney
  0 siblings, 0 replies; 24+ messages in thread
From: Andrew Cagney @ 2002-09-26 19:03 UTC (permalink / raw)
  To: Fernando Nasser, Josef Ezra; +Cc: gdb-patches

Just FYI,

I believe that GDB is getting a new interpreter command vis:

(gdb) interpreter mi -data-disassemble ....
<mi output>
(gdb)

(assuming I've got the syntax right) this will make it possible for an 
existing CLI based front end to incrementally convert to the better 
supported MI front end.

Andrew



^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2002-09-27  2:03 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-18  8:11 should gdb require '.text' and '.data' sections? josef ezra
2002-04-18 11:15 ` Michael Snyder
2002-04-22  6:32   ` Josef Ezra
2002-04-24  6:45   ` [RFA] " Josef Ezra
2002-06-13 10:06   ` Request for new gdb command: 'info orientation' Josef Ezra
2002-06-13 10:35     ` Andrew Cagney
2002-06-13 11:06     ` Michael Snyder
2002-06-13 11:20       ` Josef Ezra
2002-06-17 12:34       ` [RFA] new command: 'maintenance info lines' Josef Ezra
2002-06-17 22:26         ` Eli Zaretskii
2002-06-18 13:47           ` josef ezra
2002-06-18 14:42             ` Michael Snyder
2002-06-18 22:42             ` Eli Zaretskii
2002-06-19  7:27               ` Josef Ezra
2002-06-18 14:35         ` Michael Snyder
2002-09-06  5:08           ` Josef Ezra
2002-09-18 22:33             ` Eli Zaretskii
2002-09-23  8:06               ` Josef Ezra
2002-09-23 22:12                 ` Eli Zaretskii
2002-09-25 13:26             ` Fernando Nasser
2002-09-26  6:49               ` Josef Ezra
2002-09-26 10:45                 ` Fernando Nasser
2002-09-26 19:03                   ` Andrew Cagney
2002-09-06 13:44           ` Josef Ezra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox