
The amount and format of output from `llvm-dwarfdump --verify` makes it quite difficult to know if a change to a tool that produces or modifies DWARF is causing new problems, or is fixing existing problems. This diff adds a categorized summary of issues found by the DWARF verifier, on by default, at the bottom of the error output. The change includes a new `--error-display` option with 4 settings: * `--error-display=quiet`: Only display if errors occurred, but no details or summary are printed. * `--error-display=summary`: Only display the aggregated summary of errors with no error detail. * `--error-display=details`: Only display the detailed error messages with no summary (previous behavior) * `--error-display=full`: Display both the detailed error messages and the aggregated summary of errors (the default) I changed a handful of tests that were failing due to new output, adding the flag to use the old behavior for all but a couple. For those two I added the new aggregated output to the expected output of the test. The `OutputCategoryAggregator` is a pretty simple little class that @clayborg suggested to allow code to only be run to dump detail if it's enabled, while still collating counts of the category. Knowing that the lambda passed in is only conditionally executed is pretty important (handling errors has to be done *outside* the lambda). I'm happy to move this somewhere else (and change/improve it) to be more broadly useful if folks would like. --------- Co-authored-by: Kevin Frei <freik@meta.com>
78 lines
2.4 KiB
Plaintext
78 lines
2.4 KiB
Plaintext
RUN: llvm-dwarfdump -v %p/Inputs/dwarfdump-objc.x86_64.o | FileCheck %s
|
|
RUN: not llvm-dwarfdump -error-display=details -verify %p/Inputs/dwarfdump-objc.x86_64.o | FileCheck %s --check-prefix=VERIFY
|
|
|
|
Gather some DIE indexes to verify the accelerator table contents.
|
|
CHECK: .debug_info contents
|
|
CHECK: [[TESTINTERFACE:0x[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
|
|
CHECK-NOT: DW_TAG
|
|
CHECK: DW_AT_name{{.*}}"TestInterface"
|
|
CHECK: [[READONLY:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
|
|
CHECK-NOT: DW_TAG
|
|
CHECK: DW_AT_name{{.*}}"-[TestInterface ReadOnly]"
|
|
CHECK: [[ASSIGN:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
|
|
CHECK-NOT: DW_TAG
|
|
CHECK: DW_AT_name{{.*}}"-[TestInterface Assign]"
|
|
CHECK: [[SETASSIGN:0x[0-9a-f]*]]:{{.*}}DW_TAG_subprogram
|
|
CHECK-NOT: DW_TAG
|
|
CHECK: DW_AT_name{{.*}}"-[TestInterface setAssign:]"
|
|
|
|
|
|
Check that the section header is printed correclty.
|
|
CHECK: .apple_names contents:
|
|
CHECK: Magic: 0x48415348
|
|
CHECK: Version: 0x1
|
|
CHECK: Hash function: 0x0
|
|
CHECK: Bucket count: 21
|
|
CHECK: Hashes count: 42
|
|
CHECK: HeaderData length: 12
|
|
CHECK: DIE offset base: 0
|
|
CHECK: Number of atoms: 1
|
|
|
|
CHECK: Atom 0 {
|
|
CHECK-NEXT: Type: DW_ATOM_die_offset
|
|
CHECK-NEXT: Form: DW_FORM_data4
|
|
|
|
Check that the accelerators point to the right DIEs.
|
|
CHECK: String:{{.*}}"-[TestInterface ReadOnly]"
|
|
CHECK-NOT: String
|
|
CHECK: Atom[0]: [[READONLY]]
|
|
|
|
Check that empty buckets are handled correctly.
|
|
CHECK: Bucket 3
|
|
CHECK: EMPTY
|
|
CHECK: Bucket 4
|
|
|
|
Check that the accelerators point to the right DIEs.
|
|
CHECK: String:{{.*}}"-[TestInterface Assign]"
|
|
CHECK-NOT: String
|
|
CHECK: Atom[0]: [[ASSIGN]]
|
|
CHECK: String:{{.*}}"-[TestInterface setAssign:]"
|
|
CHECK-NOT: String
|
|
CHECK: Atom[0]: [[SETASSIGN]]
|
|
|
|
Check that types are referenced correctly.
|
|
CHECK: .apple_types contents:
|
|
CHECK: String:{{.*}}"TestInterface"
|
|
CHECK-NOT: String
|
|
CHECK: Atom[0]: [[TESTINTERFACE]]
|
|
|
|
Check that an empty accelerator section is handled correctly.
|
|
CHECK: .apple_namespaces contents:
|
|
CHECK-NOT: Magic
|
|
|
|
Check ObjC specific accelerators.
|
|
CHECK: .apple_objc contents:
|
|
CHECK: String{{.*}}"TestInterface"
|
|
CHECK-NOT: String
|
|
CHECK: Atom[0]: [[READONLY]]
|
|
CHECK: Atom[0]: [[ASSIGN]]
|
|
CHECK: Atom[0]: [[SETASSIGN]]
|
|
|
|
Verify the debug info in the apple_names accelerator table.
|
|
VERIFY: Verifying .apple_names...
|
|
VERIFY-NEXT: Verifying .apple_types...
|
|
VERIFY-NEXT: Verifying .apple_namespaces...
|
|
VERIFY-NEXT: error: Section too small: cannot read buckets and hashes.
|
|
VERIFY-NEXT: Verifying .apple_objc...
|
|
VERIFY-NEXT: Errors detected.
|