[DWARF] Fixing a bug in DWARF v5 string offsets tables where the length encoded the contribution
length excluding the table header. Instead it must encode the contribution length minus the length
field itself.
Reviewer: JDevliegehere
Differential Revision: https://reviews.llvm.org/D45922
llvm-svn: 332030
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-3.s b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-3.s
index 0ff6fdb..07c7cfd 100644
--- a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-3.s
+++ b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-3.s
@@ -71,7 +71,7 @@
.long str_CU1_dir
.debug_str_offsets_segment0_end:
# CU2's contribution
- .long .debug_str_offsets_segment1_end-.debug_str_offsets_base1
+ .long .debug_str_offsets_segment1_end-.debug_str_offsets_base1+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base1:
@@ -80,7 +80,7 @@
.long str_CU2_dir
.debug_str_offsets_segment1_end:
# The TU's contribution
- .long .debug_str_offsets_segment2_end-.debug_str_offsets_base2
+ .long .debug_str_offsets_segment2_end-.debug_str_offsets_base2+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base2:
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-4.s b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-4.s
index 36ac712..d4d5657 100644
--- a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-4.s
+++ b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-4.s
@@ -42,7 +42,7 @@
# CU1's contribution
# The length is not a multiple of 4. Check that we don't read off the
# end.
- .long .debug_str_offsets_segment0_end-.debug_str_offsets_base0
+ .long .debug_str_offsets_segment0_end-.debug_str_offsets_base0+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base0:
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-6.s b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-6.s
index 28c4a41..0a35c5e 100644
--- a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-6.s
+++ b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-invalid-6.s
@@ -70,7 +70,7 @@
.section .debug_str_offsets,"",@progbits
# CU1's contribution
- .long .debug_str_offsets_segment1_end-.debug_str_offsets_base0
+ .long .debug_str_offsets_segment1_end-.debug_str_offsets_base0+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base0:
@@ -80,7 +80,7 @@
.debug_str_offsets_segment0_end:
# CU2's contribution
# Overlapping with CU1's contribution
- .long .debug_str_offsets_segment1_end-.debug_str_offsets_base1
+ .long .debug_str_offsets_segment1_end-.debug_str_offsets_base1+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base1:
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-macho.s b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-macho.s
index f8f48ea..b2b5104 100644
--- a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-macho.s
+++ b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets-macho.s
@@ -31,7 +31,7 @@
.section __DWARF,__debug_str_offs,regular,debug
Ldebug_str_offsets:
- .long Ldebug_str_offsets_segment0_end-Ldebug_str_offsets_base0
+ .long Ldebug_str_offsets_segment0_end-Ldebug_str_offsets_base0+4
.short 5 # DWARF version
.short 0 # Padding
Ldebug_str_offsets_base0:
@@ -47,7 +47,7 @@
.long 0
# CU2's contribution (DWARF64 format)
.long 0xffffffff
- .quad Ldebug_str_offsets_segment1_end-Ldebug_str_offsets_base1
+ .quad Ldebug_str_offsets_segment1_end-Ldebug_str_offsets_base1+4
.short 5 # DWARF version
.short 0 # Padding
Ldebug_str_offsets_base1:
@@ -56,7 +56,7 @@
.quad str_CU2_dir
Ldebug_str_offsets_segment1_end:
# The TU's contribution
- .long Ldebug_str_offsets_segment2_end-Ldebug_str_offsets_base2
+ .long Ldebug_str_offsets_segment2_end-Ldebug_str_offsets_base2+4
.short 5 # DWARF version
.short 0 # Padding
Ldebug_str_offsets_base2:
@@ -250,7 +250,7 @@
#
# The .debug_str_offsets section
# COMMON: .debug_str_offsets contents:
-# COMMON-NEXT: 0x00000000: Contribution size = 28, Format = DWARF32, Version = 5
+# COMMON-NEXT: 0x00000000: Contribution size = 32, Format = DWARF32, Version = 5
# COMMON-NEXT: 0x00000008: 00000000 "Handmade DWARF producer"
# COMMON-NEXT: 0x0000000c: 00000018 "Compile_Unit_1"
# COMMON-NEXT: 0x00000010: 00000027 "/home/test/CU1"
@@ -259,10 +259,10 @@
# COMMON-NEXT: 0x0000001c: 00000075 "MyVar2"
# COMMON-NEXT: 0x00000020: 0000007c "MyVar3"
# COMMON-NEXT: 0x00000024: Gap, length = 4
-# COMMON-NEXT: 0x00000028: Contribution size = 24, Format = DWARF64, Version = 5
+# COMMON-NEXT: 0x00000028: Contribution size = 28, Format = DWARF64, Version = 5
# COMMON-NEXT: 0x00000038: 00000000 "Handmade DWARF producer"
# COMMON-NEXT: 0x00000040: 00000036 "Compile_Unit_2"
# COMMON-NEXT: 0x00000048: 00000045 "/home/test/CU2"
-# COMMON-NEXT: 0x00000050: Contribution size = 8, Format = DWARF32, Version = 5
+# COMMON-NEXT: 0x00000050: Contribution size = 12, Format = DWARF32, Version = 5
# COMMON-NEXT: 0x00000058: 00000054 "Type_Unit"
# COMMON-NEXT: 0x0000005c: 0000005e "MyStruct"
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets.s b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets.s
index 363775a..749f4f1 100644
--- a/llvm/test/DebugInfo/X86/dwarfdump-str-offsets.s
+++ b/llvm/test/DebugInfo/X86/dwarfdump-str-offsets.s
@@ -32,7 +32,7 @@
# Every unit contributes to the string_offsets table.
.section .debug_str_offsets,"",@progbits
# CU1's contribution
- .long .debug_str_offsets_segment0_end-.debug_str_offsets_base0
+ .long .debug_str_offsets_segment0_end-.debug_str_offsets_base0+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base0:
@@ -48,7 +48,7 @@
.long 0
# CU2's contribution in DWARF64 format
.long 0xffffffff
- .quad .debug_str_offsets_segment1_end-.debug_str_offsets_base1
+ .quad .debug_str_offsets_segment1_end-.debug_str_offsets_base1+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base1:
@@ -57,7 +57,7 @@
.quad str_CU2_dir
.debug_str_offsets_segment1_end:
# The TU's contribution
- .long .debug_str_offsets_segment2_end-.debug_str_offsets_base2
+ .long .debug_str_offsets_segment2_end-.debug_str_offsets_base2+4
.short 5 # DWARF version
.short 0 # Padding
.debug_str_offsets_base2:
@@ -79,7 +79,7 @@
.section .debug_str_offsets.dwo,"",@progbits
# One contribution only in a .dwo file
- .long .debug_dwo_str_offsets_segment0_end-.debug_dwo_str_offsets_base0
+ .long .debug_dwo_str_offsets_segment0_end-.debug_dwo_str_offsets_base0+4
.short 5 # DWARF version
.short 0 # Padding
.debug_dwo_str_offsets_base0:
@@ -358,7 +358,7 @@
#
# The .debug_str_offsets section
# COMMON: .debug_str_offsets contents:
-# COMMON-NEXT: 0x00000000: Contribution size = 28, Format = DWARF32, Version = 5
+# COMMON-NEXT: 0x00000000: Contribution size = 32, Format = DWARF32, Version = 5
# COMMON-NEXT: 0x00000008: 00000000 "Handmade DWARF producer"
# COMMON-NEXT: 0x0000000c: 00000018 "Compile_Unit_1"
# COMMON-NEXT: 0x00000010: 00000027 "/home/test/CU1"
@@ -367,16 +367,16 @@
# COMMON-NEXT: 0x0000001c: 00000075 "MyVar2"
# COMMON-NEXT: 0x00000020: 0000007c "MyVar3"
# COMMON-NEXT: Gap, length = 4
-# COMMON-NEXT: 0x00000028: Contribution size = 24, Format = DWARF64, Version = 5
+# COMMON-NEXT: 0x00000028: Contribution size = 28, Format = DWARF64, Version = 5
# COMMON-NEXT: 0x00000038: 00000000 "Handmade DWARF producer"
# COMMON-NEXT: 0x00000040: 00000036 "Compile_Unit_2"
# COMMON-NEXT: 0x00000048: 00000045 "/home/test/CU2"
-# COMMON-NEXT: 0x00000050: Contribution size = 8, Format = DWARF32, Version = 5
+# COMMON-NEXT: 0x00000050: Contribution size = 12, Format = DWARF32, Version = 5
# COMMON-NEXT: 0x00000058: 00000054 "Type_Unit"
# COMMON-NEXT: 0x0000005c: 0000005e "MyStruct"
#
# SPLIT: .debug_str_offsets.dwo contents:
-# SPLIT-NEXT: 0x00000000: Contribution size = 20, Format = DWARF32, Version = 5
+# SPLIT-NEXT: 0x00000000: Contribution size = 24, Format = DWARF32, Version = 5
# SPLIT-NEXT: 0x00000008: 00000000 "Handmade split DWARF producer"
# SPLIT-NEXT: 0x0000000c: 0000001e "V5_split_compile_unit"
# SPLIT-NEXT: 0x00000010: 00000034 "/home/test/splitCU"
diff --git a/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll b/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
index 4900687..2f479fa 100644
--- a/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
+++ b/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
@@ -94,7 +94,7 @@
; Check the .debug_str_offsets section header and make sure the referenced string
; has the correct offset.
; BOTH: .debug_str_offsets contents:
-; BOTH-NEXT: 0x00000000: Contribution size = 80, Format = DWARF32, Version = 5
+; BOTH-NEXT: 0x00000000: Contribution size = 84, Format = DWARF32, Version = 5
; BOTH-NEXT: 0x[[CU1_STROFF]]:
; BOTH-NEXT: {{.*:}}
; BOTH-NEXT: {{.*:}}
diff --git a/llvm/test/DebugInfo/X86/string-offsets-table.ll b/llvm/test/DebugInfo/X86/string-offsets-table.ll
index e2b856f..2234853 100644
--- a/llvm/test/DebugInfo/X86/string-offsets-table.ll
+++ b/llvm/test/DebugInfo/X86/string-offsets-table.ll
@@ -44,7 +44,7 @@
; Verify that the .debug_str_offsets section is there and that it starts
; with an 8-byte header, followed by offsets into the .debug_str section.
; MONOLITHIC: .debug_str_offsets contents:
-; MONOLITHIC-NEXT: Contribution size = 32, Format = DWARF32, Version = 5
+; MONOLITHIC-NEXT: Contribution size = 36, Format = DWARF32, Version = 5
; MONOLITHIC-NEXT: 0x00000008: 00000000
; MONOLITHIC-NEXT: 0x0000000c: [[STRING2]]
; MONOLITHIC-NEXT: 0x00000010: [[STRING3]]
@@ -91,11 +91,11 @@
; Check the string offsets sections in both the main and the .dwo files and
; verify that the extracted string offsets are referenced correctly.
; SPLIT: .debug_str_offsets contents:
-; SPLIT-NEXT: 0x00000000: Contribution size = 8, Format = DWARF32, Version = 5
+; SPLIT-NEXT: 0x00000000: Contribution size = 12, Format = DWARF32, Version = 5
; SPLIT-NEXT: 0x00000008: 00000000{{.*}}
; SPLIT-NEXT: 0x0000000c: [[STRING2SPLIT]]
; SPLIT: .debug_str_offsets.dwo contents:
-; SPLIT-NEXT: 0x00000000: Contribution size = 32, Format = DWARF32, Version = 5
+; SPLIT-NEXT: 0x00000000: Contribution size = 36, Format = DWARF32, Version = 5
; SPLIT-NEXT: 0x00000008: 00000000{{.*}}
; SPLIT-NEXT: 0x0000000c: [[STRING2DWO]]{{.*}}
; SPLIT-NEXT: 0x00000010: [[STRING3DWO]]