Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-04-02 20:24 Bob Rossi
  0 siblings, 0 replies; 36+ messages in thread
From: Bob Rossi @ 2003-04-02 20:24 UTC (permalink / raw)
  To: gdb-patches

Seems like this didn't go through the first time. Sorry if posted twice.

This change essentially adds the command -file-list-exec-source-file to
the mi commands.

* mi-cmd-file.c:    Added file to implement mi file commands.
* mi-getopt.c:      Added mi_valid_noargs to verify if a set of
                    parameters passed to an MI function has no arguments
* mi-getopt.h:      Prototyped mi_valid_noargs
* mi-cmds.c:        Added -file-list-exec-source-file command.
* mi-cmds.h:        Added -file-list-exec-source-file to proto list.
* doc/gdb.texinfo:  Document -file-list-exec-source-file.
* mi-file.exp:      Added testcase to test -file-list-exec-source-file.

Thanks,
Bob Rossi

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.357
diff -w -u -r1.357 Makefile.in
--- Makefile.in	2 Apr 2003 03:02:46 -0000	1.357
+++ Makefile.in	2 Apr 2003 19:30:31 -0000
@@ -168,14 +168,14 @@
 SUBDIR_MI_OBS = \
 	mi-out.o mi-console.o \
 	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
-	mi-cmd-disas.o \
+	mi-cmd-file.o mi-cmd-disas.o \
 	mi-interp.o \
 	mi-main.o mi-parse.o mi-getopt.o
 SUBDIR_MI_SRCS = \
 	mi/mi-out.c mi/mi-console.c \
 	mi/mi-cmds.c mi/mi-cmd-env.c \
 	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
-	mi/mi-cmd-disas.c \
+	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
 	mi/mi-interp.c \
 	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
 SUBDIR_MI_DEPS =
@@ -2546,6 +2546,10 @@
 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
 mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
 	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.154
diff -w -u -r1.154 gdb.texinfo
--- doc/gdb.texinfo	27 Mar 2003 15:17:34 -0000	1.154
+++ doc/gdb.texinfo	2 Apr 2003 19:30:57 -0000
@@ -16337,6 +16337,32 @@
 N.A.
 
 
+@subheading The @code{-file-list-exec-source-file} Command
+@findex -file-list-exec-source-file
+
+@subsubheading Synopsis
+
+@smallexample
+ -file-list-exec-source-file
+@end smallexample
+
+List the line number, the current source file, and the absolute path 
+to the current source file for the current executable.
+
+@subsubheading @value{GDBN} Command
+
+There's no @value{GDBN} command which directly corresponds to this one.
+
+@subsubheading Example
+
+@smallexample
+(@value{GDBP})
+123-file-list-exec-source-file
+123^done,line="1",file="foo.c",fullname="/home/bar/foo.c"
+(@value{GDBP})
+@end smallexample
+
+
 @subheading The @code{-file-list-exec-source-files} Command
 @findex -file-list-exec-source-files
 
Index: mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -w -u -r1.10 mi-cmds.c
--- mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
+++ mi/mi-cmds.c	2 Apr 2003 19:30:57 -0000
@@ -80,6 +80,7 @@
   {"file-exec-and-symbols", "file %s", 0},
   {"file-exec-file", "exec-file %s", 0},
   {"file-list-exec-sections", 0, 0},
+  {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
   {"file-list-exec-source-files", 0, 0},
   {"file-list-shared-libraries", 0, 0},
   {"file-list-symbol-files", 0, 0},
Index: mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -w -u -r1.7 mi-cmds.h
--- mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
+++ mi/mi-cmds.h	2 Apr 2003 19:30:58 -0000
@@ -80,6 +80,7 @@
 extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
 extern mi_cmd_args_ftype mi_cmd_exec_until;
 extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
 extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
 extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
 extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;
Index: mi/mi-getopt.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-getopt.c,v
retrieving revision 1.6
diff -w -u -r1.6 mi-getopt.c
--- mi/mi-getopt.c	6 Mar 2001 08:21:45 -0000	1.6
+++ mi/mi-getopt.c	2 Apr 2003 19:30:58 -0000
@@ -74,3 +74,19 @@
     }
   error ("%s: Unknown option ``%s''", prefix, arg + 1);
 }
+
+int 
+mi_valid_noargs(const char *prefix, int argc, char **argv) 
+{
+  int optind = 0;
+  char *optarg;
+  static struct mi_opt opts[] =
+  {
+    0
+  };
+
+  if ( mi_getopt(prefix, argc, argv, opts, &optind, &optarg) == -1 )
+    return 1;
+  else
+    return 0;
+}
Index: mi/mi-getopt.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-getopt.h,v
retrieving revision 1.4
diff -w -u -r1.4 mi-getopt.h
--- mi/mi-getopt.h	6 Mar 2001 08:21:45 -0000	1.4
+++ mi/mi-getopt.h	2 Apr 2003 19:30:58 -0000
@@ -57,4 +57,24 @@
 
 struct mi_opt;
 
