llvm-project/llvm/test/DebugInfo/dwarfdump-accel.test
Kevin Frei bfdd78233f
Aggregate errors from llvm-dwarfdump --verify (#79648)
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>
2024-02-01 08:47:11 -08:00

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.