* config/i386/tm-cygwin.h: include tm-i386.h instead of tm-i386v.h. This fixes
authorChristopher Faylor <me+cygwin@cgf.cx>
Fri, 12 Oct 2001 04:32:16 +0000 (04:32 +0000)
committerChristopher Faylor <me+cygwin@cgf.cx>
Fri, 12 Oct 2001 04:32:16 +0000 (04:32 +0000)
errors in "long long" handling for 'finish' and 'return' commands.
* win32-nat.c (safe_symbol_file_add_stub): Avoid adding a shared library if it
has already been loaded.
(safe_symbol_file_add_cleanup): Don't mess with stderr or we won't see any
error messages.
(safe_symbol_file_add): Ditto.
(solib_symbols_add): Make static.  Accept 'from_tty' parameter.  Pass it to
safe_symbol_file_add.
(core_dll_symbols_add): Accomodate extra solib_symbols_add parameter.
(child_solib_add): Ditto.
* win32-nat.c (handle_exception): Don't print "first chance" exceptions.
(get_child_debug_event): Continue from exceptions if !handle_exception.

gdb/ChangeLog
gdb/config/i386/tm-cygwin.h
gdb/win32-nat.c
gdb/windows-nat.c

index d54c546bd5a59e7ea65106fd60dec82f9fc18f6d..76097b24f57e89e82afadb2fcf4089ad6d848bcf 100644 (file)
@@ -1,3 +1,25 @@
+2001-10-12  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+       * config/i386/tm-cygwin.h: include tm-i386.h instead of tm-i386v.h.
+       This fixes errors in "long long" handling for 'finish' and 'return'
+       commands.
+
+2001-10-12  Christopher Faylor  <cgf@redhat.com>
+
+       * win32-nat.c (safe_symbol_file_add_stub): Avoid adding a shared
+       library if it has already been loaded.
+       (safe_symbol_file_add_cleanup): Don't mess with stderr or we won't see
+       any error messages.
+       (safe_symbol_file_add): Ditto.
+       (solib_symbols_add): Make static.  Accept 'from_tty' parameter.  Pass
+       it to safe_symbol_file_add.
+       (core_dll_symbols_add): Accomodate extra solib_symbols_add parameter.
+       (child_solib_add): Ditto.
+
+       * win32-nat.c (handle_exception): Don't print "first chance"
+       exceptions.
+       (get_child_debug_event): Continue from exceptions if !handle_exception.
+
 2001-10-11  Tom Tromey  <tromey@redhat.com>
 
        * symtab.c (lookup_symtab): Removed.
index 287b8e0822d2b8585e2d45ed1e9a5019c5513ca2..b0cb572a8f1f18f21a74cccc3d1aa9c2454c7ae1 100644 (file)
@@ -23,7 +23,7 @@
 #undef HAVE_SSE_REGS   /* FIXME! win32-nat.c needs to support XMMi registers */
 #define HAVE_I387_REGS
 
-#include "i386/tm-i386v.h"
+#include "i386/tm-i386.h"
 
 #if 0
 #define IN_SOLIB_CALL_TRAMPOLINE(pc, name) skip_trampoline_code (pc, name)
index 83749b129454ddc8ba84e64cf6f90205e7f212a8..82d4c9466080b270116e803059912b6a9f65b923 100644 (file)
@@ -435,12 +435,26 @@ struct safe_symbol_file_add_args
   struct objfile *ret;
 };
 
+/* Maintain a linked list of "so" information. */
+struct so_stuff
+{
+  struct so_stuff *next, **last;
+  DWORD load_addr;
+  char name[0];
+}
+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_stuff *so = solib_start.next;
+
+  while ((so = so->next))
+    if (strcasecmp (so->name, p->name) == 0)
+      return 0;
   p->ret = symbol_file_add (p->name, p->from_tty, p->addrs, p->mainline, p->flags);
   return !!p->ret;
 #undef p
@@ -453,9 +467,9 @@ 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_stderr); */
   ui_file_delete (gdb_stdout);
-  gdb_stderr = sp->err;
+  /* gdb_stderr = sp->err; */
   gdb_stdout = sp->out;
 #undef sp
 }
