[llvm] r310642 - Make .file directive to have basename only

Taewook Oh via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 10 11:17:11 PDT 2017

Author: twoh
Date: Thu Aug 10 11:17:11 2017
New Revision: 310642

URL: http://llvm.org/viewvc/llvm-project?rev=310642&view=rev
Make .file directive to have basename only

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.

Reviewers: pcc, mehdi_amini

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D36018


Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=310642&r1=310641&r2=310642&view=diff
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Thu Aug 10 11:17:11 2017
@@ -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 @@ bool AsmPrinter::doInitialization(Module
   // 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>();

Added: llvm/trunk/test/CodeGen/X86/file-directive.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/file-directive.ll?rev=310642&view=auto
--- llvm/trunk/test/CodeGen/X86/file-directive.ll (added)
+++ llvm/trunk/test/CodeGen/X86/file-directive.ll Thu Aug 10 11:17:11 2017
@@ -0,0 +1,13 @@
+; 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
+source_filename = "/path/to/foobar"

More information about the llvm-commits mailing list