+/* mi_valid_noargs
+   
+   Determines if ARGC/ARGV are a valid set of parameters to satisfy 
+   an MI function that is not supposed to recieve any arguments.
+   
+   An MI function that should not recieve arguments can still be 
+   passed parameters after the special option '--' such as below.
+
+   Example: The MI function -exec-run takes no args.
+   However, the client may pass '-exec-run -- -a ...'
+   See PR-783
+
+   PREFIX is passed to mi_getopt for an error message.
+    
+   This function Returns 1 if the parameter pair ARGC/ARGV are valid
+   for an MI function that takes no arguments. Otherwise, it returns 0
+   and the appropriate error message is displayed by mi_getopt.  */
+
+extern int mi_valid_noargs (const char *prefix, int argc, char **argv);
+				
 #endif


#   Copyright 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "basics"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_tbreak_creation_and_listing {} {
    global srcfile
    global srcdir
    global subdir
    set srcfilepath [string_to_regexp ${srcdir}/${subdir}/${srcfile}]

    # get the path and absolute path to the current executable
    mi_gdb_test "111-file-list-exec-source-file" \
	    "111\\\^done,line=\"23\",file=\"${srcfilepath}\",fullname=\"/.*/${srcfile}\"" \
               "request path info of current source file (${srcfile})"
}

test_tbreak_creation_and_listing

mi_gdb_exit
return 0


^ permalink raw reply	[flat|nested] 36+ messages in thread
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-04-02 20:24 Bob Rossi
  2003-04-02 21:59 ` Andrew Cagney
  2003-04-03  2:54 ` Eli Zaretskii
  0 siblings, 2 replies; 36+ messages in thread
From: Bob Rossi @ 2003-04-02 20:24 UTC (permalink / raw)
  To: gdb-patches

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

This change essentially adds the command -file-list-exec-source-file to
the mi commands.

* mi-cmd-file.c:    Added file to implement mi file commands.
* mi-getopt.c:      Added mi_valid_noargs to verify if a set of
                    parameters passed to an MI function has no arguments
* mi-getopt.h:      Prototyped mi_valid_noargs
* mi-cmds.c:        Added -file-list-exec-source-file command.
* mi-cmds.h:        Added -file-list-exec-source-file to proto list.
* doc/gdb.texinfo:  Document -file-list-exec-source-file.
* mi-file.exp:      Added testcase to test -file-list-exec-source-file.

Thanks,
Bob Rossi

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.357
diff -w -u -r1.357 Makefile.in
--- Makefile.in	2 Apr 2003 03:02:46 -0000	1.357
+++ Makefile.in	2 Apr 2003 19:30:31 -0000
@@ -168,14 +168,14 @@
 SUBDIR_MI_OBS = \
 	mi-out.o mi-console.o \
 	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
-	mi-cmd-disas.o \
+	mi-cmd-file.o mi-cmd-disas.o \
 	mi-interp.o \
 	mi-main.o mi-parse.o mi-getopt.o
 SUBDIR_MI_SRCS = \
 	mi/mi-out.c mi/mi-console.c \
 	mi/mi-cmds.c mi/mi-cmd-env.c \
 	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
-	mi/mi-cmd-disas.c \
+	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
 	mi/mi-interp.c \
 	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
 SUBDIR_MI_DEPS =
@@ -2546,6 +2546,10 @@
 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
 mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
 	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.154
diff -w -u -r1.154 gdb.texinfo
--- doc/gdb.texinfo	27 Mar 2003 15:17:34 -0000	1.154
+++ doc/gdb.texinfo	2 Apr 2003 19:30:57 -0000
@@ -16337,6 +16337,32 @@
 N.A.
 
 
+@subheading The @code{-file-list-exec-source-file} Command
+@findex -file-list-exec-source-file
+
+@subsubheading Synopsis
+
+@smallexample
+ -file-list-exec-source-file
+@end smallexample
+
+List the line number, the current source file, and the absolute path 
+to the current source file for the current executable.
+
+@subsubheading @value{GDBN} Command
+
+There's no @value{GDBN} command which directly corresponds to this one.
+
+@subsubheading Example
+
+@smallexample
+(@value{GDBP})
+123-file-list-exec-source-file
+123^done,line="1",file="foo.c",fullname="/home/bar/foo.c"
+(@value{GDBP})
+@end smallexample
+
+
 @subheading The @code{-file-list-exec-source-files} Command
 @findex -file-list-exec-source-files
 
Index: mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -w -u -r1.10 mi-cmds.c
--- mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
+++ mi/mi-cmds.c	2 Apr 2003 19:30:57 -0000
@@ -80,6 +80,7 @@
   {"file-exec-and-symbols", "file %s", 0},
   {"file-exec-file", "exec-file %s", 0},
   {"file-list-exec-sections", 0, 0},
