This is the mail archive of the archer-commits@sourceware.org mailing list for the Archer project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Merge commit 'gdb/master'


The branch, master has been updated
       via  9d53bc21654690f832ab743888c61d72b4c0dc65 (commit)
       via  dfd6b858d3152720c803247a5437232f062be31a (commit)
       via  b13cbe42377c66a0e89467e6527a41c3a4e3f665 (commit)
       via  5a52e0d91dacf2bba81dfaafb8dac48322070da8 (commit)
       via  4d04eff68db1807506f1a5cc9e7a252c51669a23 (commit)
       via  36ae52d16cc9d38cfe317a79bb5d63c624359154 (commit)
       via  6d5442015fa03f9f5e9163fbe592e7aa0e154ab2 (commit)
       via  43116f575cec6a569e9cb06c92a3c2cc5cb95eb7 (commit)
       via  8fac53967c6574e472a6d911a0bc0826b524512f (commit)
      from  5f2fa81610c7ae7067ffffacffa527019b43d400 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 9d53bc21654690f832ab743888c61d72b4c0dc65
Merge: 5f2fa81610c7ae7067ffffacffa527019b43d400 dfd6b858d3152720c803247a5437232f062be31a
Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
Date:   Mon Nov 2 22:51:54 2009 +0100

    Merge commit 'gdb/master'

commit dfd6b858d3152720c803247a5437232f062be31a
Author: Daniel Jacobowitz <dan@debian.org>
Date:   Mon Nov 2 17:28:15 2009 +0000

    	* lib/gdb.exp (gdb_expect): Fix timeout typo.

commit b13cbe42377c66a0e89467e6527a41c3a4e3f665
Author: Daniel Jacobowitz <dan@debian.org>
Date:   Mon Nov 2 17:16:14 2009 +0000

    	* elfread.c (elf_symfile_segments): Do not warn about
    	uninitialized sections outside of load segments.

commit 5a52e0d91dacf2bba81dfaafb8dac48322070da8
Author: Daniel Jacobowitz <dan@debian.org>
Date:   Mon Nov 2 15:59:01 2009 +0000

    	* gdb.base/opaque.exp: Remove duplicate tests and xyz from test name.

commit 4d04eff68db1807506f1a5cc9e7a252c51669a23
Author: Daniel Jacobowitz <dan@debian.org>
Date:   Mon Nov 2 15:53:53 2009 +0000

    	* gdb.cp/ctti.exp: Correct return values for unsigned char functions.

commit 36ae52d16cc9d38cfe317a79bb5d63c624359154
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon Nov 2 14:59:48 2009 +0000

    gdb/
    	* symfile.c (build_id_to_debug_filename): New variable debugdir.  Move
    	variables size, s and data into a new inner block.  Change xmalloc for
    	alloca, use direct BUILDID->SIZE there now.  Loop for the
    	DEBUG_FILE_DIRECTORY components.
    	(find_separate_debug_file): New variable debugdir and debugdir_end.
    	Loop for the DEBUG_FILE_DIRECTORY components.
    	(_initialize_symfile): For "debug-file-directory" use plural and note
    	one can use multiple components now.
    
    gdb/doc/
    	* gdb.texinfo (set debug-file-directory, show debug-file-directory)
    	(Auto-loading): Use plural and note one can use multiple components now.
    
    gdb/testsuite/
    	* gdb.base/sepdebug.exp: New test_different_dir call for multiple-dirs.

commit 6d5442015fa03f9f5e9163fbe592e7aa0e154ab2
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon Nov 2 14:57:02 2009 +0000

    gdb/
    	* symfile.c (find_separate_debug_file): Initialize dir, debugfile and
    	canon_name to NULL.  Change alloca to xmalloc, newly call xfree for it.
    	New label cleanup_return_debugfile, jump to it from the failure paths.

