DWARF: Put all the pieces we have together and provide a single accessor to DIContext...
[oota-llvm.git] / include / llvm / DebugInfo / DIContext.h
1 //===-- DIContext.h ---------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines DIContext, an abstract data structure that holds
11 // debug information data.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_DEBUGINFO_DICONTEXT_H
16 #define LLVM_DEBUGINFO_DICONTEXT_H
17
18 #include "llvm/ADT/StringRef.h"
19
20 namespace llvm {
21
22 class raw_ostream;
23
24 /// DILineInfo - a format-neutral container for source line information.
25 class DILineInfo {
26   const char *FileName;
27   uint32_t Line;
28   uint32_t Column;
29 public:
30   DILineInfo(const char *fileName, uint32_t line, uint32_t column)
31     : FileName(fileName), Line(line), Column(column) {}
32
33   const char *getFileName() const { return FileName; }
34   uint32_t getLine() const { return Line; }
35   uint32_t getColumn() const { return Column; }
36 };
37
38 class DIContext {
39 public:
40   virtual ~DIContext();
41
42   /// getDWARFContext - get a context for binary DWARF data.
43   static DIContext *getDWARFContext(bool isLittleEndian,
44                                     StringRef infoSection,
45                                     StringRef abbrevSection,
46                                     StringRef aRangeSection = StringRef(),
47                                     StringRef lineSection = StringRef(),
48                                     StringRef stringSection = StringRef());
49
50   virtual void dump(raw_ostream &OS) = 0;
51
52   virtual DILineInfo getLineInfoForAddress(uint64_t address) = 0;
53 };
54
55 }
56
57 #endif