/* Output generating routines for GDB.
- Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005
+ Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
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
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "gdb_string.h"
is always available. Stack/nested level 0 is reserved for the
top-level result. */
-enum { MAX_UI_OUT_LEVELS = 6 };
+enum { MAX_UI_OUT_LEVELS = 8 };
struct ui_out_level
{
int flags;
/* specific implementation of ui-out */
struct ui_out_impl *impl;
- struct ui_out_data *data;
+ void *data;
/* Sub structure tracking the ui-out depth. */
int level;
const char *id)
{
struct ui_out_level *current;
+
/* We had better not overflow the buffer. */
uiout->level++;
gdb_assert (uiout->level >= 0 && uiout->level < MAX_UI_OUT_LEVELS);
int width, enum ui_align align,
const char *fldname,
const char *format,
- va_list args) ATTR_FORMAT (printf, 6, 0);
+ va_list args) ATTRIBUTE_PRINTF (6, 0);
static void default_spaces (struct ui_out *uiout, int numspaces);
static void default_text (struct ui_out *uiout, const char *string);
static void default_message (struct ui_out *uiout, int verbosity,
const char *format,
- va_list args) ATTR_FORMAT (printf, 3, 0);
+ va_list args) ATTRIBUTE_PRINTF (3, 0);
static void default_wrap_hint (struct ui_out *uiout, char *identstring);
static void default_flush (struct ui_out *uiout);
enum ui_align align, const char *fldname, int value);
static void uo_field_skip (struct ui_out *uiout, int fldno, int width,
enum ui_align align, const char *fldname);
-static void uo_field_string (struct ui_out *uiout, int fldno, int width,
- enum ui_align align, const char *fldname,
- const char *string);
static void uo_field_fmt (struct ui_out *uiout, int fldno, int width,
enum ui_align align, const char *fldname,
const char *format, va_list args)
- ATTR_FORMAT (printf, 6, 0);
+ ATTRIBUTE_PRINTF (6, 0);
static void uo_spaces (struct ui_out *uiout, int numspaces);
static void uo_text (struct ui_out *uiout, const char *string);
static void uo_message (struct ui_out *uiout, int verbosity,
const char *format, va_list args)
- ATTR_FORMAT (printf, 3, 0);
+ ATTRIBUTE_PRINTF (3, 0);
static void uo_wrap_hint (struct ui_out *uiout, char *identstring);
static void uo_flush (struct ui_out *uiout);
static int uo_redirect (struct ui_out *uiout, struct ui_file *outstream);
const char *id)
{
int new_level;
+
if (uiout->table.flag && !uiout->table.body_flag)
internal_error (__FILE__, __LINE__,
_("table header or table_body expected; lists must be \
int fldno;
int width;
int align;
+
verify_field (uiout, &fldno, &width, &align);
}
enum ui_out_type type)
{
int old_level = pop_level (uiout, type);
+
uo_end (uiout, type, old_level);
}
do_cleanup_end (void *data)
{
struct ui_out_end_cleanup_data *end_cleanup_data = data;
+
ui_out_end (end_cleanup_data->uiout, end_cleanup_data->type);
xfree (end_cleanup_data);
}
enum ui_out_type type)
{
struct ui_out_end_cleanup_data *end_cleanup_data;
+
end_cleanup_data = XMALLOC (struct ui_out_end_cleanup_data);
end_cleanup_data->uiout = uiout;
end_cleanup_data->type = type;
int fldno;
int width;
int align;
- struct ui_out_level *current = current_level (uiout);
verify_field (uiout, &fldno, &width, &align);
int fldno;
int width;
int align;
- struct ui_out_level *current = current_level (uiout);
verify_field (uiout, &fldno, &width, &align);
void
ui_out_field_core_addr (struct ui_out *uiout,
const char *fldname,
+ struct gdbarch *gdbarch,
CORE_ADDR address)
{
char addstr[20];
+ int addr_bit = gdbarch_addr_bit (gdbarch);
+
+ if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
+ address &= ((CORE_ADDR) 1 << addr_bit) - 1;
/* FIXME: cagney/2002-05-03: Need local_address_string() function
that returns the language localized string formatted to a width
- based on TARGET_ADDR_BIT. */
- /* deprecated_print_address_numeric (address, 1, local_stream); */
- if (TARGET_ADDR_BIT <= 32)
+ based on gdbarch_addr_bit. */
+ if (addr_bit <= 32)
strcpy (addstr, hex_string_custom (address, 8));
else
strcpy (addstr, hex_string_custom (address, 16));
long length;
char *buffer = ui_file_xstrdup (buf->stream, &length);
struct cleanup *old_cleanup = make_cleanup (xfree, buffer);
+
if (length > 0)
ui_out_field_string (uiout, fldname, buffer);
else
va_list args;
va_start (args, format);
-
uo_message (uiout, verbosity, format, args);
-
va_end (args);
}
int oldflags = uiout->flags;
uiout->flags |= mask;
-
return oldflags;
}
int oldflags = uiout->flags;
uiout->flags &= ~mask;
-
return oldflags;
}
temphdr = XMALLOC (struct ui_out_hdr);
temphdr->width = width;
temphdr->alignment = alignment;
- /* we have to copy the column title as the original may be an automatic */
+ /* We have to copy the column title as the original may be an
+ automatic. */
if (colhdr != NULL)
temphdr->colhdr = xstrdup (colhdr);
else
temphdr->colhdr = NULL;
+
if (col_name != NULL)
+ temphdr->col_name = xstrdup (col_name);
+ else if (colhdr != NULL)
temphdr->col_name = xstrdup (colhdr);
else
- temphdr->col_name = xstrdup (colhdr);
+ temphdr->col_name = NULL;
+
temphdr->next = NULL;
if (uiout->table.header_first == NULL)
{
/* Access to ui-out members data */
-struct ui_out_data *
+void *
ui_out_data (struct ui_out *uiout)
{
return uiout->data;
/* initalize private members at startup */
struct ui_out *
-ui_out_new (struct ui_out_impl *impl,
- struct ui_out_data *data,
+ui_out_new (struct ui_out_impl *impl, void *data,
int flags)
{
struct ui_out *uiout = XMALLOC (struct ui_out);
+
uiout->data = data;
uiout->impl = impl;
uiout->flags = flags;