commit 43116f575cec6a569e9cb06c92a3c2cc5cb95eb7
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon Nov 2 14:55:04 2009 +0000

    gdb/
    	* symfile.c (separate_debug_file_exists): When the CRCs mismatch
    	print a warning.
    	(find_separate_debug_file): Pass in the objfile's name.
    
    gdb/testsuite/
    	* gdb.base/sepdebug.exp (CRC mismatch is reported): New test.
    	* gdb.base/sepdebug2.c: New file.

commit 8fac53967c6574e472a6d911a0bc0826b524512f
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon Nov 2 14:50:26 2009 +0000

    gdb/
    	Remove INVALID_ENTRY_POINT.
    	* frame.c (inside_entry_func): New variable entry_point.  Return 0 if
    	the entry point is not known.
    	* solib-irix.c (enable_break): Likewise.
    	* objfiles.c (init_entry_point_info): Stop using INVALID_ENTRY_POINT.
    	Initialize EI.ENTRY_POINT_P.
    	(entry_point_address): Rename to ...
    	(entry_point_address_query): ... a new function.  Use EI.ENTRY_POINT_P.
    	(entry_point_address): New function.
    	(objfile_relocate): Use EI.ENTRY_POINT_P.
    	* objfiles.h (struct entry_info): Simplify entry_point comment.  New
    	field entry_point_p.
    	(INVALID_ENTRY_POINT): Remove.
    	(entry_point_address_query): New prototype.
    	* solib-frv.c (enable_break): Check for NULL SYMFILE_OBJFILE and its
    	EI.ENTRY_POINT_P.  Return 0 if ".interp" is not found.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog                       |   47 ++++++++
 gdb/doc/ChangeLog                   |    5 +
 gdb/doc/gdb.texinfo                 |   13 ++-
 gdb/elfread.c                       |   12 ++-
 gdb/frame.c                         |    7 +-
 gdb/objfiles.c                      |   41 +++++--
 gdb/objfiles.h                      |   12 +--
 gdb/solib-frv.c                     |   41 +++++---
 gdb/solib-irix.c                    |   10 +-
 gdb/symfile.c                       |  204 +++++++++++++++++++++--------------
 gdb/testsuite/ChangeLog             |   21 ++++
 gdb/testsuite/gdb.base/opaque.exp   |   25 +----
 gdb/testsuite/gdb.base/sepdebug.exp |   23 ++++
 gdb/testsuite/gdb.base/sepdebug2.c  |   22 ++++
 gdb/testsuite/gdb.cp/ctti.exp       |    8 +-
 gdb/testsuite/lib/gdb.exp           |    2 +-
 16 files changed, 337 insertions(+), 156 deletions(-)
 create mode 100644 gdb/testsuite/gdb.base/sepdebug2.c

