Home | History | Annotate | Download | only in DWARF
      1 //===-- DWARFDebugLoc.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 #ifndef LLVM_LIB_DEBUGINFO_DWARFDEBUGLOC_H
     11 #define LLVM_LIB_DEBUGINFO_DWARFDEBUGLOC_H
     12 
     13 #include "llvm/ADT/SmallVector.h"
     14 #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
     15 #include "llvm/Support/DataExtractor.h"
     16 
     17 namespace llvm {
     18 
     19 class raw_ostream;
     20 
     21 class DWARFDebugLoc {
     22   /// A single location within a location list.
     23   struct Entry {
     24     /// The beginning address of the instruction range.
     25     uint64_t Begin;
     26     /// The ending address of the instruction range.
     27     uint64_t End;
     28     /// The location of the variable within the specified range.
     29     SmallVector<unsigned char, 4> Loc;
     30   };
     31 
     32   /// A list of locations that contain one variable.
     33   struct LocationList {
     34     /// The beginning offset where this location list is stored in the debug_loc
     35     /// section.
     36     unsigned Offset;
     37     /// All the locations in which the variable is stored.
     38     SmallVector<Entry, 2> Entries;
     39   };
     40 
     41   typedef SmallVector<LocationList, 4> LocationLists;
     42 
     43   /// A list of all the variables in the debug_loc section, each one describing
     44   /// the locations in which the variable is stored.
     45   LocationLists Locations;
     46 
     47   /// A map used to resolve binary relocations.
     48   const RelocAddrMap &RelocMap;
     49 
     50 public:
     51   DWARFDebugLoc(const RelocAddrMap &LocRelocMap) : RelocMap(LocRelocMap) {}
     52   /// Print the location lists found within the debug_loc section.
     53   void dump(raw_ostream &OS) const;
     54   /// Parse the debug_loc section accessible via the 'data' parameter using the
     55   /// specified address size to interpret the address ranges.
     56   void parse(DataExtractor data, unsigned AddressSize);
     57 };
     58 
     59 class DWARFDebugLocDWO {
     60   struct Entry {
     61     uint64_t Start;
     62     uint32_t Length;
     63     SmallVector<unsigned char, 4> Loc;
     64   };
     65 
     66   struct LocationList {
     67     unsigned Offset;
     68     SmallVector<Entry, 2> Entries;
     69   };
     70 
     71   typedef SmallVector<LocationList, 4> LocationLists;
     72 
     73   LocationLists Locations;
     74 
     75 public:
     76   void parse(DataExtractor data);
     77   void dump(raw_ostream &OS) const;
     78 };
     79 }
     80 
     81 #endif
     82