Re: syms_from_objfile() warnings and win32-nat.c IO redirection (Was: suppress annoying warnings about cygwin1.dbg)

Pedro Alves
2007-10-13T01:24:08Z

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

Brian Dessent wrote:
> Daniel Jacobowitz wrote:
>
> Unfortunately, current HEAD is nearly unusable right now on Cygwin.

I shook a bit when I read "unusable" :) That's a pretty strong word.

> If you do this in insight it's much worse as every one of those warnings
> gets its own popup message box, which means twelve annoying things to
> dismiss before you can even start to debug. And on top of that, some of
> these messages somehow end up spuriously appearing in with the program
> display pane in insight (see attached PNG). I guess there's some kind
> of filter in the insight code that needs updating, but preferrably these
> warnings shouldn't even be generated.
>

I've had this fixed here for a while. It goes on the direction of removing
the warnings, and removing the warning suppressing on win32-nat.c. Could
you test it with cygwin1.dbg and with insight?

Cheers,
Pedro Alves

[-- Attachment #2: remove_redirect_null.diff --]
[-- Type: text/x-diff, Size: 4792 bytes --]

2007-10-09 Pedro Alves <pedro_alves@portugalmail.pt>

* symfile.c (syms_from_objfile): Don't warn if loadable
sections are not found.

---
gdb/symfile.c | 29 +++++++++--------------
gdb/win32-nat.c | 70 --------------------------------------------------------
2 files changed, 13 insertions(+), 86 deletions(-)

Index: src/gdb/symfile.c
===================================================================
--- src.orig/gdb/symfile.c 2007-10-08 23:45:50.000000000 +0100
+++ src/gdb/symfile.c 2007-10-13 01:51:40.000000000 +0100
@@ -822,18 +822,18 @@ syms_from_objfile (struct objfile *objfi
bfd_map_over_sections (objfile->obfd, find_lowest_section,
&lower_sect);
if (lower_sect == NULL)
- warning (_("no loadable sections found in added symbol-file %s"),
- objfile->name);
- else
- if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
- warning (_("Lowest section in %s is %s at %s"),
- objfile->name,
- bfd_section_name (objfile->obfd, lower_sect),
- paddr (bfd_section_vma (objfile->obfd, lower_sect)));
- if (lower_sect != NULL)
- lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
- else
lower_offset = 0;
+ else
+ {
+ int flags = bfd_get_section_flags (objfile->obfd, lower_sect);
+ if (flags == 0)
+ warning (_("Lowest section in %s is %s at %s"),
+ objfile->name,
+ bfd_section_name (objfile->obfd, lower_sect),
+ paddr (bfd_section_vma (objfile->obfd, lower_sect)));
+
+ lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
+ }

/* Calculate offsets for the loadable sections.
FIXME! Sections must be in order of increasing loadable section
@@ -860,12 +860,7 @@ syms_from_objfile (struct objfile *objfi
addrs->other[i].sectindex = sect->index ;
}
else
- {
- warning (_("section %s not found in %s"),
- addrs->other[i].name,
- objfile->name);
- addrs->other[i].addr = 0;
- }
+ addrs->other[i].addr = 0;
}
else
addrs->other[i].addr = lower_offset;
Index: src/gdb/win32-nat.c
===================================================================
--- src.orig/gdb/win32-nat.c 2007-10-13 01:51:10.000000000 +0100
+++ src/gdb/win32-nat.c 2007-10-13 01:51:40.000000000 +0100
@@ -525,19 +525,6 @@ failed:
return 0;
}

-/* Encapsulate the information required in a call to
- symbol_file_add_args */
-struct safe_symbol_file_add_args
-{
- char *name;
- int from_tty;
- struct section_addr_info *addrs;
- int mainline;
- int flags;
- struct ui_file *err, *out;
- struct objfile *ret;
-};
-
/* Maintain a linked list of "so" information. */
struct lm_info
{
@@ -546,61 +533,6 @@ struct lm_info

static struct so_list solib_start, *solib_end;

-/* Call symbol_file_add with stderr redirected. We don't care if there
- are errors. */
-static int
-safe_symbol_file_add_stub (void *argv)
-{
-#define p ((struct safe_symbol_file_add_args *) argv)
- struct so_list *so = &solib_start;
-
- p->ret = symbol_file_add (p->name, p->from_tty, p->addrs, p->mainline, p->flags);
- return !!p->ret;
-#undef p
-}
-
-/* Restore gdb's stderr after calling symbol_file_add */
-static void
-safe_symbol_file_add_cleanup (void *p)
-{
-#define sp ((struct safe_symbol_file_add_args *)p)
- gdb_flush (gdb_stderr);
- gdb_flush (gdb_stdout);
- ui_file_delete (gdb_stderr);
- ui_file_delete (gdb_stdout);
- gdb_stderr = sp->err;
- gdb_stdout = sp->out;
-#undef sp
-}
-
-/* symbol_file_add wrapper that prevents errors from being displayed. */
-static struct objfile *
-safe_symbol_file_add (char *name, int from_tty,
- struct section_addr_info *addrs,
- int mainline, int flags)
-{
- struct safe_symbol_file_add_args p;
- struct cleanup *cleanup;
-
- cleanup = make_cleanup (safe_symbol_file_add_cleanup, &p);
-
- p.err = gdb_stderr;
- p.out = gdb_stdout;
- gdb_flush (gdb_stderr);
- gdb_flush (gdb_stdout);
- gdb_stderr = ui_file_new ();
- gdb_stdout = ui_file_new ();
- p.name = name;
- p.from_tty = from_tty;
- p.addrs = addrs;
- p.mainline = mainline;
- p.flags = flags;
- catch_errors (safe_symbol_file_add_stub, &p, "", RETURN_MASK_ERROR);
-
- do_cleanups (cleanup);
- return p.ret;
-}
-
static struct so_list *
win32_make_so (const char *name, DWORD load_addr)
{
@@ -801,7 +733,7 @@ dll_symbol_command (char *args, int from
args = newargs;
}

- safe_symbol_file_add (args, from_tty, NULL, 0, OBJF_SHARED | OBJF_USERLOADED);
+ symbol_file_add (args, from_tty, NULL, 0, OBJF_SHARED | OBJF_USERLOADED);
}

/* Handle DEBUG_STRING output from child process.