Fixed comment in header of Block Frequency Impl and added text for C++ mode.
[oota-llvm.git] / lib / DebugInfo / DWARFFormValue.cpp
index 02498733d55fb8249317e2a23df973c49e5359f3..1a1cf2452cd1a36aaf896fefd481cee86be01638 100644 (file)
@@ -26,33 +26,33 @@ template <uint8_t AddrSize, uint8_t RefAddrSize> struct FixedFormSizes {
 
 template <uint8_t AddrSize, uint8_t RefAddrSize>
 const uint8_t FixedFormSizes<AddrSize, RefAddrSize>::sizes[] = {
-  0, // 0x00 unused
-  AddrSize, // 0x01 DW_FORM_addr
-  0, // 0x02 unused
-  0, // 0x03 DW_FORM_block2
-  0, // 0x04 DW_FORM_block4
-  2, // 0x05 DW_FORM_data2
-  4, // 0x06 DW_FORM_data4
-  8, // 0x07 DW_FORM_data8
-  0, // 0x08 DW_FORM_string
-  0, // 0x09 DW_FORM_block
-  0, // 0x0a DW_FORM_block1
-  1, // 0x0b DW_FORM_data1
-  1, // 0x0c DW_FORM_flag
-  0, // 0x0d DW_FORM_sdata
-  4, // 0x0e DW_FORM_strp
-  0, // 0x0f DW_FORM_udata
+  0,           // 0x00 unused
+  AddrSize,    // 0x01 DW_FORM_addr
+  0,           // 0x02 unused
+  0,           // 0x03 DW_FORM_block2
+  0,           // 0x04 DW_FORM_block4
+  2,           // 0x05 DW_FORM_data2
+  4,           // 0x06 DW_FORM_data4
+  8,           // 0x07 DW_FORM_data8
+  0,           // 0x08 DW_FORM_string
+  0,           // 0x09 DW_FORM_block
+  0,           // 0x0a DW_FORM_block1
+  1,           // 0x0b DW_FORM_data1
+  1,           // 0x0c DW_FORM_flag
+  0,           // 0x0d DW_FORM_sdata
+  4,           // 0x0e DW_FORM_strp
+  0,           // 0x0f DW_FORM_udata
   RefAddrSize, // 0x10 DW_FORM_ref_addr
-  1, // 0x11 DW_FORM_ref1
-  2, // 0x12 DW_FORM_ref2
-  4, // 0x13 DW_FORM_ref4
-  8, // 0x14 DW_FORM_ref8
-  0, // 0x15 DW_FORM_ref_udata
-  0, // 0x16 DW_FORM_indirect
-  4, // 0x17 DW_FORM_sec_offset
-  0, // 0x18 DW_FORM_exprloc
-  0, // 0x19 DW_FORM_flag_present
-  8, // 0x20 DW_FORM_ref_sig8
+  1,           // 0x11 DW_FORM_ref1
+  2,           // 0x12 DW_FORM_ref2
+  4,           // 0x13 DW_FORM_ref4
+  8,           // 0x14 DW_FORM_ref8
+  0,           // 0x15 DW_FORM_ref_udata
+  0,           // 0x16 DW_FORM_indirect
+  4,           // 0x17 DW_FORM_sec_offset
+  0,           // 0x18 DW_FORM_exprloc
+  0,           // 0x19 DW_FORM_flag_present
+  8,           // 0x20 DW_FORM_ref_sig8
 };
 
 static uint8_t getRefAddrSize(uint8_t AddrSize, uint16_t Version) {
@@ -126,9 +126,13 @@ DWARFFormValue::extractValue(DataExtractor data, uint32_t *offset_ptr,
       Value.uval = data.getU16(offset_ptr);
       break;
     case DW_FORM_data4:
-    case DW_FORM_ref4:
+    case DW_FORM_ref4: {
+      RelocAddrMap::const_iterator AI = cu->getRelocMap()->find(*offset_ptr);
       Value.uval = data.getU32(offset_ptr);
+      if (AI != cu->getRelocMap()->end())
+        Value.uval += AI->second.second;
       break;
+    }
     case DW_FORM_data8:
     case DW_FORM_ref8:
       Value.uval = data.getU64(offset_ptr);
@@ -212,7 +216,6 @@ DWARFFormValue::skipValue(uint16_t form, DataExtractor debug_info_data,
                           uint32_t *offset_ptr, const DWARFCompileUnit *cu) {
   bool indirect = false;
   do {
-    indirect = false;
     switch (form) {
     // Blocks if inlined data that have a length field and the data bytes
     // inlined in the .debug_info