Correct path seperator in DWARF debug info on Windows
Yaron Keren
yaron.keren at gmail.com
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; }
with
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
here
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.
Yaron
2014-03-17 9:32 GMT+02:00 NAKAMURA Takumi <geek4civic at gmail.com>:
> 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 gmail.com>:
> > 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 cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140317/46656cb8/attachment.html>
More information about the cfe-commits
mailing list