@@ -475,7 +489,7 @@ safe_symbol_file_add (char *name, int from_tty,
   p.out = gdb_stdout;
   gdb_flush (gdb_stderr);
   gdb_flush (gdb_stdout);
-  gdb_stderr = ui_file_new ();
+  /* gdb_stderr = ui_file_new (); */
   gdb_stdout = ui_file_new ();
   p.name = name;
   p.from_tty = from_tty;
@@ -488,15 +502,6 @@ safe_symbol_file_add (char *name, int from_tty,
   return p.ret;
 }
 
-/* Maintain a linked list of "so" information. */
-struct so_stuff
-{
-  struct so_stuff *next, **last;
-  DWORD load_addr;
-  char name[0];
-}
-solib_start, *solib_end;
-
 /* Remember the maximum DLL length for printing in info dll command. */
 int max_dll_name_len;
 
@@ -630,8 +635,8 @@ child_clear_solibs (void)
 }
 
 /* Add DLL symbol information. */
-void
-solib_symbols_add (char *name, CORE_ADDR load_addr)
+static void
+solib_symbols_add (char *name, int from_tty, CORE_ADDR load_addr)
 {
   struct section_addr_info section_addrs;
 
@@ -645,7 +650,7 @@ solib_symbols_add (char *name, CORE_ADDR load_addr)
   memset (&section_addrs, 0, sizeof (section_addrs));
   section_addrs.other[0].name = ".text";
   section_addrs.other[0].addr = load_addr;
-  safe_symbol_file_add (name, 0, &section_addrs, 0, OBJF_SHARED);
+  safe_symbol_file_add (name, from_tty, 0, 0, OBJF_SHARED);
 
   return;
 }
@@ -777,6 +782,8 @@ handle_exception (struct target_waitstatus *ourstatus)
       last_sig = SIGILL;
       break;
     default:
+      if (current_event.u.Exception.dwFirstChance)
+       return 0;
       printf_unfiltered ("gdb: unknown target exception 0x%08lx at 0x%08lx\n",
                    current_event.u.Exception.ExceptionRecord.ExceptionCode,
        (DWORD) current_event.u.Exception.ExceptionRecord.ExceptionAddress);
@@ -918,8 +925,8 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     (unsigned) current_event.dwProcessId,
                     (unsigned) current_event.dwThreadId,
                     "EXCEPTION_DEBUG_EVENT"));
-      handle_exception (ourstatus);
-      retval = current_event.dwThreadId;
+      if (handle_exception (ourstatus))
+       retval = current_event.dwThreadId;
       break;
 
     case OUTPUT_DEBUG_STRING_EVENT:    /* message from the kernel */
@@ -1494,7 +1501,7 @@ core_dll_symbols_add (char *dll_name, DWORD base_addr)
   }
 
   register_loaded_dll (dll_name, base_addr + 0x1000);
-  solib_symbols_add (dll_name, (CORE_ADDR) base_addr + 0x1000);
+  solib_symbols_add (dll_name, 0, (CORE_ADDR) base_addr + 0x1000);
 
 out:
   return 1;
@@ -1637,7 +1644,7 @@ out:
 }
 
 void
-child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED, struct target_ops *target)
+child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty, struct target_ops *target)
 {
   if (core_bfd)
     {
@@ -1647,7 +1654,7 @@ child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED,
   else
     {
       if (solib_end && solib_end->name)
-       solib_symbols_add (solib_end->name, solib_end->load_addr);
+       solib_symbols_add (solib_end->name, from_tty, solib_end->load_addr);
     }
 }
 
index 83749b129454ddc8ba84e64cf6f90205e7f212a8..82d4c9466080b270116e803059912b6a9f65b923 100644 (file)
@@ -435,12 +435,26 @@ struct safe_symbol_file_add_args
   struct objfile *ret;
 };
 
