From 9f5f47d34038f103ab76c9b52688aa843ecd1603 Mon Sep 17 00:00:00 2001 From: Taewook Oh Date: Thu, 10 Aug 2017 18:17:11 +0000 Subject: [PATCH] Make .file directive to have basename only Summary: 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310642 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 4 +++- test/CodeGen/X86/file-directive.ll | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/X86/file-directive.ll diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 1ea82f84a54..5e002e70929 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/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 @@ bool AsmPrinter::doInitialization(Module &M) { // 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(); diff --git a/test/CodeGen/X86/file-directive.ll b/test/CodeGen/X86/file-directive.ll new file mode 100644 index 00000000000..4b25a0909ea --- /dev/null +++ b/test/CodeGen/X86/file-directive.ll @@ -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" -- 2.11.0