+  {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
   {"file-list-exec-source-files", 0, 0},
   {"file-list-shared-libraries", 0, 0},
   {"file-list-symbol-files", 0, 0},
Index: mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -w -u -r1.7 mi-cmds.h
--- mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
+++ mi/mi-cmds.h	2 Apr 2003 19:30:58 -0000
@@ -80,6 +80,7 @@
 extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
 extern mi_cmd_args_ftype mi_cmd_exec_until;
 extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
 extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
 extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
 extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;
Index: mi/mi-getopt.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-getopt.c,v
retrieving revision 1.6
diff -w -u -r1.6 mi-getopt.c
--- mi/mi-getopt.c	6 Mar 2001 08:21:45 -0000	1.6
+++ mi/mi-getopt.c	2 Apr 2003 19:30:58 -0000
@@ -74,3 +74,19 @@
     }
   error ("%s: Unknown option ``%s''", prefix, arg + 1);
 }
+
+int 
+mi_valid_noargs(const char *prefix, int argc, char **argv) 
+{
+  int optind = 0;
+  char *optarg;
+  static struct mi_opt opts[] =
+  {
+    0
+  };
+
+  if ( mi_getopt(prefix, argc, argv, opts, &optind, &optarg) == -1 )
+    return 1;
+  else
+    return 0;
+}
Index: mi/mi-getopt.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-getopt.h,v
retrieving revision 1.4
diff -w -u -r1.4 mi-getopt.h
--- mi/mi-getopt.h	6 Mar 2001 08:21:45 -0000	1.4
+++ mi/mi-getopt.h	2 Apr 2003 19:30:58 -0000
@@ -57,4 +57,24 @@
 
 struct mi_opt;
 
+/* mi_valid_noargs
+   
+   Determines if ARGC/ARGV are a valid set of parameters to satisfy 
+   an MI function that is not supposed to recieve any arguments.
+   
+   An MI function that should not recieve arguments can still be 
+   passed parameters after the special option '--' such as below.
+
+   Example: The MI function -exec-run takes no args.
+   However, the client may pass '-exec-run -- -a ...'
+   See PR-783
+
+   PREFIX is passed to mi_getopt for an error message.
+    
+   This function Returns 1 if the parameter pair ARGC/ARGV are valid
+   for an MI function that takes no arguments. Otherwise, it returns 0
+   and the appropriate error message is displayed by mi_getopt.  */
+
+extern int mi_valid_noargs (const char *prefix, int argc, char **argv);
+				
 #endif