+/* Maintain a linked list of "so" information. */
+struct so_stuff
+{
+  struct so_stuff *next, **last;
+  DWORD load_addr;
+  char name[0];
+}
+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_stuff *so = solib_start.next;
+
+  while ((so = so->next))
+    if (strcasecmp (so->name, p->name) == 0)
+      return 0;
   p->ret = symbol_file_add (p->name, p->from_tty, p->addrs, p->mainline, p->flags);
   return !!p->ret;
 #undef p
@@ -453,9 +467,9 @@ 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_stderr); */
   ui_file_delete (gdb_stdout);
-  gdb_stderr = sp->err;
+  /* gdb_stderr = sp->err; */
   gdb_stdout = sp->out;
 #undef sp
 }
@@ -475,7 +489,7 @@ safe_symbol_file_add (char *name, int from_tty,
   p.out = gdb_stdout;
   gdb_flush (gdb_stderr);
   gdb_flush (gdb_stdout);
-  gdb_stderr = ui_file_new ();
+  /* gdb_stderr = ui_file_new (); */
   gdb_stdout = ui_file_new ();
   p.name = name;
   p.from_tty = from_tty;
@@ -488,15 +502,6 @@ safe_symbol_file_add (char *name, int from_tty,
   return p.ret;
 }
 
-/* Maintain a linked list of "so" information. */
-struct so_stuff
-{
-  struct so_stuff *next, **last;
-  DWORD load_addr;
-  char name[0];
-}
-solib_start, *solib_end;
-
 /* Remember the maximum DLL length for printing in info dll command. */
 int max_dll_name_len;
 
@@ -630,8 +635,8 @@ child_clear_solibs (void)
 }
 
 /* Add DLL symbol information. */
-void
-solib_symbols_add (char *name, CORE_ADDR load_addr)
+static void
+solib_symbols_add (char *name, int from_tty, CORE_ADDR load_addr)
 {
   struct section_addr_info section_addrs;
 
@@ -645,7 +650,7 @@ solib_symbols_add (char *name, CORE_ADDR load_addr)
   memset (&section_addrs, 0, sizeof (section_addrs));
   section_addrs.other[0].name = ".text";
   section_addrs.other[0].addr = load_addr;
-  safe_symbol_file_add (name, 0, &section_addrs, 0, OBJF_SHARED);
+  safe_symbol_file_add (name, from_tty, 0, 0, OBJF_SHARED);
 
   return;
 }
@@ -777,6 +782,8 @@ handle_exception (struct target_waitstatus *ourstatus)
       last_sig = SIGILL;
       break;
     default:
+      if (current_event.u.Exception.dwFirstChance)
+       return 0;
       printf_unfiltered ("gdb: unknown target exception 0x%08lx at 0x%08lx\n",
                    current_event.u.Exception.ExceptionRecord.ExceptionCode,
        (DWORD) current_event.u.Exception.ExceptionRecord.ExceptionAddress);
@@ -918,8 +925,8 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     (unsigned) current_event.dwProcessId,
                     (unsigned) current_event.dwThreadId,
                     "EXCEPTION_DEBUG_EVENT"));
-      handle_exception (ourstatus);
-      retval = current_event.dwThreadId;
+      if (handle_exception (ourstatus))
+       retval = current_event.dwThreadId;
       break;
 
     case OUTPUT_DEBUG_STRING_EVENT:    /* message from the kernel */
@@ -1494,7 +1501,7 @@ core_dll_symbols_add (char *dll_name, DWORD base_addr)
   }
 
   register_loaded_dll (dll_name, base_addr + 0x1000);
-  solib_symbols_add (dll_name, (CORE_ADDR) base_addr + 0x1000);
+  solib_symbols_add (dll_name, 0, (CORE_ADDR) base_addr + 0x1000);
 
 out:
   return 1;
@@ -1637,7 +1644,7 @@ out:
 }
 
 void
-child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED, struct target_ops *target)
+child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty, struct target_ops *target)
 {
   if (core_bfd)
     {
@@ -1647,7 +1654,7 @@ child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED,
   else
     {
       if (solib_end && solib_end->name)
-       solib_symbols_add (solib_end->name, solib_end->load_addr);
+       solib_symbols_add (solib_end->name, from_tty, solib_end->load_addr);
     }
 }