First 500 lines of diff:
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e364642..8fc59bb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,50 @@
+2009-11-02  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* elfread.c (elf_symfile_segments): Do not warn about
+	uninitialized sections outside of load segments.
+
+2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* symfile.c (build_id_to_debug_filename): New variable debugdir.  Move
+	variables size, s and data into a new inner block.  Change xmalloc for
+	alloca, use direct BUILDID->SIZE there now.  Loop for the
+	DEBUG_FILE_DIRECTORY components.
+	(find_separate_debug_file): New variable debugdir and debugdir_end.
+	Loop for the DEBUG_FILE_DIRECTORY components.
+	(_initialize_symfile): For "debug-file-directory" use plural and note
+	one can use multiple components now.
+
+2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* symfile.c (find_separate_debug_file): Initialize dir, debugfile and
+	canon_name to NULL.  Change alloca to xmalloc, newly call xfree for it.
+	New label cleanup_return_debugfile, jump to it from the failure paths.
+
+2009-11-02  Andrew Cagney  <cagney@gnu.org>
+
+	* symfile.c (separate_debug_file_exists): When the CRCs mismatch
+	print a warning.
+	(find_separate_debug_file): Pass in the objfile's name.
+
+2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Remove INVALID_ENTRY_POINT.
+	* frame.c (inside_entry_func): New variable entry_point.  Return 0 if
+	the entry point is not known.
+	* solib-irix.c (enable_break): Likewise.
+	* objfiles.c (init_entry_point_info): Stop using INVALID_ENTRY_POINT.
+	Initialize EI.ENTRY_POINT_P.
+	(entry_point_address): Rename to ...
+	(entry_point_address_query): ... a new function.  Use EI.ENTRY_POINT_P.
+	(entry_point_address): New function.
+	(objfile_relocate): Use EI.ENTRY_POINT_P.
+	* objfiles.h (struct entry_info): Simplify entry_point comment.  New
+	field entry_point_p.
+	(INVALID_ENTRY_POINT): Remove.
+	(entry_point_address_query): New prototype.
+	* solib-frv.c (enable_break): Check for NULL SYMFILE_OBJFILE and its
+	EI.ENTRY_POINT_P.  Return 0 if ".interp" is not found.
+
 2009-11-01  Michael Snyder  <msnyder@vmware.com>
 
 	* NEWS (New Commands): Mention record save/restore.
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index d9b5b97..912f20c 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (set debug-file-directory, show debug-file-directory)
+	(Auto-loading): Use plural and note one can use multiple components now.
+
 2009-11-01  Vladimir Prus  <vladimir@codesourcery.com>
 
 	* gdb.texinfo (GDB/MI Stack Manipulation): Make
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 2453d3a..a388bc9 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -14084,13 +14084,14 @@ name @value{GDBN} is currently using.
 @table @code
 
 @kindex set debug-file-directory
-@item set debug-file-directory @var{directory}
-Set the directory which @value{GDBN} searches for separate debugging
-information files to @var{directory}.
+@item set debug-file-directory @var{directories}
+Set the directories which @value{GDBN} searches for separate debugging
+information files to @var{directory}.  Multiple directory components can be set
+concatenating them by a directory separator.
 
 @kindex show debug-file-directory
 @item show debug-file-directory
-Show the directory @value{GDBN} searches for separate debugging
+Show the directories @value{GDBN} searches for separate debugging
 information files.
 
 @end table
@@ -19382,8 +19383,8 @@ readable, @value{GDBN} will evaluate it as a Python script.
 
 If this file does not exist, and if the parameter
 @code{debug-file-directory} is set (@pxref{Separate Debug Files}),
-then @value{GDBN} will use the file named
-@file{@var{debug-file-directory}/@var{real-name}}, where
+then @value{GDBN} will use for its each separated directory component
+@code{component} the file named @file{@code{component}/@var{real-name}}, where
 @var{real-name} is the object file's real name, as described above.
 
 Finally, if this file does not exist, then @value{GDBN} will look for
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 767dfe6..131d7d2 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -114,7 +114,17 @@ elf_symfile_segments (bfd *abfd)
 	    break;
 	  }
 
-      if (bfd_get_section_size (sect) > 0 && j == num_segments)
+      /* We should have found a segment for every non-empty section.
+	 If we haven't, we will not relocate this section by any
+	 offsets we apply to the segments.  As an exception, do not
+	 warn about SHT_NOBITS sections; in normal ELF execution
+	 environments, SHT_NOBITS means zero-initialized and belongs
+	 in a segment, but in no-OS environments some tools (e.g. ARM
+	 RealView) use SHT_NOBITS for uninitialized data.  Since it is
+	 uninitialized, it doesn't need a program header.  Such
+	 binaries are not relocatable.  */
+      if (bfd_get_section_size (sect) > 0 && j == num_segments
+	  && (bfd_get_section_flags (abfd, sect) & SEC_LOAD) != 0)
 	warning (_("Loadable segment \"%s\" outside of ELF segments"),
 		 bfd_section_name (abfd, sect));
     }
