From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6047 invoked by alias); 27 Jan 2013 22:36:39 -0000 Received: (qmail 5917 invoked by uid 22791); 27 Jan 2013 22:36:39 -0000 X-SWARE-Spam-Status: No, hits=-6.4 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 27 Jan 2013 22:36:33 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r0RMaWOB029137 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 27 Jan 2013 17:36:32 -0500 Received: from host2.jankratochvil.net (ovpn-116-88.ams2.redhat.com [10.36.116.88]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r0RMaQTP032766 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO) for ; Sun, 27 Jan 2013 17:36:29 -0500 Date: Sun, 27 Jan 2013 22:36:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Subject: [patchv2 8/11] TUI: source "file" -> "fullname" Message-ID: <20130127223625.GI15252@host2.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-01/txt/msg00665.txt.bz2 Hi, this is a new part in this v2 series. It was tested current "gdb -tui" is really incorrect and it gets fixed by this patch: cd gdb.linespec/ cd base/one/ g++ -o ../../1.o -c thefile.cc -Wall -g cd ../two g++ -o ../../2.o -c thefile.cc -Wall -g cd ../.. g++ -o 0 lspec.cc -Wall -g 1.o 2.o ../../gdb-tuiN -tui ./0 ../../gdb-tuiY -tui ./0 b m b n r c With this patch GDB displays the first thefile.cc for m() and the second thefile.cc for n(); without this patch it forgot to display n(). It expects that if !ui_out_is_mi_like_p and !ui_source_list it is really TUI and no other uiout interface; I hope it is safe assumption and there will be no new interfaces besides current CLI + TUI + MI. TUI uses a special exception to suppress + catch the output of "list" command. Thanks, Jan gdb/ 2013-01-25 Jan Kratochvil * source.c (print_source_lines_base): Print for TUI also "fullname". * tui/tui-data.c (init_content_element): Change tui_locator_element field to full_name. * tui/tui-data.h (struct tui_locator_element): Likewise. * tui/tui-disasm.c (tui_show_disassem_and_update_source): Rename tui_update_locator_filename calls to tui_update_locator_fullname. Replace symtab->filename refererence by symtab_to_fullname call. * tui/tui-out.c (tui_field_string): Check for "fullname" now. * tui/tui-source.c (tui_set_source_content): Change tui_locator_element field to full_name. Replace symtab->filename refererence by symtab_to_fullname call. (tui_show_symtab_source): Rename parameter to fullname. Change tui_locator_element field to full_name. * tui/tui-stack.c: Include source.h. (tui_set_locator_filename): Rename the declaration to ... (tui_set_locator_fullname): ... here. Rename its parameter to fullname, updates its comment. (tui_set_locator_info): Rename its parameter to fullname. (tui_set_locator_filename): Rename the definition to ... (tui_set_locator_fullname): ... here. Rename its parameter to fullname, updates its comment. Change tui_locator_element field to full_name. (tui_set_locator_info): Rename its parameter to fullname. (tui_set_locator_info): Rename callee to tui_set_locator_fullname. (tui_update_locator_filename): Rename to ... (tui_update_locator_fullname): ... here. Rename callee to tui_set_locator_fullname. (tui_show_frame_info): Replace symtab->filename refererence by symtab_to_fullname call. * tui/tui-stack.h (tui_update_locator_filename): Rename to ... (tui_update_locator_fullname): ... here. * tui/tui-winsource.c (tui_display_main): Rename the callee to tui_update_locator_fullname. Replace symtab->filename refererence by symtab_to_fullname call. * tui/tui.c (tui_show_source): Rename its parameter to fullname. Rename the callee to tui_update_locator_fullname. * tui/tui.h (tui_show_source): Rename its parameter to fullname. --- a/gdb/source.c +++ b/gdb/source.c @@ -1345,7 +1345,11 @@ print_source_lines_base (struct symtab *s, int line, int stopline, ui_out_field_int (uiout, "line", line); ui_out_text (uiout, "\tin "); ui_out_field_string (uiout, "file", symtab_to_filename (s)); - if (ui_out_is_mi_like_p (uiout)) + + /* TUI expects the "fullname" field. While it is + !ui_out_is_mi_like_p compared to CLI it is !ui_source_list. */ + if (ui_out_is_mi_like_p (uiout) + || !ui_out_test_flags (uiout, ui_source_list)) { const char *fullname = symtab_to_fullname (s); --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -510,7 +510,7 @@ init_content_element (struct tui_win_element *element, element->which_element.data.content = (char*) NULL; break; case LOCATOR_WIN: - element->which_element.locator.file_name[0] = + element->which_element.locator.full_name[0] = element->which_element.locator.proc_name[0] = (char) 0; element->which_element.locator.line_no = 0; element->which_element.locator.addr = 0; --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -203,7 +203,8 @@ struct tui_command_element /* Elements in the locator window content. */ struct tui_locator_element { - char file_name[MAX_LOCATOR_ELEMENT_LEN]; + /* Resolved absolute filename as returned by symtab_to_fullname. */ + char full_name[MAX_LOCATOR_ELEMENT_LEN]; char proc_name[MAX_LOCATOR_ELEMENT_LEN]; int line_no; CORE_ADDR addr; --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -318,10 +318,10 @@ tui_show_disassem_and_update_source (struct gdbarch *gdbarch, if (sal.symtab) { set_current_source_symtab_and_line (&sal); - tui_update_locator_filename (sal.symtab->filename); + tui_update_locator_fullname (symtab_to_fullname (sal.symtab)); } else - tui_update_locator_filename ("?"); + tui_update_locator_fullname ("?"); } return; --- a/gdb/tui/tui-out.c +++ b/gdb/tui/tui-out.c @@ -84,7 +84,7 @@ tui_field_string (struct ui_out *uiout, if (data->base.suppress_output) return; - if (fldname && data->line > 0 && strcmp (fldname, "file") == 0) + if (fldname && data->line > 0 && strcmp (fldname, "fullname") == 0) { data->start_of_line ++; if (data->line > 0) --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -151,8 +151,8 @@ tui_set_source_content (struct symtab *s, cur_line_no; element->which_element.source.is_exec_point = (filename_cmp (((struct tui_win_element *) - locator->content[0])->which_element.locator.file_name, - s->filename) == 0 + locator->content[0])->which_element.locator.full_name, + symtab_to_fullname (s)) == 0 && cur_line_no == ((struct tui_win_element *) locator->content[0])->which_element.locator.line_no); if (c != EOF) @@ -333,14 +333,14 @@ tui_show_symtab_source (struct gdbarch *gdbarch, struct symtab *s, /* Answer whether the source is currently displayed in the source window. */ int -tui_source_is_displayed (const char *fname) +tui_source_is_displayed (const char *fullname) { return (TUI_SRC_WIN != NULL && TUI_SRC_WIN->generic.content_in_use && (filename_cmp (((struct tui_win_element *) (tui_locator_win_info_ptr ())-> - content[0])->which_element.locator.file_name, - fname) == 0)); + content[0])->which_element.locator.full_name, + fullname) == 0)); } --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -29,6 +29,7 @@ #include "top.h" #include "gdb-demangle.h" #include "gdb_string.h" +#include "source.h" #include "tui/tui.h" #include "tui/tui-data.h" #include "tui/tui-stack.h" @@ -44,12 +45,12 @@ Returns a pointer to a static area holding the result. */ static char *tui_get_function_from_frame (struct frame_info *fi); -/* Set the filename portion of the locator. */ -static void tui_set_locator_filename (const char *filename); +/* Set the full_name portion of the locator. */ +static void tui_set_locator_fullname (const char *fullname); /* Update the locator, with the provided arguments. */ static void tui_set_locator_info (struct gdbarch *gdbarch, - const char *filename, + const char *fullname, const char *procname, int lineno, CORE_ADDR addr); @@ -276,27 +277,27 @@ tui_show_locator_content (void) /* Set the filename portion of the locator. */ static void -tui_set_locator_filename (const char *filename) +tui_set_locator_fullname (const char *fullname) { struct tui_gen_win_info *locator = tui_locator_win_info_ptr (); struct tui_locator_element *element; if (locator->content[0] == NULL) { - tui_set_locator_info (NULL, filename, NULL, 0, 0); + tui_set_locator_info (NULL, fullname, NULL, 0, 0); return; } element = &((struct tui_win_element *) locator->content[0])->which_element.locator; - element->file_name[0] = 0; - strcat_to_buf (element->file_name, MAX_LOCATOR_ELEMENT_LEN, filename); + element->full_name[0] = 0; + strcat_to_buf (element->full_name, MAX_LOCATOR_ELEMENT_LEN, fullname); } /* Update the locator, with the provided arguments. */ static void tui_set_locator_info (struct gdbarch *gdbarch, - const char *filename, + const char *fullname, const char *procname, int lineno, CORE_ADDR addr) @@ -318,14 +319,14 @@ tui_set_locator_info (struct gdbarch *gdbarch, element->line_no = lineno; element->addr = addr; element->gdbarch = gdbarch; - tui_set_locator_filename (filename); + tui_set_locator_fullname (fullname); } -/* Update only the filename portion of the locator. */ +/* Update only the full_name portion of the locator. */ void -tui_update_locator_filename (const char *filename) +tui_update_locator_fullname (const char *fullname) { - tui_set_locator_filename (filename); + tui_set_locator_fullname (fullname); tui_show_locator_content (); } @@ -348,11 +349,12 @@ tui_show_frame_info (struct frame_info *fi) find_frame_sal (fi, &sal); source_already_displayed = sal.symtab != 0 - && tui_source_is_displayed (sal.symtab->filename); + && tui_source_is_displayed (symtab_to_fullname (sal.symtab)); if (get_frame_pc_if_available (fi, &pc)) tui_set_locator_info (get_frame_arch (fi), - sal.symtab == 0 ? "??" : sal.symtab->filename, + (sal.symtab == 0 + ? "??" : symtab_to_fullname (sal.symtab)), tui_get_function_from_frame (fi), sal.line, pc); --- a/gdb/tui/tui-stack.h +++ b/gdb/tui/tui-stack.h @@ -24,7 +24,7 @@ struct frame_info; -extern void tui_update_locator_filename (const char *); +extern void tui_update_locator_fullname (const char *); extern void tui_show_locator_content (void); extern void tui_show_frame_info (struct frame_info *); --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -59,9 +59,9 @@ tui_display_main (void) tui_update_source_windows_with_addr (gdbarch, addr); sal = find_pc_line (addr, 0); if (sal.symtab) - tui_update_locator_filename (sal.symtab->filename); + tui_update_locator_fullname (symtab_to_fullname (sal.symtab)); else - tui_update_locator_filename ("??"); + tui_update_locator_fullname ("??"); } } } --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -532,7 +532,7 @@ tui_reset (void) #endif void -tui_show_source (const char *file, int line) +tui_show_source (const char *fullname, int line) { struct symtab_and_line cursal = get_current_source_symtab_and_line (); @@ -540,7 +540,7 @@ tui_show_source (const char *file, int line) tui_add_win_to_layout (SRC_WIN); tui_update_source_windows_with_line (cursal.symtab, line); - tui_update_locator_filename (file); + tui_update_locator_fullname (fullname); } void --- a/gdb/tui/tui.h +++ b/gdb/tui/tui.h @@ -95,7 +95,7 @@ extern void tui_set_key_mode (enum tui_key_mode mode); extern int tui_active; -extern void tui_show_source (const char *file, int line); +extern void tui_show_source (const char *fullname, int line); extern struct ui_out *tui_out_new (struct ui_file *stream);