## This tests dumping a .debug_str_offsets.dwo section in a DWP file when it is ## referenced by units in different formats: one unit is DWARF32 and another ## is DWARF64, thus the .debug_str_offsets.dwo section has contributions with ## different sizes of offsets. ## This also checks that attributes in the units which use the DW_FORM_strx form ## are dumped correctly. # RUN: llvm-mc -triple x86_64 %s -filetype=obj -o - | \ # RUN: llvm-dwarfdump -v - | \ # RUN: FileCheck %s # CHECK: .debug_info.dwo contents: # CHECK: Compile Unit: # CHECK: DW_TAG_compile_unit [1] # CHECK-NEXT: DW_AT_producer [DW_FORM_strx] (indexed (00000000) string = "CU0 Producer") # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000001) string = "CU0 Name") # CHECK: Compile Unit: # CHECK: DW_TAG_compile_unit [1] # CHECK-NEXT: DW_AT_producer [DW_FORM_strx] (indexed (00000000) string = "CU1 Producer") # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000001) string = "CU1 Name") # CHECK: .debug_str.dwo contents: # CHECK-NEXT: 0x00000000: "CU0 Producer" # CHECK-NEXT: 0x0000000d: "CU0 Name" # CHECK-NEXT: 0x00000016: "CU1 Producer" # CHECK-NEXT: 0x00000023: "CU1 Name" # CHECK: .debug_str_offsets.dwo contents: # CHECK-NEXT: 0x00000000: Contribution size = 8, Format = DWARF32, Version = 4 # CHECK-NEXT: 0x00000000: 00000000 "CU0 Producer" # CHECK-NEXT: 0x00000004: 0000000d "CU0 Name" # CHECK-NEXT: 0x00000008: Contribution size = 16, Format = DWARF64, Version = 4 # CHECK-NEXT: 0x00000008: 0000000000000016 "CU1 Producer" # CHECK-NEXT: 0x00000010: 0000000000000023 "CU1 Name" .section .debug_str.dwo, "MSe", @progbits, 1 .LStr0: .asciz "CU0 Producer" .LStr1: .asciz "CU0 Name" .LStr2: .asciz "CU1 Producer" .LStr3: .asciz "CU1 Name" .section .debug_str_offsets.dwo, "e", @progbits ## The contribution of CU0 (DWARF32) .LSO0: .long .LStr0-.debug_str.dwo # 0: "CU0 Producer" .long .LStr1-.debug_str.dwo # 1: "CU0 Name" .LSO0End: ## The contribution of CU1 (DWARF64) .LSO1: .quad .LStr2-.debug_str.dwo # 0: "CU1 Producer" .quad .LStr3-.debug_str.dwo # 1: "CU1 Name" .LSO1End: .section .debug_abbrev.dwo, "e", @progbits ## For simplicity and to make the test shorter, both compilation units share ## the same abbreviations table. .LAbbr: .uleb128 0x01 # Abbrev code .uleb128 0x11 # DW_TAG_compile_unit .byte 0x00 # DW_CHILDREN_no .uleb128 0x25 # DW_AT_producer .uleb128 0x1a # DW_FORM_strx .uleb128 0x03 # DW_AT_name .uleb128 0x1a # DW_FORM_strx .uleb128 0x2131 # DW_AT_GNU_dwo_id .uleb128 0x07 # DW_FORM_data8 .byte 0x00 # EOM(1) .byte 0x00 # EOM(2) .byte 0x00 # EOM(3) .LAbbrEnd: .section .debug_info.dwo, "e", @progbits ## CU0 uses the 32-bit DWARF format. .LCU0: .long .LCU0End-.LCU0Ver # Length .LCU0Ver: .short 4 # Version .long 0 # Abbrev. offset .byte 8 # Address size .uleb128 1 # Abbrev [1] DW_TAG_compile_unit .uleb128 0 # DW_AT_producer ("CU0 Producer") .uleb128 1 # DW_AT_name ("CU0 Name") .quad 0x1100001122222222 # DW_AT_GNU_dwo_id .LCU0End: ## CU1 uses the 64-bit DWARF format. .LCU1: .long 0xffffffff # DWARF64 mark .quad .LCU1End-.LCU1Ver # Length .LCU1Ver: .short 4 # Version .quad 0 # Abbrev. offset .byte 8 # Address size .uleb128 1 # Abbrev [1] DW_TAG_compile_unit .uleb128 0 # DW_AT_producer ("CU1 Producer") .uleb128 1 # DW_AT_name ("CU1 Name") .quad 0x1100001133333333 # DW_AT_GNU_dwo_id .LCU1End: .section .debug_cu_index, "", @progbits ## Header: .long 2 # Version .long 3 # Section count .long 2 # Unit count .long 4 # Slot count ## Hash Table of Signatures: .quad 0 .quad 0 .quad 0x1100001122222222 # DWO Id of CU0 .quad 0x1100001133333333 # DWO Id of CU1 ## Parallel Table of Indexes: .long 0 .long 0 .long 1 .long 2 ## Table of Section Offsets: ## Row 0: .long 1 # DW_SECT_INFO .long 3 # DW_SECT_ABBREV .long 6 # DW_SECT_STR_OFFSETS ## Row 1, offsets of contributions of CU0: .long .LCU0-.debug_info.dwo .long .LAbbr-.debug_abbrev.dwo .long .LSO0-.debug_str_offsets.dwo ## Row 2, offsets of contributions of CU1: .long .LCU1-.debug_info.dwo .long .LAbbr-.debug_abbrev.dwo .long .LSO1-.debug_str_offsets.dwo ## Table of Section Sizes: ## Row 1, sizes of contributions of CU0: .long .LCU0End-.LCU0 .long .LAbbrEnd-.LAbbr .long .LSO0End-.LSO0 ## Row 2, sizes of contributions of CU1: .long .LCU1End-.LCU1 .long .LAbbrEnd-.LAbbr .long .LSO1End-.LSO1