diff --git a/gdb/frame.c b/gdb/frame.c
index 02a9bd1..cd28fa4 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1650,7 +1650,12 @@ inside_main_func (struct frame_info *this_frame)
 static int
 inside_entry_func (struct frame_info *this_frame)
 {
-  return (get_frame_func (this_frame) == entry_point_address ());
+  CORE_ADDR entry_point;
+
+  if (!entry_point_address_query (&entry_point))
+    return 0;
+
+  return get_frame_func (this_frame) == entry_point;
 }
 
 /* Return a structure containing various interesting information about
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 760aced..0425d7a 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -294,29 +294,34 @@ init_entry_point_info (struct objfile *objfile)
       /* Executable file -- record its entry point so we'll recognize
          the startup file because it contains the entry point.  */
       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
+      objfile->ei.entry_point_p = 1;
     }
   else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC
 	   && bfd_get_start_address (objfile->obfd) != 0)
-    /* Some shared libraries may have entry points set and be
-       runnable.  There's no clear way to indicate this, so just check
-       for values other than zero.  */
-    objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);    
+    {
+      /* Some shared libraries may have entry points set and be
+	 runnable.  There's no clear way to indicate this, so just check
+	 for values other than zero.  */
+      objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);    
+      objfile->ei.entry_point_p = 1;
+    }
   else
     {
       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
-      objfile->ei.entry_point = INVALID_ENTRY_POINT;
+      objfile->ei.entry_point_p = 0;
     }
 }
 
-/* Get current entry point address.  */
+/* If there is a valid and known entry point, function fills *ENTRY_P with it
+   and returns non-zero; otherwise it returns zero.  */
 
-CORE_ADDR
-entry_point_address (void)
+int
+entry_point_address_query (CORE_ADDR *entry_p)
 {
   struct gdbarch *gdbarch;
   CORE_ADDR entry_point;
 
-  if (symfile_objfile == NULL)
+  if (symfile_objfile == NULL || !symfile_objfile->ei.entry_point_p)
     return 0;
 
   gdbarch = get_objfile_arch (symfile_objfile);
@@ -332,7 +337,21 @@ entry_point_address (void)
      symbol table.  */
   entry_point = gdbarch_addr_bits_remove (gdbarch, entry_point);
 
-  return entry_point;
+  *entry_p = entry_point;
+  return 1;
+}
+
+/* Get current entry point address.  Call error if it is not known.  */
+
+CORE_ADDR
+entry_point_address (void)
+{
+  CORE_ADDR retval;
+
+  if (!entry_point_address_query (&retval))
+    error (_("Entry point address is not known."));
+
+  return retval;
 }
 
 /* Create the terminating entry of OBJFILE's minimal symbol table.
@@ -702,7 +721,7 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
      to be out of order.  */
   msymbols_sort (objfile);
 
-  if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
+  if (objfile->ei.entry_point_p)
     {
       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
 	 only as a fallback.  */
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index b78e158..97e6b55 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -100,15 +100,11 @@ struct objfile_data;
 
 struct entry_info
   {
-
-    /* The value we should use for this objects entry point.
-       The illegal/unknown value needs to be something other than 0, ~0
-       for instance, which is much less likely than 0. */
-
+    /* The relocated value we should use for this objfile entry point.  */
     CORE_ADDR entry_point;
 
-#define INVALID_ENTRY_POINT (~0)	/* ~0 will not be in any file, we hope.  */
-
+    /* Set to 1 iff ENTRY_POINT contains a valid value.  */
+    unsigned entry_point_p : 1;
   };
 
 /* Sections in an objfile.  The section offsets are stored in the
@@ -447,6 +443,8 @@ extern struct gdbarch *get_objfile_arch (struct objfile *);
 
 extern void init_entry_point_info (struct objfile *);
 
+extern int entry_point_address_query (CORE_ADDR *entry_p);
+
 extern CORE_ADDR entry_point_address (void);
 
 extern int build_objfile_section_table (struct objfile *);
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index b8d5528..1a22735 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -822,30 +822,43 @@ enable_break (void)
      may have changed since the last time we ran the program.  */
   remove_solib_event_breakpoints ();
 
-  /* Check for the presence of a .interp section.  If there is no
-     such section, the executable is statically linked.  */
-
-  interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
-
-  if (interp_sect)
+  if (symfile_objfile == NULL)
     {
-      enable_break1_done = 1;
-      create_solib_event_breakpoint (target_gdbarch,
-				     symfile_objfile->ei.entry_point);
+      if (solib_frv_debug)
+	fprintf_unfiltered (gdb_stdlog,
+			    "enable_break: No symbol file found.\n");
+      return 0;
+    }
 
+  if (!symfile_objfile->ei.entry_point_p)
+    {
       if (solib_frv_debug)
 	fprintf_unfiltered (gdb_stdlog,
-			    "enable_break: solib event breakpoint placed at entry point: %s\n",
-			    hex_string_custom
-			      (symfile_objfile->ei.entry_point, 8));
+			    "enable_break: Symbol file has no entry point.\n");
+      return 0;
     }
