From 0abc36205a39f3791342165502478bb51fe67f05 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sun, 20 Oct 2013 02:16:21 +0000 Subject: [PATCH] Emit prefix data after debug and EH directives. This ensures that the prefix data is treated as part of the function for the purpose of debug info. This provides a better debugging experience, among other things by allowing a debug info client to correctly look up a function in debug info given a function pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193042 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 8 ++++---- test/CodeGen/X86/prefixdata.ll | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 0fe341a2431..969a8dfeaea 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -462,10 +462,6 @@ void AsmPrinter::EmitFunctionHeader() { OutStreamer.EmitLabel(DeadBlockSyms[i]); } - // Emit the prefix data. - if (F->hasPrefixData()) - EmitGlobalConstant(F->getPrefixData()); - // Emit pre-function debug and/or EH information. if (DE) { NamedRegionTimer T(EHTimerName, DWARFGroupName, TimePassesIsEnabled); @@ -475,6 +471,10 @@ void AsmPrinter::EmitFunctionHeader() { NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled); DD->beginFunction(MF); } + + // Emit the prefix data. + if (F->hasPrefixData()) + EmitGlobalConstant(F->getPrefixData()); } /// EmitFunctionEntryLabel - Emit the label that is the entrypoint for the diff --git a/test/CodeGen/X86/prefixdata.ll b/test/CodeGen/X86/prefixdata.ll index 2ffa89d287d..2ec1892dd18 100644 --- a/test/CodeGen/X86/prefixdata.ll +++ b/test/CodeGen/X86/prefixdata.ll @@ -3,12 +3,14 @@ @i = linkonce_odr global i32 1 ; CHECK: f: +; CHECK-NEXT: .cfi_startproc ; CHECK-NEXT: .long 1 define void @f() prefix i32 1 { ret void } ; CHECK: g: +; CHECK-NEXT: .cfi_startproc ; CHECK-NEXT: .quad i define void @g() prefix i32* @i { ret void