This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

[PATCH] use IS_ABSOLUTE_PATH and friends


This patch changes the DWARF2 code to use the appropriate macros from
filenames.h.  Without this change, a mingw32-hosted compiler and a
linux-hosted (unix-hosted, really) compiler for the same target produce
different debug information when given the same compilation line.  With
this patch, the debug information is the same.

Built and tested on i686-pc-linux-gnu, no regressions.  OK?

-Nathan


2006-10-24  Nathan Froyd  <froydnj@codesourcery.com>

	* dwarf2out.c (gen_compile_unit_die): Use IS_ABSOLUTE_PATH.
	(file_table_relative_p): Likewise.
	(dwarf2out_finish): Likewise.
	(file_name_acquire): Use DIR_SEPARATOR and DIR_SEPARATOR_2.

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c	(revision 117194)
+++ gcc/dwarf2out.c	(working copy)
@@ -7657,7 +7657,7 @@ file_name_acquire (void ** slot, void *d
 
   /* Skip all leading "./".  */
   f = d->filename;
-  while (f[0] == '.' && f[1] == '/')
+  while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
     f += 2;
   
   /* Create a new array entry.  */
@@ -7666,7 +7666,19 @@ file_name_acquire (void ** slot, void *d
   fi->file_idx = d;
   
   /* Search for the file name part.  */
-  f = strrchr (f, '/');
+  f = strrchr (f, DIR_SEPARATOR);
+#if defined (DIR_SEPARATOR_2)
+  {
+    char *g = strrchr (files[i].path, DIR_SEPARATOR_2);
+
+    if (g != NULL)
+      {
+	if (f == NULL || f < g)
+	  f = g;
+      }
+  }
+#endif
+
   fi->fname = f == NULL ? fi->path : f + 1;
   return 1;
 }
@@ -12288,7 +12300,7 @@ gen_compile_unit_die (const char *filena
     {
       add_name_attribute (die, filename);
       /* Don't add cwd for <built-in>.  */
-      if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
+      if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
 	add_comp_dir_attribute (die);
     }
 
@@ -14188,7 +14200,7 @@ file_table_relative_p (void ** slot, voi
 {
   bool *p = param;
   struct dwarf_file_data *d = *slot;
-  if (d->emitted_number && d->filename[0] != DIR_SEPARATOR)
+  if (d->emitted_number && !IS_ABSOLUTE_PATH (d->filename))
     {
       *p = true;
       return 0;
@@ -14208,7 +14220,7 @@ dwarf2out_finish (const char *filename)
   /* Add the name for the main input file now.  We delayed this from
      dwarf2out_init to avoid complications with PCH.  */
   add_name_attribute (comp_unit_die, filename);
-  if (filename[0] != DIR_SEPARATOR)
+  if (!IS_ABSOLUTE_PATH (filename))
     add_comp_dir_attribute (comp_unit_die);
   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
     {


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