-  else
+
+  /* Check for the presence of a .interp section.  If there is no
+     such section, the executable is statically linked.  */
+
+  interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
+
+  if (interp_sect == NULL)
     {
       if (solib_frv_debug)
 	fprintf_unfiltered (gdb_stdlog,
-	                    "enable_break: No .interp section found.\n");
+			    "enable_break: No .interp section found.\n");
+      return 0;
     }
 
+  enable_break1_done = 1;
+  create_solib_event_breakpoint (target_gdbarch,
+				 symfile_objfile->ei.entry_point);
+
+  if (solib_frv_debug)
+    fprintf_unfiltered (gdb_stdlog,
+			"enable_break: solib event breakpoint placed at entry point: %s\n",
+			hex_string_custom (symfile_objfile->ei.entry_point, 8));
   return 1;
 }
 
diff --git a/gdb/solib-irix.c b/gdb/solib-irix.c
index 13a3e3d..219e7d9 100644
--- a/gdb/solib-irix.c
+++ b/gdb/solib-irix.c
@@ -369,11 +369,13 @@ enable_break (void)
     {
       struct frame_info *frame = get_current_frame ();
       struct address_space *aspace = get_frame_address_space (frame);
+      CORE_ADDR entry_point;
 
-      base_breakpoint
-	= deprecated_insert_raw_breakpoint (target_gdbarch,
-					    aspace,
-					    entry_point_address ());
+      if (!entry_point_address_query (&entry_point))
+	return 0;
+
+      base_breakpoint = deprecated_insert_raw_breakpoint (target_gdbarch,
+							  aspace, entry_point);
 
       if (base_breakpoint != NULL)
 	return 1;
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 5ace773..1e57c69 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1218,35 +1218,59 @@ build_id_verify (const char *filename, struct build_id *check)
 static char *
 build_id_to_debug_filename (struct build_id *build_id)
 {
-  char *link, *s, *retval = NULL;
-  gdb_byte *data = build_id->data;
-  size_t size = build_id->size;
+  char *link, *debugdir, *retval = NULL;
 
   /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
-  link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
-		  + 2 * size + (sizeof ".debug" - 1) + 1);
-  s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
-  if (size > 0)
-    {
-      size--;
-      s += sprintf (s, "%02x", (unsigned) *data++);
-    }
-  if (size > 0)
-    *s++ = '/';
-  while (size-- > 0)
-    s += sprintf (s, "%02x", (unsigned) *data++);
-  strcpy (s, ".debug");
-
-  /* lrealpath() is expensive even for the usually non-existent files.  */
-  if (access (link, F_OK) == 0)
-    retval = lrealpath (link);
-  xfree (link);
-
-  if (retval != NULL && !build_id_verify (retval, build_id))
+  link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
+		 + 2 * build_id->size + (sizeof ".debug" - 1) + 1);
+
+  /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
+     cause "/.build-id/..." lookups.  */
+
+  debugdir = debug_file_directory;
+  do
     {
-      xfree (retval);
-      retval = NULL;
+      char *s, *debugdir_end;
+      gdb_byte *data = build_id->data;
+      size_t size = build_id->size;
+
+      while (*debugdir == DIRNAME_SEPARATOR)
+	debugdir++;
+
+      debugdir_end = strchr (debugdir, DIRNAME_SEPARATOR);
+      if (debugdir_end == NULL)
+	debugdir_end = &debugdir[strlen (debugdir)];
+
+      memcpy (link, debugdir, debugdir_end - debugdir);
+      s = &link[debugdir_end - debugdir];
+      s += sprintf (s, "/.build-id/");
+      if (size > 0)
+	{
+	  size--;
+	  s += sprintf (s, "%02x", (unsigned) *data++);
+	}
+      if (size > 0)
+	*s++ = '/';
+      while (size-- > 0)
+	s += sprintf (s, "%02x", (unsigned) *data++);
+      strcpy (s, ".debug");
+
+      /* lrealpath() is expensive even for the usually non-existent files.  */
+      if (access (link, F_OK) == 0)
+	retval = lrealpath (link);
+
+      if (retval != NULL && !build_id_verify (retval, build_id))
+	{
+	  xfree (retval);
+	  retval = NULL;
+	}
+
+      if (retval != NULL)
+	break;
+
+      debugdir = debugdir_end;
     }
