MCDwarf.h revision 3bce5adb32fbbe5c5549b902f4d65737f40c1499
1//===- MCDwarf.h - Machine Code Dwarf support -------------------*- 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 contains the declaration of the MCDwarfFile to support the dwarf
11// .file directive.
12// TODO: add the support needed for the .loc directive.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_MC_MCDWARF_H
17#define LLVM_MC_MCDWARF_H
18
19#include "llvm/ADT/StringRef.h"
20
21namespace llvm {
22  class MCContext;
23  class raw_ostream;
24
25  /// MCDwarfFile - Instances of this class represent the name of the dwarf
26  /// .file directive and its associated dwarf file number in the MC file,
27  /// and MCDwarfFile's are created and unique'd by the MCContext class where
28  /// the file number for each is its index into the vector of DwarfFiles (note
29  /// index 0 is not used and not a valid dwarf file number).
30  class MCDwarfFile {
31    // Name - the base name of the file without its directory path.
32    // The StringRef references memory allocated in the MCContext.
33    StringRef Name;
34
35    // DirIndex - the index into the list of directory names for this file name.
36    unsigned DirIndex;
37
38  private:  // MCContext creates and uniques these.
39    friend class MCContext;
40    MCDwarfFile(StringRef name, unsigned dirIndex)
41      : Name(name), DirIndex(dirIndex) {}
42
43    MCDwarfFile(const MCDwarfFile&);       // DO NOT IMPLEMENT
44    void operator=(const MCDwarfFile&); // DO NOT IMPLEMENT
45  public:
46    /// getName - Get the base name of this MCDwarfFile.
47    StringRef getName() const { return Name; }
48
49    /// print - Print the value to the stream \arg OS.
50    void print(raw_ostream &OS) const;
51
52    /// dump - Print the value to stderr.
53    void dump() const;
54  };
55
56  inline raw_ostream &operator<<(raw_ostream &OS, const MCDwarfFile &DwarfFile){
57    DwarfFile.print(OS);
58    return OS;
59  }
60} // end namespace llvm
61
62#endif
63