Correct path seperator in DWARF debug info on Windows

Yaron Keren yaron.keren at
Mon Mar 17 02:21:34 PDT 2014

DWARF info and the patch are relevant only for mingw32 toolchain, not MS
toolchain, of course.

gcc (MinGW) toolchain is inconsistent handling path seperators.
Compile m.c=

  int main() { return 0; }


  cd c:\test
  gcc m.c m.c -g -o m.exe

To get

C:\Users\user\AppData\Local\Temp\ccjRtBrL.o: In function `main':
*c:\test/m.c*:1: multiple definition of `main'
C:\Users\user\AppData\Local\Temp\cc60AUBa.o:*c:\test/m.c*:1: first defined
collect2.exe: error: ld returned 1 exit status

so \ in directory name but / between directory and filename, incosistent.

if you generate assembly

  gcc c:\test\m.c -S -g -o m.s

the assembly file
.file 1 "c:/test/m.c"
.ascii "c:\\test\\m.c\0"

gdb is also quirky, unrelated to debug info:

  gcc m.c -o m.exe
  gdb m.exe
  Reading symbols from *c:\test\m.exe*...done.
  (gdb) r
  Starting program: *c:\test/m.exe*

Back to clang, directories could be normalized to / but not the case now.
If we make an error:

  int main() { return e; }

and run clang -c -g c:/test/m.c -o m.o -target i686-pc-mingw32 we get
*c:/test/m.c*:1:21: error: use of undeclared identifier 'e'
but if we run clang -c -g c:\test\m.c -o m.o -target i686-pc-mingw32 we get
*c:\test\m.c*:1:21: error: use of undeclared identifier 'e'

so it follows the input.

In DWARF info the path sep. in directories follows input in some fields and
normalized to host \\ in others but is never normalized to / so hardcoding
/ in MCDWARF does not match this behaviour.


2014-03-17 9:32 GMT+02:00 NAKAMURA Takumi <geek4civic at>:

> Does dwarf affect "Your Windows"? I suppose MS toolchain would be
> innocent of dwarf.
> Would mingw emit '\\' as pathsep in dwarf? I'll investigate later.
> (IIRC, it wouldn't)
> I assume "preferred_separator" depends on host system. Would you
> really like to emit '\\' on Windows targeting elf?
> IMO, pathsep should be always normalized to '/' unless it would be illegal.
> 2014-03-17 16:18 GMT+09:00 Yaron Keren <yaron.keren at>:
> > The path seperator is hardcoded in MCDwarf.cpp:649 as '/'. This is worng
> on
> > Windows.
> >
> > A patch to use the correct path seperator is attached. I had to expose
> the
> > path seperator from llvm::sys::path.
> >
> > Yaron
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at
> >
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the cfe-commits mailing list