[-- Attachment #2: mi-cmd-file.c --]
[-- Type: text/x-csrc, Size: 2379 bytes --]

/* MI Command Set - breakpoint and watchpoint commands.
   Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
   Contributed by Cygnus Solutions (a Red Hat company).

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#include "defs.h"
#include "mi-cmds.h"
#include "mi-getopt.h"
#include "ui-out.h"
#include "symtab.h"
#include "source.h"

/* Return to the client the absolute path and line number of the 
   current file being executed. */

enum mi_cmd_result
mi_cmd_file_list_exec_source_file(char *command, char **argv, int argc)
{
  struct symtab_and_line st;
  int optind = 0;
  char *optarg;
  
  if ( !mi_valid_noargs("mi_cmd_file_list_exec_source_file", argc, argv) )
    error ("mi_cmd_file_list_exec_source_file: Usage: No args");

  
  /* Set the default file and line, also get them */
  set_default_source_symtab_and_line();
  st = get_current_source_symtab_and_line();

  /* We should always get a symtab. 
     Apparently, filename does not need to be tested for NULL.
     The documentation in symtab.h suggests it will always be correct */
  if (!st.symtab)
    error ("mi_cmd_file_list_exec_source_file: No symtab");

  /* Extract the fullname if it is not known yet */
  if (st.symtab->fullname == NULL)
    symtab_to_filename (st.symtab);

  /* We may not be able to open the file (not available). */
  if (st.symtab->fullname == NULL)
    error ("mi_cmd_file_list_exec_source_file: File not found");

  /* Print to the user the line, filename and fullname */
  ui_out_field_int (uiout, "line", st.line);
  ui_out_field_string (uiout, "file", st.symtab->filename);
  ui_out_field_string (uiout, "fullname", st.symtab->fullname);

  return MI_CMD_DONE;
}

[-- Attachment #3: mi-file.exp --]
[-- Type: text/plain, Size: 2258 bytes --]

#   Copyright 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "basics"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_tbreak_creation_and_listing {} {
    global srcfile
    global srcdir
    global subdir
    set srcfilepath [string_to_regexp ${srcdir}/${subdir}/${srcfile}]

    # get the path and absolute path to the current executable
    mi_gdb_test "111-file-list-exec-source-file" \
	    "111\\\^done,line=\"23\",file=\"${srcfilepath}\",fullname=\"/.*/${srcfile}\"" \
               "request path info of current source file (${srcfile})"
}

test_tbreak_creation_and_listing

mi_gdb_exit
return 0

^ permalink raw reply	[flat|nested] 36+ messages in thread
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-03-29  0:41 Bob Rossi
  2003-03-31  5:38 ` Andrew Cagney
  0 siblings, 1 reply; 36+ messages in thread
From: Bob Rossi @ 2003-03-29  0:41 UTC (permalink / raw)
  To: gdb-patches

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

This change essentially adds the command -file-list-exec-source-file to
the mi commands.

* mi-cmd-file.c:    Added file to implement mi file commands.
* mi-cmds.c:        Added -file-list-exec-source-file command.
* mi-cmds.h:        Added -file-list-exec-source-file to proto list.
* doc/gdb.texinfo:  Document -file-list-exec-source-file.
* mi-file.exp:      Added testcase to test -file-list-exec-source-file.

Thanks,
Bob Rossi

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.351
diff -c -r1.351 Makefile.in
*** Makefile.in	26 Mar 2003 03:39:42 -0000	1.351
--- Makefile.in	29 Mar 2003 00:24:56 -0000
***************
*** 168,181 ****
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
--- 168,181 ----
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-file.o mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
***************
*** 2538,2543 ****
--- 2538,2547 ----
  	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
  	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+ mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+ 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+ 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+ 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
  mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
  	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.154
diff -c -r1.154 gdb.texinfo
*** doc/gdb.texinfo	27 Mar 2003 15:17:34 -0000	1.154
--- doc/gdb.texinfo	29 Mar 2003 00:25:22 -0000
***************
*** 16337,16342 ****
--- 16337,16353 ----
  N.A.
  
  
+ @subheading The @code{-file-list-exec-source-file} Command
+ @findex -file-list-exec-source-file
+ 
+ @subsubheading Synopsis
+ 
+ @smallexample
+  -file-list-exec-source-file
+ @end smallexample
+ 
+ List the current source file and line for the current executable.
+ 
  @subheading The @code{-file-list-exec-source-files} Command
  @findex -file-list-exec-source-files
  
Index: mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -c -r1.10 mi-cmds.c
*** mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
--- mi/mi-cmds.c	29 Mar 2003 00:25:23 -0000
***************
*** 80,85 ****
--- 80,86 ----
    {"file-exec-and-symbols", "file %s", 0},
    {"file-exec-file", "exec-file %s", 0},
    {"file-list-exec-sections", 0, 0},
+   {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
    {"file-list-exec-source-files", 0, 0},
    {"file-list-shared-libraries", 0, 0},
    {"file-list-symbol-files", 0, 0},
Index: mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -c -r1.7 mi-cmds.h
*** mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
--- mi/mi-cmds.h	29 Mar 2003 00:25:23 -0000
***************
*** 80,85 ****
--- 80,86 ----
  extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
  extern mi_cmd_args_ftype mi_cmd_exec_until;
  extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
  extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
  extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
  extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;

[-- Attachment #2: mi-cmd-file.c --]
[-- Type: text/x-csrc, Size: 2060 bytes --]

/* MI Command Set - breakpoint and watchpoint commands.
   Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
   Contributed by Cygnus Solutions (a Red Hat company).

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#include "defs.h"
#include "mi-cmds.h"
#include "ui-out.h"
#include "symtab.h"
#include "source.h"

/* Return to the client the absolute path and line number of the 
   current file being executed. */

enum mi_cmd_result
mi_cmd_file_list_exec_source_file(char *command, char **argv, int argc)
{
  struct symtab_and_line st;
  if (argc != 0)
    error ("mi_cmd_file_list_exec_source_file: Usage: No args");

  /* Set the default file and line, also get them */
  set_default_source_symtab_and_line();
  st = get_current_source_symtab_and_line();

  /* We should always get a symtab. */
  if (!st.symtab)
    error ("mi_cmd_file_list_exec_source_file: No symtab");

  /* Extract the fullname if it is not known yet */
  if (st.symtab->fullname == NULL)
    symtab_to_filename (st.symtab);

  /* We may not be able to open the file (not available). */
  if (st.symtab->fullname == NULL)
    error ("mi_cmd_file_list_exec_source_file: File not found");

  /* Print to the user the line and absolute file name */
  ui_out_field_int (uiout, "line", st.line);
  ui_out_field_string (uiout, "file", st.symtab->fullname);

  return MI_CMD_DONE;
}

[-- Attachment #3: mi-file.exp --]
[-- Type: text/plain, Size: 2145 bytes --]

#   Copyright 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "basics"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_tbreak_creation_and_listing {} {
    global binfile
    set abs_srcfile ${binfile}.c

    # get the absolute path to the current file
    mi_gdb_test "111-file-list-exec-source-file" \
                "111\\\^done,line=\"23\",file=\"${abs_srcfile}\"" \
                "request absolute path of current source file"
}

test_tbreak_creation_and_listing

mi_gdb_exit
return 0

^ permalink raw reply	[flat|nested] 36+ messages in thread
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-03-20 22:44 Bob Rossi
  2003-03-21  4:34 ` Eli Zaretskii
                   ` (3 more replies)
  0 siblings, 4 replies; 36+ messages in thread
From: Bob Rossi @ 2003-03-20 22:44 UTC (permalink / raw)
  To: gdb-patches

----- Forwarded message from Bob Rossi <bob_rossi@cox.net> -----

Date: Thu, 20 Mar 2003 17:29:35 -0500
From: Bob Rossi <bob_rossi@cox.net>
To: gdb@sources.redhat.com
Subject: Adding -file-list-exec-source-file command to GDB/MI

----- Forwarded message from Bob Rossi <bob_rossi@cox.net> -----

Date: Sun, 9 Mar 2003 19:31:17 -0500
From: Bob Rossi <bob_rossi@cox.net>
To: gdb-patches@sources.redhat.com
Subject: Adding -file-list-exec-source-file command to GDB/MI

Hi,

This change essentially adds the command -file-list-exec-source-file to
the mi commands. 

 * mi-cmd-file.c:    Added file to implement mi file commands.
 * mi-cmds.c:        Added -file-list-exec-source-file command.
 * mi-cmds.h:        Added -file-list-exec-source-file to proto list.
 * gdbmi.texinfo:    Document -file-list-exec-source-file.
 * mi-file.exp:      Added testcase to test -file-list-exec-source-file. 

Also, do you think it would be good if the function 
-file-list-exec-source-file optionally took an argument ( a filename ).
If it reiceived an argument, it would return the absolute path to that
file.

I think the normal way a front end gets the absolute path to a file now
is,
1. list filename.c
2. info source
3. parse the output looking for 'Located in '

This optional argument would solve that problem.

Thanks,
Bob Rossi

Index: gdb/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.328
diff -c -r1.328 Makefile.in
*** gdb/Makefile.in	7 Feb 2003 05:33:44 -0000	1.328
--- gdb/Makefile.in	10 Feb 2003 20:51:47 -0000
***************
*** 168,181 ****
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
--- 168,181 ----
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-file.o mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
***************
*** 2494,2499 ****
--- 2494,2503 ----
  	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
  	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+ mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+ 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+ 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+ 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
  mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
  	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: gdb/mi/gdbmi.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/mi/gdbmi.texinfo,v
retrieving revision 1.33
diff -c -r1.33 gdbmi.texinfo
*** gdb/mi/gdbmi.texinfo	4 Feb 2003 18:41:29 -0000	1.33
--- gdb/mi/gdbmi.texinfo	10 Feb 2003 20:51:55 -0000
***************
*** 2340,2345 ****
--- 2340,2355 ----
  @subsubheading Example
  N.A.
  
+ @subheading The @code{-file-list-exec-source-file} Command
+ @findex -file-list-exec-source-file
+ 
+ @subsubheading Synopsis
+ 
+ @example
+  -file-list-exec-source-file
+ @end example
+ 
+ List the current source file and line for the current executable.
  
  @subheading The @code{-file-list-exec-source-files} Command
  @findex -file-list-exec-source-files
Index: gdb/mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -c -r1.10 mi-cmds.c
*** gdb/mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
--- gdb/mi/mi-cmds.c	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
    {"file-exec-and-symbols", "file %s", 0},
    {"file-exec-file", "exec-file %s", 0},
    {"file-list-exec-sections", 0, 0},
+   {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
    {"file-list-exec-source-files", 0, 0},
    {"file-list-shared-libraries", 0, 0},
    {"file-list-symbol-files", 0, 0},
Index: gdb/mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -c -r1.7 mi-cmds.h
*** gdb/mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
--- gdb/mi/mi-cmds.h	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
  extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
  extern mi_cmd_args_ftype mi_cmd_exec_until;
  extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
  extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
  extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
  extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;

#   Copyright 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "basics"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_tbreak_creation_and_listing {} {
    global binfile
    set abs_srcfile ${binfile}.c

    # get the absolute path to the current file
    mi_gdb_test "111-file-list-exec-source-file" \
                "111\\\^done,line=\"23\",file=\"${abs_srcfile}\"" \
                "request absolute path of current source file"
}

test_tbreak_creation_and_listing

mi_gdb_exit
return 0



----- End forwarded message -----

----- End forwarded message -----


^ permalink raw reply	[flat|nested] 36+ messages in thread
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-03-10  0:31 Bob Rossi
  2003-03-10  4:28 ` Eli Zaretskii
  0 siblings, 1 reply; 36+ messages in thread
From: Bob Rossi @ 2003-03-10  0:31 UTC (permalink / raw)
  To: gdb-patches

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

Hi,

This change essentially adds the command -file-list-exec-source-file to
the mi commands. 

 * mi-cmd-file.c:    Added file to implement mi file commands.
 * mi-cmds.c:        Added -file-list-exec-source-file command.
 * mi-cmds.h:        Added -file-list-exec-source-file to proto list.
 * gdbmi.texinfo:    Document -file-list-exec-source-file.
 * mi-file.exp:      Added testcase to test -file-list-exec-source-file. 

Also, do you think it would be good if the function 
-file-list-exec-source-file optionally took an argument ( a filename ).
If it reiceived an argument, it would return the absolute path to that
file.

I think the normal way a front end gets the absolute path to a file now
is,
1. list filename.c
2. info source
3. parse the output looking for 'Located in '

This optional argument would solve that problem.

Thanks,
Bob Rossi

Index: gdb/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.328
diff -c -r1.328 Makefile.in
*** gdb/Makefile.in	7 Feb 2003 05:33:44 -0000	1.328
--- gdb/Makefile.in	10 Feb 2003 20:51:47 -0000
***************
*** 168,181 ****
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
--- 168,181 ----
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-file.o mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
***************
*** 2494,2499 ****
--- 2494,2503 ----
  	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
  	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+ mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+ 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+ 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+ 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
  mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
  	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: gdb/mi/gdbmi.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/mi/gdbmi.texinfo,v
retrieving revision 1.33
diff -c -r1.33 gdbmi.texinfo
*** gdb/mi/gdbmi.texinfo	4 Feb 2003 18:41:29 -0000	1.33
--- gdb/mi/gdbmi.texinfo	10 Feb 2003 20:51:55 -0000
***************
*** 2340,2345 ****
--- 2340,2355 ----
  @subsubheading Example
  N.A.
  
+ @subheading The @code{-file-list-exec-source-file} Command
+ @findex -file-list-exec-source-file
+ 
+ @subsubheading Synopsis
+ 
+ @example
+  -file-list-exec-source-file
+ @end example
+ 
+ List the current source file and line for the current executable.
  
  @subheading The @code{-file-list-exec-source-files} Command
  @findex -file-list-exec-source-files
Index: gdb/mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -c -r1.10 mi-cmds.c
*** gdb/mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
--- gdb/mi/mi-cmds.c	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
    {"file-exec-and-symbols", "file %s", 0},
    {"file-exec-file", "exec-file %s", 0},
    {"file-list-exec-sections", 0, 0},
+   {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
    {"file-list-exec-source-files", 0, 0},
    {"file-list-shared-libraries", 0, 0},
    {"file-list-symbol-files", 0, 0},
Index: gdb/mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -c -r1.7 mi-cmds.h
*** gdb/mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
--- gdb/mi/mi-cmds.h	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
  extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
  extern mi_cmd_args_ftype mi_cmd_exec_until;
  extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
  extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
  extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
  extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;

[-- Attachment #2: mi-file.exp --]
[-- Type: text/plain, Size: 2145 bytes --]

#   Copyright 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

#
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "basics"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_tbreak_creation_and_listing {} {
    global binfile
    set abs_srcfile ${binfile}.c

    # get the absolute path to the current file
    mi_gdb_test "111-file-list-exec-source-file" \
                "111\\\^done,line=\"23\",file=\"${abs_srcfile}\"" \
                "request absolute path of current source file"
}

test_tbreak_creation_and_listing

mi_gdb_exit
return 0

[-- Attachment #3: mi-cmd-file.c --]
[-- Type: text/x-csrc, Size: 2060 bytes --]

/* MI Command Set - breakpoint and watchpoint commands.
   Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
   Contributed by Cygnus Solutions (a Red Hat company).

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#include "defs.h"
#include "mi-cmds.h"
#include "ui-out.h"
#include "symtab.h"
#include "source.h"

/* Return to the client the absolute path and line number of the 
   current file being executed. */

enum mi_cmd_result
mi_cmd_file_list_exec_source_file(char *command, char **argv, int argc)
{
  struct symtab_and_line st;
  if (argc != 0)
    error ("mi_cmd_file_list_exec_source_file: Usage: No args");

  /* Set the default file and line, also get them */
  set_default_source_symtab_and_line();
  st = get_current_source_symtab_and_line();

  /* We should always get a symtab. */
  if (!st.symtab)
    error ("mi_cmd_file_list_exec_source_file: No symtab");

  /* Extract the fullname if it is not known yet */
  if (st.symtab->fullname == NULL)
    symtab_to_filename (st.symtab);

  /* We may not be able to open the file (not available). */
  if (st.symtab->fullname == NULL)
    error ("mi_cmd_file_list_exec_source_file: File not found");

  /* Print to the user the line and absolute file name */
  ui_out_field_int (uiout, "line", st.line);
  ui_out_field_string (uiout, "file", st.symtab->fullname);

  return MI_CMD_DONE;
}

^ permalink raw reply	[flat|nested] 36+ messages in thread
* Re: Adding -file-list-exec-source-file command to GDB/MI
@ 2003-02-10 22:28 Michael Elizabeth Chastain
  0 siblings, 0 replies; 36+ messages in thread
From: Michael Elizabeth Chastain @ 2003-02-10 22:28 UTC (permalink / raw)
  To: bob_rossi, gdb-patches

Hi Bob,

I am not an MI maintainer, but I noticed a couple of things?

(1) Your patch is missing mi-cmd-file.c -- you need to include it as
    an attachment.  Or you can run 'diff -N' and pick it up inside the diff.

(2) Normally people don't submit the ChangeLog entries as diffs because
    'patch' is always out of sync.  We just list them as text at the
    start of the file.

(3) The most painful -- do you and/or your company have a copyright
    assignment for gdb on file with the Free Software Foundation?

Michael C


^ permalink raw reply	[flat|nested] 36+ messages in thread
* Adding -file-list-exec-source-file command to GDB/MI
@ 2003-02-10 22:15 Bob Rossi
  2003-02-11  6:39 ` Eli Zaretskii
  0 siblings, 1 reply; 36+ messages in thread
From: Bob Rossi @ 2003-02-10 22:15 UTC (permalink / raw)
  To: gdb-patches

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

Hi,

This is a patch to add -file-list-exec-source-file to GDB. The command
returns to the client the absolute path and line number of the current 
executable. It is a replacement for the old way of getting the line 
and file using annotations 1 or 2. It is nice because the client doesn't 
have to call the -interpreter-exec command and parse the output of the CLI.

I ran the testsuite and there were no errors. I tested the feature from
GDB when there was not an program being debugged and when GDB had to
find the main file ( before running the exe ). 
Both of these cases worked properly.

I tested it on:
uname -a='Linux 2.4.18 #2 Mon Nov 4 18:23:35 EST 2002 i686 unknown'
gdb -v|tail -n1='This GDB was configured as "i386-linux".'

This patch can be applied from src/gdb using patch -p1.

I added a file called mi-cmd-file.c. I was following the pattern created
by the designers of GDB/MI. I was imagining that all of the
unimplemented function -file will go in it when they are ready.
The file is attached.

Index: gdb/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.328
diff -c -r1.328 Makefile.in
*** gdb/Makefile.in	7 Feb 2003 05:33:44 -0000	1.328
--- gdb/Makefile.in	10 Feb 2003 20:51:47 -0000
***************
*** 168,181 ****
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
--- 168,181 ----
  SUBDIR_MI_OBS = \
  	mi-out.o mi-console.o \
  	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
! 	mi-cmd-file.o mi-cmd-disas.o \
  	mi-interp.o \
  	mi-main.o mi-parse.o mi-getopt.o
  SUBDIR_MI_SRCS = \
  	mi/mi-out.c mi/mi-console.c \
  	mi/mi-cmds.c mi/mi-cmd-env.c \
  	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
! 	mi/mi-cmd-file.c mi/mi-cmd-disas.c \
  	mi/mi-interp.c \
  	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
  SUBDIR_MI_DEPS =
***************
*** 2494,2499 ****
--- 2494,2503 ----
  	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
  	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c
+ mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \
+ 	$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+ 	$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+ 	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c
  mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \
  	$(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h)
  	$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c
Index: gdb/mi/ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/mi/ChangeLog,v
retrieving revision 1.92
diff -c -r1.92 ChangeLog
*** gdb/mi/ChangeLog	9 Feb 2003 10:47:37 -0000	1.92
--- gdb/mi/ChangeLog	10 Feb 2003 20:51:51 -0000
***************
*** 1,3 ****
--- 1,10 ----
+ 2003-02-10  Bob Rossi  <bob_rossi@cox.net>
+ 
+ 	* mi-cmd-file.c: added file to implement mi file commands.
+     * mi-cmds.c: Add -file-list-exec-source-file command.
+     * mi-cmds.h: Add -file-list-exec-source-file to proto list.
+     * gdbmi.texinfo: Document -file-list-exec-source-file.
+ 
  2003-02-09  Andrew Cagney  <ac131313@redhat.com>
  
  	* mi-interp.c (mi_remove_notify_hooks): Convert function
Index: gdb/mi/gdbmi.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/mi/gdbmi.texinfo,v
retrieving revision 1.33
diff -c -r1.33 gdbmi.texinfo
*** gdb/mi/gdbmi.texinfo	4 Feb 2003 18:41:29 -0000	1.33
--- gdb/mi/gdbmi.texinfo	10 Feb 2003 20:51:55 -0000
***************
*** 2340,2345 ****
--- 2340,2355 ----
  @subsubheading Example
  N.A.
  
+ @subheading The @code{-file-list-exec-source-file} Command
+ @findex -file-list-exec-source-file
+ 
+ @subsubheading Synopsis
+ 
+ @example
+  -file-list-exec-source-file
+ @end example
+ 
+ List the current source file and line for the current executable.
  
  @subheading The @code{-file-list-exec-source-files} Command
  @findex -file-list-exec-source-files
Index: gdb/mi/mi-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
retrieving revision 1.10
diff -c -r1.10 mi-cmds.c
*** gdb/mi/mi-cmds.c	6 Feb 2003 01:19:12 -0000	1.10
--- gdb/mi/mi-cmds.c	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
    {"file-exec-and-symbols", "file %s", 0},
    {"file-exec-file", "exec-file %s", 0},
    {"file-list-exec-sections", 0, 0},
+   {"file-list-exec-source-file", 0, 0, mi_cmd_file_list_exec_source_file},
    {"file-list-exec-source-files", 0, 0},
    {"file-list-shared-libraries", 0, 0},
    {"file-list-symbol-files", 0, 0},
Index: gdb/mi/mi-cmds.h
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
retrieving revision 1.7
diff -c -r1.7 mi-cmds.h
*** gdb/mi/mi-cmds.h	6 Feb 2003 01:19:12 -0000	1.7
--- gdb/mi/mi-cmds.h	10 Feb 2003 20:51:55 -0000
***************
*** 80,85 ****
--- 80,86 ----
  extern mi_cmd_args_ftype mi_cmd_exec_step_instruction;
  extern mi_cmd_args_ftype mi_cmd_exec_until;
  extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
+ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
  extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
  extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
  extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;

[-- Attachment #2: mi-cmd-file.c --]
[-- Type: text/x-csrc, Size: 1138 bytes --]

#include "defs.h"
#include "mi-cmds.h"
#include "ui-out.h"
#include "symtab.h"
#include "source.h"

/* Return to the client the absolute path and line number of the 
   current file being executed. */

enum mi_cmd_result
mi_cmd_file_list_exec_source_file(char *command, char **argv, int argc)
{
  struct symtab_and_line st;
  if (argc != 0)
    error ("mi_cmd_file_list_exec_source_file: Usage: No args");

  /* Set the default file and line, also get them */
  set_default_source_symtab_and_line();
  st = get_current_source_symtab_and_line();

  /* We should always get a symtab. */
  if (!st.symtab)
    error ("mi_cmd_file_list_exec_source_file: No symtab");

  /* Extract the fullname if it is not known yet */
  if (st.symtab->fullname == NULL)
    symtab_to_filename (st.symtab);

  /* We may not be able to open the file (not available). */
  if (st.symtab->fullname == NULL)
    error ("mi_cmd_file_list_exec_source_file: File not found");

  /* Print to the user the line and absolute file name */
  ui_out_field_int (uiout, "line", st.line);
  ui_out_field_string (uiout, "file", st.symtab->fullname);

  return MI_CMD_DONE;
}

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

end of thread, other threads:[~2003-04-03  2:54 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-02 20:24 Adding -file-list-exec-source-file command to GDB/MI Bob Rossi
  -- strict thread matches above, loose matches on Subject: below --
2003-04-02 20:24 Bob Rossi
2003-04-02 21:59 ` Andrew Cagney
2003-04-03  2:54 ` Eli Zaretskii
2003-03-29  0:41 Bob Rossi
2003-03-31  5:38 ` Andrew Cagney
2003-03-31 18:46   ` Bob Rossi
2003-03-31 18:56     ` Andrew Cagney
2003-04-02 16:15   ` Bob Rossi
2003-04-02 16:27     ` Andrew Cagney
2003-03-20 22:44 Bob Rossi
2003-03-21  4:34 ` Eli Zaretskii
2003-03-21  9:53 ` Jason Molenda
2003-03-21 13:16   ` Bob Rossi
2003-03-28 15:26     ` Andrew Cagney
2003-03-30  4:06       ` Bob Rossi
2003-03-31  4:22         ` Andrew Cagney
2003-03-31  8:13           ` Jason Molenda
2003-03-31 14:31             ` Andrew Cagney
2003-03-31 17:16               ` Jason Molenda
2003-03-31 18:52                 ` Andrew Cagney
2003-03-31 19:20                   ` Jason Molenda
2003-03-31 20:12                     ` Andrew Cagney
2003-03-26 22:48 ` Andrew Cagney
2003-03-28 14:35   ` Bob Rossi
2003-03-28 15:30 ` Andrew Cagney
2003-03-28 16:05   ` Bob Rossi
2003-03-28 16:10     ` Daniel Jacobowitz
2003-03-10  0:31 Bob Rossi
2003-03-10  4:28 ` Eli Zaretskii
2003-03-18  2:10   ` Bob Rossi
2003-03-18  5:46     ` Eli Zaretskii
2003-02-10 22:28 Michael Elizabeth Chastain
2003-02-10 22:15 Bob Rossi
2003-02-11  6:39 ` Eli Zaretskii
2003-02-13  3:00   ` Bob Rossi

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