[PATCH] D36018: Make .file directive to have basename only
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 9 18:06:49 PDT 2017
ThinLTO uses the source filename to compute GUIDs for globals, so this
change will increase the likelihood of GUID collisions.
My understanding is that there are still known correctness bugs associated
with GUID collisions. Maybe Mehdi or Teresa know what the current status is.
Peter
On Wed, Aug 9, 2017 at 5:44 PM, Rafael Avila de Espindola <
rafael.espindola at gmail.com> wrote:
> I think this is fine as I now see that there are other uses of
> source_filename and it is not clear that they all want just the file
> name itself.
>
> Peter, what do you think?
>
> Cheers,
> Rafael
>
> Taewook Oh via Phabricator via llvm-commits
> <llvm-commits at lists.llvm.org> writes:
>
> > twoh created this revision.
> >
> > Currently LLVM puts directory along with the filename in .file
> directive, but this behavior doesn't match gcc. There's a no clear
> description about which one is right (https://sourceware.org/
> binutils/docs/as/File.html#File), but one document (
> https://sourceware.org/gdb/current/onlinedocs/stabs/ELF-
> Linker-Relocation.html) suggests that STT_FILE symbol in elf file is
> expected to have basename only, which should have a same sting file .file
> directive according to (https://docs.oracle.com/cd/
> E26502_01/html/E28388/eoiyg.html).
> >
> > This also affects badly on the build system that uses hashing, as the
> directory info could be differnt from developer to developer even when
> they're working on same file.
> >
> >
> > https://reviews.llvm.org/D36018
> >
> > Files:
> > lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > test/CodeGen/X86/file-directive.ll
> >
> >
> > Index: test/CodeGen/X86/file-directive.ll
> > ===================================================================
> > --- /dev/null
> > +++ test/CodeGen/X86/file-directive.ll
> > @@ -0,0 +1,14 @@
> > +; RUN: llc -mtriple=x86_64-linux-gnu -filetype=asm < %s | FileCheck %s
> --check-prefix=DIRECTIVE
> > +; RUN: llc -mtriple=x86_64-linux-gnu -filetype=obj < %s | llvm-readobj
> -symbols | FileCheck %s --check-prefix=STT-FILE
> > +
> > +; DIRECTIVE: .file "foobar"
> > +; STT-FILE: Name: foobar
> > +; STT-FILE-NEXT: Value: 0x0
> > +; STT-FILE-NEXT: Size: 0
> > +; STT-FILE-NEXT: Binding: Local
> > +; STT-FILE-NEXT: Type: File
> > +; STT-FILE-NEXT: Other: 0
> > +; STT-FILE-NEXT: Section: Absolute
> > +; STT-FILE-NOT: Name:
> > +
> > +source_filename = "/path/to/foobar"
> > Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > ===================================================================
> > --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > @@ -87,6 +87,7 @@
> > #include "llvm/Support/ErrorHandling.h"
> > #include "llvm/Support/Format.h"
> > #include "llvm/Support/MathExtras.h"
> > +#include "llvm/Support/Path.h"
> > #include "llvm/Support/TargetRegistry.h"
> > #include "llvm/Support/Timer.h"
> > #include "llvm/Support/raw_ostream.h"
> > @@ -272,7 +273,8 @@
> > // don't, this at least helps the user find where a global came from.
> > if (MAI->hasSingleParameterDotFile()) {
> > // .file "foo.c"
> > - OutStreamer->EmitFileDirective(M.getSourceFileName());
> > + OutStreamer->EmitFileDirective(
> > + llvm::sys::path::filename(M.getSourceFileName()));
> > }
> >
> > GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
> >
> >
> > Index: test/CodeGen/X86/file-directive.ll
> > ===================================================================
> > --- /dev/null
> > +++ test/CodeGen/X86/file-directive.ll
> > @@ -0,0 +1,14 @@
> > +; RUN: llc -mtriple=x86_64-linux-gnu -filetype=asm < %s | FileCheck %s
> --check-prefix=DIRECTIVE
> > +; RUN: llc -mtriple=x86_64-linux-gnu -filetype=obj < %s | llvm-readobj
> -symbols | FileCheck %s --check-prefix=STT-FILE
> > +
> > +; DIRECTIVE: .file "foobar"
> > +; STT-FILE: Name: foobar
> > +; STT-FILE-NEXT: Value: 0x0
> > +; STT-FILE-NEXT: Size: 0
> > +; STT-FILE-NEXT: Binding: Local
> > +; STT-FILE-NEXT: Type: File
> > +; STT-FILE-NEXT: Other: 0
> > +; STT-FILE-NEXT: Section: Absolute
> > +; STT-FILE-NOT: Name:
> > +
> > +source_filename = "/path/to/foobar"
> > Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > ===================================================================
> > --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> > @@ -87,6 +87,7 @@
> > #include "llvm/Support/ErrorHandling.h"
> > #include "llvm/Support/Format.h"
> > #include "llvm/Support/MathExtras.h"
> > +#include "llvm/Support/Path.h"
> > #include "llvm/Support/TargetRegistry.h"
> > #include "llvm/Support/Timer.h"
> > #include "llvm/Support/raw_ostream.h"
> > @@ -272,7 +273,8 @@
> > // don't, this at least helps the user find where a global came from.
> > if (MAI->hasSingleParameterDotFile()) {
> > // .file "foo.c"
> > - OutStreamer->EmitFileDirective(M.getSourceFileName());
> > + OutStreamer->EmitFileDirective(
> > + llvm::sys::path::filename(M.getSourceFileName()));
> > }
> >
> > GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
--
--
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170809/047cb2de/attachment.html>
More information about the llvm-commits
mailing list