# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o - | \ # RUN: not llvm-dwarfdump -debug-cu-index -debug-tu-index --verify - | FileCheck %s # FIXME: The verifier should probably be handled to verify the hash table # itself - in which case this test would need to be updated to have a correct # hash table (currently hand crafted with no attempt at correct allocation of # hashes to buckets) - and probably to verify that the section ranges apply to # sections that exist, which currently they don't # This tests that an index that describes units as being in overlapping # sections is invalid (this was observed in the wild due to overflow due to the # 32 bit limit of the indexes (a DWARF spec bug - there should be a 64 bit # version of the index format with 64 bit offsets/sizes)) - but Type Units will # generally share all the sections other than the info section with each other # (and with their originating CU) since the dwo format has no way to describe # which part of non-info-section contributions are used by which units, so # they're all shared. So demonstrate that the TU index ignores non-info overlap, # but the CU index diagnoses such overlap (in the abbrev section, in this case) # This doesn't currently check for info section overlap between the CU and TU # index, but that could be an extension of this work in the future. # CHECK: Verifying .debug_cu_index... # CHECK: error: overlapping index entries for entries 0x0000000000000001 and 0x0000000000000002 for column DW_SECT_ABBREV # CHECK: Verifying .debug_tu_index... # CHECK: error: overlapping index entries for entries 0x0000000000000001 and 0x0000000000000003 for column DW_SECT_INFO .section .debug_cu_index, "", @progbits ## Header: .long 5 # Version .long 2 # Section count .long 3 # Unit count .long 4 # Slot count ## Hash Table of Signatures: .quad 0x0000000000000001 .quad 0x0000000000000002 .quad 0x0000000000000003 .quad 0 ## Parallel Table of Indexes: .long 1 .long 2 .long 3 .long 0 ## Table of Section Offsets: ## Row 0: .long 1 # DW_SECT_INFO .long 3 # DW_SECT_ABBREV ## Row 1: .long 0x1 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Row 2: .long 0x2 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Row 3: .long 0x1 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Table of Section Sizes: .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo .section .debug_tu_index, "", @progbits ## Header: .long 5 # Version .long 2 # Section count .long 3 # Unit count .long 4 # Slot count ## Hash Table of Signatures: .quad 0x0000000000000001 .quad 0x0000000000000002 .quad 0x0000000000000003 .quad 0 ## Parallel Table of Indexes: .long 1 .long 2 .long 3 .long 0 ## Table of Section Offsets: ## Row 0: .long 1 # DW_SECT_INFO .long 3 # DW_SECT_ABBREV ## Row 1: .long 0x1 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Row 2: .long 0x2 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Row 3: .long 0x1 # Offset in .debug_info.dwo .long 0x1 # Offset in .debug_abbrev.dwo ## Table of Section Sizes: .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo .long 0x1 # Size in .debug_info.dwo .long 0x1 # Size in .debug_abbrev.dwo