+  while (*debugdir != 0);
 
   return retval;
 }
@@ -1283,7 +1307,8 @@ get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
 }
 
 static int
-separate_debug_file_exists (const char *name, unsigned long crc)
+separate_debug_file_exists (const char *name, unsigned long crc,
+			    const char *parent_name)
 {
   unsigned long file_crc = 0;
   bfd *abfd;
@@ -1303,7 +1328,15 @@ separate_debug_file_exists (const char *name, unsigned long crc)
 
   bfd_close (abfd);
 
-  return crc == file_crc;
+  if (crc != file_crc)
+    {
+      warning (_("the debug information found in \"%s\""
+		 " does not match \"%s\" (CRC mismatch).\n"),
+	       name, parent_name);
+      return 0;
+    }
+
+  return 1;
 }
 
 char *debug_file_directory = NULL;
@@ -1324,11 +1357,10 @@ static char *
 find_separate_debug_file (struct objfile *objfile)
 {
   asection *sect;
-  char *basename;
-  char *dir;
-  char *debugfile;
-  char *name_copy;
-  char *canon_name;
+  char *basename, *name_copy, *debugdir;
+  char *dir = NULL;
+  char *debugfile = NULL;
+  char *canon_name = NULL;
   bfd_size_type debuglink_size;
   unsigned long crc32;
   int i;
@@ -1355,7 +1387,9 @@ find_separate_debug_file (struct objfile *objfile)
   basename = get_debug_link_info (objfile, &crc32);
 
   if (basename == NULL)
-    return NULL;
+    /* There's no separate debug info, hence there's no way we could
+       load it => no warning.  */
+    goto cleanup_return_debugfile;
 
   dir = xstrdup (objfile->name);
 
@@ -1377,24 +1411,19 @@ find_separate_debug_file (struct objfile *objfile)
   if (canon_name && strlen (canon_name) > i)
     i = strlen (canon_name);
 
-  debugfile = alloca (strlen (debug_file_directory) + 1
-                      + i
-                      + strlen (DEBUG_SUBDIRECTORY)
-                      + strlen ("/")
-                      + strlen (basename)
-                      + 1);
+  debugfile = xmalloc (strlen (debug_file_directory) + 1
+		       + i
+		       + strlen (DEBUG_SUBDIRECTORY)
+		       + strlen ("/")
+		       + strlen (basename)
+		       + 1);
 
   /* First try in the same directory as the original file.  */


hooks/post-receive
--
Repository for Project Archer.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]