| ## 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 |