PR gas/2582

* dwarf2dbg.c (INSERT_DIR_SEPARATOR): New macro.  Handles the insertion of a
  directory separator character into a string at a given offset.  Uses
  heuristics to decide when to use a backslash character rather than a
  forward-slash character.
  (dwarf2_directive_loc): Use the macro.
  (out_debug_info): Likewise.
This commit is contained in:
Nick Clifton 2006-05-05 16:55:28 +00:00
parent ef75f0145e
commit 56487c5507
2 changed files with 35 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2006-05-05 Nick Clifton <nickc@redhat.com>
PR gas/2582
* dwarf2dbg.c (INSERT_DIR_SEPARATOR): New macro. Handles the
insertion of a directory separator character into a string at a
given offset. Uses heuristics to decide when to use a backslash
character rather than a forward-slash character.
(dwarf2_directive_loc): Use the macro.
(out_debug_info): Likewise.
2006-05-05 Thiemo Seufer <ths@mips.com>
David Ung <davidu@mips.com>

View File

@ -46,6 +46,29 @@
#include "dwarf2dbg.h"
#include <filenames.h>
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
/* We need to decide which character to use as a directory separator.
Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
necessarily mean that the backslash character is the one to use.
Some environments, eg Cygwin, can support both naming conventions.
So we use the heuristic that we only need to use the backslash if
the path is an absolute path starting with a DOS style drive
selector. eg C: or D: */
# define INSERT_DIR_SEPARATOR(string, offset) \
do \
{ \
if (offset > 1 \
&& string[0] != 0 \
&& string[1] == ':') \
string [offset] = '\\'; \
else \
string [offset] = '/'; \
} \
while (0)
#else
# define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
#endif
#ifndef DWARF2_FORMAT
# define DWARF2_FORMAT() dwarf2_format_32bit
#endif
@ -569,7 +592,7 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
memcpy (cp, dirs[files[filenum].dir], dir_len);
cp[dir_len] = '/';
INSERT_DIR_SEPARATOR (cp, dir_len);
memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
cp[dir_len + file_len + 1] = '\0';
listing_source_file (cp);
@ -1464,7 +1487,7 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
len = strlen (dirs[files[1].dir]);
p = frag_more (len + 1);
memcpy (p, dirs[files[1].dir], len);
p[len] = '/';
INSERT_DIR_SEPARATOR (p, len);
}
len = strlen (files[1].filename) + 1;
p = frag_more (len);