mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
Debug Info: enable verifying by default and disable testing cases that fail.
1> Use DebugInfoFinder to find debug info MDNodes. 2> Add disable-debug-info-verifier to disable verifying debug info. 3> Disable verifying for testing cases that fail (will update the testing cases later on). 4> MDNodes generated by clang can have empty filename for TAG_inheritance and TAG_friend, so DIType::Verify is modified accordingly. Note that DebugInfoFinder does not list all debug info MDNode. For example, clang can generate: metadata !{i32 786468}, which will fail to verify. This MDNode is used by debug info but not included in DebugInfoFinder. This MDNode is generated as a temporary node in DIBuilder::createFunction Value *TElts[] = { GetTagConstant(VMContext, DW_TAG_base_type) }; MDNode::getTemporary(VMContext, TElts) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186634 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4e3898056e
commit
cd26257c85
@ -459,6 +459,8 @@ bool DIType::Verify() const {
|
|||||||
Tag != dwarf::DW_TAG_array_type &&
|
Tag != dwarf::DW_TAG_array_type &&
|
||||||
Tag != dwarf::DW_TAG_enumeration_type &&
|
Tag != dwarf::DW_TAG_enumeration_type &&
|
||||||
Tag != dwarf::DW_TAG_subroutine_type &&
|
Tag != dwarf::DW_TAG_subroutine_type &&
|
||||||
|
Tag != dwarf::DW_TAG_inheritance &&
|
||||||
|
Tag != dwarf::DW_TAG_friend &&
|
||||||
getFilename().empty())
|
getFilename().empty())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
#include "llvm/ADT/StringExtras.h"
|
#include "llvm/ADT/StringExtras.h"
|
||||||
#include "llvm/Analysis/Dominators.h"
|
#include "llvm/Analysis/Dominators.h"
|
||||||
#include "llvm/Assembly/Writer.h"
|
#include "llvm/Assembly/Writer.h"
|
||||||
|
#include "llvm/DebugInfo.h"
|
||||||
#include "llvm/IR/CallingConv.h"
|
#include "llvm/IR/CallingConv.h"
|
||||||
#include "llvm/IR/Constants.h"
|
#include "llvm/IR/Constants.h"
|
||||||
#include "llvm/IR/DerivedTypes.h"
|
#include "llvm/IR/DerivedTypes.h"
|
||||||
@ -66,6 +67,7 @@
|
|||||||
#include "llvm/PassManager.h"
|
#include "llvm/PassManager.h"
|
||||||
#include "llvm/Support/CFG.h"
|
#include "llvm/Support/CFG.h"
|
||||||
#include "llvm/Support/CallSite.h"
|
#include "llvm/Support/CallSite.h"
|
||||||
|
#include "llvm/Support/CommandLine.h"
|
||||||
#include "llvm/Support/ConstantRange.h"
|
#include "llvm/Support/ConstantRange.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
@ -74,6 +76,9 @@
|
|||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
|
static cl::opt<bool> DisableDebugInfoVerifier("disable-debug-info-verifier",
|
||||||
|
cl::init(false));
|
||||||
|
|
||||||
namespace { // Anonymous namespace for class
|
namespace { // Anonymous namespace for class
|
||||||
struct PreVerifier : public FunctionPass {
|
struct PreVerifier : public FunctionPass {
|
||||||
static char ID; // Pass ID, replacement for typeid
|
static char ID; // Pass ID, replacement for typeid
|
||||||
@ -202,6 +207,9 @@ namespace {
|
|||||||
|
|
||||||
visitModuleFlags(M);
|
visitModuleFlags(M);
|
||||||
|
|
||||||
|
// Verify Debug Info.
|
||||||
|
verifyDebugInfo(M);
|
||||||
|
|
||||||
// If the module is broken, abort at this time.
|
// If the module is broken, abort at this time.
|
||||||
return abortIfBroken();
|
return abortIfBroken();
|
||||||
}
|
}
|
||||||
@ -309,6 +317,8 @@ namespace {
|
|||||||
void VerifyFunctionAttrs(FunctionType *FT, AttributeSet Attrs,
|
void VerifyFunctionAttrs(FunctionType *FT, AttributeSet Attrs,
|
||||||
const Value *V);
|
const Value *V);
|
||||||
|
|
||||||
|
void verifyDebugInfo(Module &M);
|
||||||
|
|
||||||
void WriteValue(const Value *V) {
|
void WriteValue(const Value *V) {
|
||||||
if (!V) return;
|
if (!V) return;
|
||||||
if (isa<Instruction>(V)) {
|
if (isa<Instruction>(V)) {
|
||||||
@ -2185,6 +2195,28 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Verifier::verifyDebugInfo(Module &M) {
|
||||||
|
// Verify Debug Info.
|
||||||
|
if (!DisableDebugInfoVerifier) {
|
||||||
|
DebugInfoFinder Finder;
|
||||||
|
Finder.processModule(M);
|
||||||
|
|
||||||
|
for (DebugInfoFinder::iterator I = Finder.compile_unit_begin(),
|
||||||
|
E = Finder.compile_unit_end(); I != E; ++I)
|
||||||
|
Assert1(DICompileUnit(*I).Verify(), "DICompileUnit does not Verify!", *I);
|
||||||
|
for (DebugInfoFinder::iterator I = Finder.subprogram_begin(),
|
||||||
|
E = Finder.subprogram_end(); I != E; ++I)
|
||||||
|
Assert1(DISubprogram(*I).Verify(), "DISubprogram does not Verify!", *I);
|
||||||
|
for (DebugInfoFinder::iterator I = Finder.global_variable_begin(),
|
||||||
|
E = Finder.global_variable_end(); I != E; ++I)
|
||||||
|
Assert1(DIGlobalVariable(*I).Verify(),
|
||||||
|
"DIGlobalVariable does not Verify!", *I);
|
||||||
|
for (DebugInfoFinder::iterator I = Finder.type_begin(),
|
||||||
|
E = Finder.type_end(); I != E; ++I)
|
||||||
|
Assert1(DIType(*I).Verify(), "DIType does not Verify!", *I);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Implement the public interfaces to this file...
|
// Implement the public interfaces to this file...
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: llc -O2 < %s | FileCheck %s
|
; RUN: llc -O2 -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
; RUN: llc -O2 -regalloc=basic < %s | FileCheck %s
|
; RUN: llc -O2 -disable-debug-info-verifier -regalloc=basic < %s | FileCheck %s
|
||||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
target triple = "x86_64-apple-darwin10"
|
target triple = "x86_64-apple-darwin10"
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -O0 -mtriple=x86_64-apple-darwin < %s | grep DW_OP_breg7
|
; RUN: llc -O0 -mtriple=x86_64-apple-darwin -disable-debug-info-verifier < %s | grep DW_OP_breg7
|
||||||
; Use DW_OP_breg7 in variable's location expression if the variable is in a stack slot.
|
; Use DW_OP_breg7 in variable's location expression if the variable is in a stack slot.
|
||||||
|
|
||||||
%struct.SVal = type { i8*, i32 }
|
%struct.SVal = type { i8*, i32 }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -mtriple=x86_64-linux < %s | FileCheck %s
|
; RUN: llc -mtriple=x86_64-linux -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
|
|
||||||
; CHECK: DW_AT_const_value
|
; CHECK: DW_AT_const_value
|
||||||
; CHECK-NEXT: 42
|
; CHECK-NEXT: 42
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -O0 < %s | FileCheck %s
|
; RUN: llc -O0 -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
; Radar 10464995
|
; Radar 10464995
|
||||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-apple-macosx10.7.2"
|
target triple = "x86_64-apple-macosx10.7.2"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc < %s | FileCheck %s
|
; RUN: llc -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
target triple = "x86_64-apple-darwin10.0.0"
|
target triple = "x86_64-apple-darwin10.0.0"
|
||||||
; PR 9817
|
; PR 9817
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc < %s | FileCheck %s
|
; RUN: llc -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
target triple = "x86_64-apple-darwin10.0.0"
|
target triple = "x86_64-apple-darwin10.0.0"
|
||||||
; PR 9879
|
; PR 9879
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: llc < %s | FileCheck %s
|
; RUN: llc -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
; RUN: llc < %s -regalloc=basic | FileCheck %s
|
; RUN: llc -disable-debug-info-verifier < %s -regalloc=basic | FileCheck %s
|
||||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
target triple = "x86_64-apple-darwin10.0.0"
|
target triple = "x86_64-apple-darwin10.0.0"
|
||||||
;Radar 8950491
|
;Radar 8950491
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llvm-as < %s | llc -asm-verbose -O0 | grep AT_specification | count 2
|
; RUN: llvm-as -disable-debug-info-verifier < %s | llc -asm-verbose -O0 -disable-debug-info-verifier | grep AT_specification | count 2
|
||||||
; Radar 7833483
|
; Radar 7833483
|
||||||
; Do not emit AT_specification for nested function foo.
|
; Do not emit AT_specification for nested function foo.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; RUN: llc -asm-verbose -O1 -o %t < %s
|
; RUN: llc -disable-debug-info-verifier -asm-verbose -O1 -o %t < %s
|
||||||
; RUN: grep DW_AT_APPLE_omit_frame_ptr %t
|
; RUN: grep DW_AT_APPLE_omit_frame_ptr %t
|
||||||
; RUN: llc -disable-fp-elim -asm-verbose -O1 -o %t < %s
|
; RUN: llc -disable-debug-info-verifier -disable-fp-elim -asm-verbose -O1 -o %t < %s
|
||||||
; RUN: grep -v DW_AT_APPLE_omit_frame_ptr %t
|
; RUN: grep -v DW_AT_APPLE_omit_frame_ptr %t
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -mtriple=x86_64-pc-linux-gnu %s -o %t -filetype=obj
|
; RUN: llc -mtriple=x86_64-pc-linux-gnu -disable-debug-info-verifier %s -o %t -filetype=obj
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
|
|
||||||
; ModuleID = 'test.c'
|
; ModuleID = 'test.c'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -mtriple=x86_64-apple-macosx10.7 %s -o %t -filetype=obj
|
; RUN: llc -mtriple=x86_64-apple-macosx10.7 -disable-debug-info-verifier %s -o %t -filetype=obj
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
|
|
||||||
; CHECK: b_ref
|
; CHECK: b_ref
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; RUN: llc -mtriple=x86_64-apple-darwin %s -filetype=obj -o %t
|
; RUN: llc -mtriple=x86_64-apple-darwin -disable-debug-info-verifier %s -filetype=obj -o %t
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
; RUN: llc -mtriple=x86_64-apple-darwin -regalloc=basic %s -filetype=obj -o %t
|
; RUN: llc -mtriple=x86_64-apple-darwin -disable-debug-info-verifier -regalloc=basic %s -filetype=obj -o %t
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
|
|
||||||
;CHECK: DW_TAG_inlined_subroutine
|
;CHECK: DW_TAG_inlined_subroutine
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -mtriple=x86_64-macosx -darwin-gdb-compat=Disable %s -o %t -filetype=obj
|
; RUN: llc -mtriple=x86_64-macosx -disable-debug-info-verifier -darwin-gdb-compat=Disable %s -o %t -filetype=obj
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
|
|
||||||
; CHECK: DW_TAG_subprogram [9] *
|
; CHECK: DW_TAG_subprogram [9] *
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj
|
; RUN: llc -mtriple=x86_64-apple-darwin -disable-debug-info-verifier %s -o %t -filetype=obj
|
||||||
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
|
||||||
|
|
||||||
; Check that we use DW_AT_low_pc
|
; Check that we use DW_AT_low_pc
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -O0 %s -mtriple=x86_64-apple-darwin -filetype=obj -o %t
|
; RUN: llc -O0 -disable-debug-info-verifier %s -mtriple=x86_64-apple-darwin -filetype=obj -o %t
|
||||||
; RUN: llvm-dwarfdump %t | FileCheck %s
|
; RUN: llvm-dwarfdump %t | FileCheck %s
|
||||||
|
|
||||||
; rdar://13071590
|
; rdar://13071590
|
||||||
|
Loading…
Reference in New Issue
Block a user