* buildsym.c (patch_subfile_name): Update last_source_file
authorPeter Schauer <Peter.Schauer@mytum.de>
Sat, 25 Mar 1995 09:23:10 +0000 (09:23 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Sat, 25 Mar 1995 09:23:10 +0000 (09:23 +0000)
with the real source file name.
* dbxread.c (end_psymtab):  Handle static functions in the
SOFUN_ADDRESS_MAYBE_MISSING case by passing pst->filename
to lookup_minimal_symbol.
(process_one_symbol):  Ignore extra outermost context from
SunPRO cc and acc.
* stabsread.c (define_symbol):  Do not complain for SunPRO
static variable encoding if STATIC_TRANSFORM_NAME is defined.
* sparc-tdep.c, config/sparc/tm-sun4sol2.h
(sunpro_static_transform_name):  Renamed from
solaris_static_transform_name.
* config/sparc/tm-sun4os4.h (STATIC_TRANSFORM_NAME):
Define to sunpro_static_transform_name for acc 3.0 compiled
executables.
* procfs.c, config/alpha/nm-osf2.h (PROCFS_DONT_TRACE_FAULTS):
Renamed from PROCFS_DONT_TRACE_IFAULT, don't trace any faults
if defined.
* procfs.c (info_proc_siginfo):  Cast sip->si_addr to
`unsigned long' and use `lx' format for printing it.

gdb/ChangeLog
gdb/buildsym.c
gdb/dbxread.c
gdb/procfs.c
gdb/sparc-tdep.c
gdb/stabsread.c

index 008448e62152ff6bbb998346a59049a02fda5c19..e10a7bdf39cf9ac37a092d8877ed73d63b08d284 100644 (file)
@@ -1,3 +1,69 @@
+Sat Mar 25 01:16:10 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * buildsym.c (patch_subfile_name):  Update last_source_file
+       with the real source file name.
+       * dbxread.c (end_psymtab):  Handle static functions in the
+       SOFUN_ADDRESS_MAYBE_MISSING case by passing pst->filename
+       to lookup_minimal_symbol.
+       (process_one_symbol):  Ignore extra outermost context from
+       SunPRO cc and acc.
+       * stabsread.c (define_symbol):  Do not complain for SunPRO
+       static variable encoding if STATIC_TRANSFORM_NAME is defined.
+       * sparc-tdep.c, config/sparc/tm-sun4sol2.h
+       (sunpro_static_transform_name):  Renamed from
+       solaris_static_transform_name.
+       * config/sparc/tm-sun4os4.h (STATIC_TRANSFORM_NAME):
+       Define to sunpro_static_transform_name for acc 3.0 compiled
+       executables.
+       * procfs.c, config/alpha/nm-osf2.h (PROCFS_DONT_TRACE_FAULTS):
+       Renamed from PROCFS_DONT_TRACE_IFAULT, don't trace any faults
+       if defined.
+       * procfs.c (info_proc_siginfo):  Cast sip->si_addr to
+       `unsigned long' and use `lx' format for printing it.
+
+Fri Mar 24 15:45:42 1995  Stu Grossman  (grossman@cygnus.com)
+
+       * configure.in:  Move test for m68*-est-* before m68*-*-coff*.
+       * findvar.c:  Move default def of CANNOT_STORE_REGISTER closer to
+       the beginning of the code.
+       * (write_register_gen):  New routine.  Analogous to
+       read_register_gen.
+       * (write_register_bytes):  Another rewrite!  Make it smarter about
+       not updating regs with the same value.
+       * monitor.c (printf_monitor readchar):  Use stderr instead of
+       stdout to output debug info.  Also cleanup readchar a little.
+       * (expect):  Make sure that excessive responses are null
+       terminated.
+       * (monitor_open):  Check for magic number in monitor_ops struct.
+       Allow multiple commands as init strings.  Also, clear all
+       breakpoints.
+       * (monitor_resume monitor_wait):  Send a command to dump all the
+       regs for those targets which don't do so when waking up after a
+       continue command.
+       * (monitor_wait):  Handle excessive response output better.
+       * (monitor_write_memory):  Use block fill, word, and long word
+       commands (if they exist) to write memory more efficiently.
+       * General cleanups to use flag bits instead of individual flag
+       words in monitor_ops struct.
+       * (monitor_command):  Return output from command.
+       * (monitor_load_srec):  Allocate buffer only once.  Use alloca.
+       Wait for load response string instead of using a timeout to start
+       sending S-records.  Fix bug where value of srec_frame shrinks.  If
+       hashmark is set, print `-' for retransmissions.  General cleanups.
+       * (monitor_make_srec):  Get rid of S-record default type kludge.
+       * monitor.h:  Use seperate struct for memory and register
+       read/write commands.  Memory commands can come in byte, word,
+       long, and longlong forms.
+       * (monitor_ops):  Change lots of fields.  Generalize some stuff.
+       Put all flags into flags word.  Allow init to be a list of commands.
+       Add command for clearing all breakpoints, block fill, dumping all
+       registers.
+       * remote-est.c:  Rewrite to use new monitor conventions.
+       * config/m68k/est.mt (TDEPFILES):  Add monitor.o.
+       * config/m68k/tm-est.h:  Set NUM_REGS to 18.
+       * testsuite/gdb.base/break.exp:  Lots of cleanups.  Use gdb_test
+       more thoroughly.
+
 Thu Mar 23 23:20:00 1995  Jeff Law  (law@snake.cs.utah.edu)
 
         * somsolib.c (som_solib_add): Handle case where a shared library
index 45ee77affedc52cc0d2608b926ea8fbd5ffd0853..d62d2ee21622b7e61e272ebce3ba44f1ff050182 100644 (file)
@@ -1,5 +1,5 @@
 /* Support routines for building symbol tables in GDB's internal format.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1995
              Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -526,6 +526,7 @@ patch_subfile_names (subfile, name)
     {
       subfile->dirname = subfile->name;
       subfile->name = savestring (name, strlen (name));
+      last_source_file = name;
 
       /* Default the source language to whatever can be deduced from
         the filename.  If nothing can be deduced (such as for a C/C++
index a0a9820a6bdb8b051133eb1472c7252a4caf63c0..e77936675284d688a08da274bbb1807d4706ea50 100644 (file)
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -961,12 +961,8 @@ read_dbx_dynamic_symtab (section_offsets, objfile)
          if (sym->flags & BSF_GLOBAL)
            type |= N_EXT;
 
-         name = (char *) bfd_asymbol_name (sym);
-         record_minimal_symbol
-           (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
-            sym_value,
-            type,
-            objfile);
+         record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
+                                type, objfile);
        }
     }
 
@@ -1018,7 +1014,7 @@ read_dbx_dynamic_symtab (section_offsets, objfile)
          continue;
        }
 
-      name = bfd_asymbol_name (*rel->sym_ptr_ptr);
+      name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
       prim_record_minimal_symbol
        (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
         address,
@@ -1240,29 +1236,21 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
       LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
   pst->texthigh = capping_text;
 
-#ifdef N_SO_ADDRESS_MAYBE_MISSING
+#ifdef SOFUN_ADDRESS_MAYBE_MISSING
   /* Under Solaris, the N_SO symbols always have a value of 0,
      instead of the usual address of the .o file.  Therefore,
      we have to do some tricks to fill in texthigh and textlow.
      The first trick is in partial-stab.h: if we see a static
      or global function, and the textlow for the current pst
      is still 0, then we use that function's address for 
-     the textlow of the pst.
+     the textlow of the pst.  */
 
-     Now, to fill in texthigh, we remember the last function seen
+  /* Now, to fill in texthigh, we remember the last function seen
      in the .o file (also in partial-stab.h).  Also, there's a hack in
      bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
      to here via the misc_info field.  Therefore, we can fill in
      a reliable texthigh by taking the address plus size of the
-     last function in the file.
-
-     Unfortunately, that does not cover the case where the last function
-     in the file is static.  See the paragraph below for more comments
-     on this situation.
-
-     Finally, if we have a valid textlow for the current file, we run
-     down the partial_symtab_list filling in previous texthighs that
-     are still unknown.  */
+     last function in the file.  */
 
   if (pst->texthigh == 0 && last_function_name) {
     char *p;
@@ -1277,31 +1265,12 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
     strncpy (p, last_function_name, n);
     p[n] = 0;
     
-    minsym = lookup_minimal_symbol (p, objfile);
+    minsym = lookup_minimal_symbol (p, pst->filename, objfile);
 
-    if (minsym) {
+    if (minsym)
       pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
        (long) MSYMBOL_INFO (minsym);
-    } else {
-      /* This file ends with a static function, and it's
-        difficult to imagine how hard it would be to track down
-        the elf symbol.  Luckily, most of the time no one will notice,
-        since the next file will likely be compiled with -g, so
-        the code below will copy the first fuction's start address 
-        back to our texthigh variable.  (Also, if this file is the
-        last one in a dynamically linked program, texthigh already
-        has the right value.)  If the next file isn't compiled
-        with -g, then the last function in this file winds up owning
-        all of the text space up to the next -g file, or the end (minus
-        shared libraries).  This only matters for single stepping,
-        and even then it will still work, except that it will single
-        step through all of the covered functions, instead of setting
-        breakpoints around them as it usualy does.  This makes it
-        pretty slow, but at least it doesn't fail.
-
-        We can fix this with a fairly big change to bfd, but we need
-        to coordinate better with Cygnus if we want to do that.  FIXME.  */
-    }
+
     last_function_name = NULL;
   }
 
@@ -1309,7 +1278,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
   if (pst->textlow == 0)
     /* This loses if the text section really starts at address zero
        (generally true when we are debugging a .o file, for example).
-       That is why this whole thing is inside N_SO_ADDRESS_MAYBE_MISSING.  */
+       That is why this whole thing is inside SOFUN_ADDRESS_MAYBE_MISSING.  */
     pst->textlow = pst->texthigh;
 
   /* If we know our own starting text address, then walk through all other
@@ -1331,7 +1300,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
   }
 
   /* End of kludge for patching Solaris textlow and texthigh.  */
-#endif /* N_SO_ADDRESS_MAYBE_MISSING.  */
+#endif /* SOFUN_ADDRESS_MAYBE_MISSING.  */
 
   pst->n_global_syms =
     objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
@@ -1762,6 +1731,10 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
       /* This "symbol" just indicates the start of an inner lexical
         context within a function.  */
 
+      /* Ignore extra outermost context from SunPRO cc and acc.  */
+      if (n_opt_found && desc == 1)
+       break;
+
 #if defined(BLOCK_ADDRESS_ABSOLUTE)
       /* Relocate for dynamic loading (?).  */
       valu += function_start_offset;
@@ -1789,6 +1762,10 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
       /* This "symbol" just indicates the end of an inner lexical
         context that was started with N_LBRAC.  */
 
+      /* Ignore extra outermost context from SunPRO cc and acc.  */
+      if (n_opt_found && desc == 1)
+       break;
+
 #if defined(BLOCK_ADDRESS_ABSOLUTE)
       /* Relocate for dynamic loading (?).  */
       valu += function_start_offset;
@@ -2070,6 +2047,30 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
            case 'F':
              function_stab_type = type;
 
+#ifdef SOFUN_ADDRESS_MAYBE_MISSING
+             /* Deal with the SunPRO 3.0 compiler which omits the address
+                 from N_FUN symbols.  */
+             if (type == N_FUN && valu == 0)
+               {
+                 struct minimal_symbol *msym;
+                 char *p;
+                 int n;
+
+                 p = strchr (name, ':');
+                 if (p == NULL)
+                   p = name;
+                 n = p - name;
+                 p = alloca (n + 1);
+                 strncpy (p, name, n);
+                 p[n] = 0;
+
+                 msym = lookup_minimal_symbol (p, last_source_file,
+                                               objfile);
+                 if (msym)
+                   valu = SYMBOL_VALUE_ADDRESS (msym);
+               }
+#endif
+
 #ifdef SUN_FIXED_LBRAC_BUG
              /* The Sun acc compiler, under SunOS4, puts out
                 functions with N_GSYM or N_STSYM.  The problem is
@@ -2086,16 +2087,18 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
                 previous function. This means that we can use the
                 minimal symbol table to get the address.  */
 
-             /* On solaris up to 2.2, the N_FUN stab gets relocated.
-                On Solaris 2.3, ld no longer relocates stabs (which
-                is good), and the N_FUN's value is now always zero.
-                The following code can't deal with this, because
-                last_pc_address depends on getting the address from a
-                N_SLINE or some such and in Solaris those are function
-                relative.  Best fix is probably to create a Ttext.text symbol
-                and handle this like Ddata.data and so on.  */
-
-             if (type == N_GSYM || type == N_STSYM)
+             /* Starting with release 3.0, the Sun acc compiler,
+                under SunOS4, puts out functions with N_FUN and a value
+                of zero. This gets relocated to the start of the text
+                segment of the module, which is no good either.
+                Under SunOS4 we can deal with this as N_SLINE and N_SO
+                entries contain valid absolute addresses.
+                Release 3.0 acc also puts out N_OPT entries, which makes
+                it possible to discern acc from cc or gcc.  */
+
+             if (type == N_GSYM || type == N_STSYM
+                 || (type == N_FUN
+                     && n_opt_found && !block_address_function_relative))
                {
                  struct minimal_symbol *m;
                  int l = colon_pos - name;
index 00e92602b883c1974320121ce46ad5a46e7a4fb9..dba7599cdea1e8ec3a07c035a404dd70b64b6958 100644 (file)
@@ -1460,12 +1460,8 @@ create_procinfo (pid)
   prfillset (&pi->prrun.pr_fault);
   prdelset (&pi->prrun.pr_fault, FLTPAGE);
 
-#ifdef PROCFS_DONT_TRACE_IFAULT
-  /* Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable'
-     fault from which we cannot continue (except by disabling the
-     tracing). We rely on the delivery of a SIGTRAP signal (which is traced)
-     for the other T_IFAULT faults if tracing them is disabled.  */
-  prdelset (&pi->prrun.pr_fault, T_IFAULT);
+#ifdef PROCFS_DONT_TRACE_FAULTS
+  premptyset (&pi->prrun.pr_fault);
 #endif
 
   if (ioctl (pi->fd, PIOCWSTOP, &pi->prstatus) < 0)
@@ -2067,12 +2063,8 @@ do_attach (pid)
   prfillset (&pi->prrun.pr_fault);
   prdelset (&pi->prrun.pr_fault, FLTPAGE);
 
-#ifdef PROCFS_DONT_TRACE_IFAULT
-  /* Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable'
-     fault from which we cannot continue (except by disabling the
-     tracing). We rely on the delivery of a SIGTRAP signal (which is traced)
-     for the other T_IFAULT faults if tracing them is disabled.  */
-  prdelset (&pi->prrun.pr_fault, T_IFAULT);
+#ifdef PROCFS_DONT_TRACE_FAULTS
+  premptyset (&pi->prrun.pr_fault);
 #endif
 
   if (ioctl (pi->fd, PIOCSFAULT, &pi->prrun.pr_fault))
@@ -2997,7 +2989,8 @@ info_proc_siginfo (pip, summary)
                  (sip -> si_signo == SIGSEGV) ||
                  (sip -> si_signo == SIGBUS))
                {
-                 printf_filtered ("addr=%#x ", sip -> si_addr);
+                 printf_filtered ("addr=%#lx ",
+                                  (unsigned long) sip -> si_addr);
                }
              else if ((sip -> si_signo == SIGCHLD))
                {
@@ -3036,13 +3029,15 @@ info_proc_siginfo (pip, summary)
              if ((sip -> si_signo == SIGILL) ||
                  (sip -> si_signo == SIGFPE))
                {
-                 printf_filtered ("\t%-16#x %s.\n", sip -> si_addr,
+                 printf_filtered ("\t%#-16lx %s.\n",
+                                  (unsigned long) sip -> si_addr,
                                   "Address of faulting instruction");
                }
              else if ((sip -> si_signo == SIGSEGV) ||
                       (sip -> si_signo == SIGBUS))
                {
-                 printf_filtered ("\t%-16#x %s.\n", sip -> si_addr,
+                 printf_filtered ("\t%#-16lx %s.\n",
+                                  (unsigned long) sip -> si_addr,
                                   "Address of faulting memory reference");
                }
              else if ((sip -> si_signo == SIGCHLD))
index c83cbcde5b3c24acca20676fca972f557818ac3b..172f98d1a5b5374cc9c9265e76f0613f619407ca 100644 (file)
@@ -279,8 +279,13 @@ CORE_ADDR
 sparc_extract_struct_value_address (regbuf)
      char regbuf[REGISTER_BYTES];
 {
+#ifdef GDB_TARGET_IS_SPARC64
+  return extract_address (regbuf + REGISTER_BYTE (O0_REGNUM),
+                         REGISTER_RAW_SIZE (O0_REGNUM));
+#else
   return read_memory_integer (((int *)(regbuf)) [SP_REGNUM] + (16 * SPARC_INTREG_SIZE), 
                              TARGET_PTR_BIT / TARGET_CHAR_BIT);
+#endif
 }
 
 /* Find the pc saved in frame FRAME.  */
@@ -1272,7 +1277,7 @@ get_longjmp_target (pc)
    related to C++ mangling, it is done for C too.  */
 
 char *
-solaris_static_transform_name (name)
+sunpro_static_transform_name (name)
      char *name;
 {
   char *p;
@@ -1295,20 +1300,11 @@ solaris_static_transform_name (name)
 \f
 #ifdef GDB_TARGET_IS_SPARC64
 
-CORE_ADDR
-sparc64_extract_struct_value_address (regbuf)
-     char regbuf[REGISTER_BYTES];
-{
-  CORE_ADDR addr;
-
-  /* FIXME: We assume a non-leaf function.  */
-  addr = read_register (I0_REGNUM);
-  return addr;
-}
-
 /* Utilities for printing registers.
    Page numbers refer to the SPARC Architecture Manual.  */
 
+static void dump_ccreg PARAMS ((char *, int));
+
 static void
 dump_ccreg (reg, val)
      char *reg;
index 66488f8e735e35a335ff2affeca2ad3c6f626c53..e2674e6099bb35514cc5fc16d2de66b33ccc4b38 100644 (file)
@@ -593,6 +593,12 @@ define_symbol (valu, string, desc, type, objfile)
            /* This was an anonymous type that was never fixed up.  */
            goto normal;
 
+#ifdef STATIC_TRANSFORM_NAME
+         case 'X':
+           /* SunPRO (3.0 at least) static variable encoding.  */
+           goto normal;
+#endif
+
          default:
            complain (&unrecognized_cplus_name_complaint, string);
            goto normal;                /* Do *something* with it */