Skip to content

Commit

Permalink
[llvm-readobj] Provide Hash Histogram for all ELFDumper implementations
Browse files Browse the repository at this point in the history
Previously, the GNUELFDumper was the only implementer for Hash Histograms.
This patch moves the implementation for printHashHistogram and
printGnuHashHistogram into the ELFDumper base class, and allows each
derived class to specialize how it outputs that information.

This change also prevents the JSONELFDumper from emitting invalid JSON,
since the shared implementation in LLVMELFDumper no longer emits a
warning message to the output stream.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D137096
  • Loading branch information
ilovepi committed Mar 21, 2023
1 parent 89359df commit 0d3f7d2
Show file tree
Hide file tree
Showing 2 changed files with 221 additions and 128 deletions.
63 changes: 63 additions & 0 deletions llvm/test/tools/llvm-readobj/ELF/hash-histogram.test
Expand Up @@ -12,6 +12,10 @@
# RUN: yaml2obj --docnum=1 -D BITS=64 %s -o %t1-64.o
# RUN: llvm-readelf --elf-hash-histogram %t1-64.o | FileCheck %s --check-prefix=HIST

## Check that LLVM output has the expected format.
# RUN: llvm-readobj --elf-hash-histogram %t1-32.o | FileCheck %s --check-prefix=LLVM-HIST
# RUN: llvm-readobj --elf-hash-histogram %t1-64.o | FileCheck %s --check-prefix=LLVM-HIST

# HIST: Histogram for bucket list length (total of 3 buckets)
# HIST-NEXT: Length Number % of total Coverage
# HIST-NEXT: 0 2 ( 66.7%) 0.0%
Expand All @@ -26,6 +30,65 @@
# HIST-NEXT: 3 1 ( 33.3%) 100.0%
# HIST-NOT: {{.}}

# LLVM-HIST: HashHistogram {
# LLVM-HIST-NEXT: TotalBuckets: 3
# LLVM-HIST-NEXT: Chains [
# LLVM-HIST-NEXT: Chain {
# LLVM-HIST-NEXT: Length: 0
# LLVM-HIST-NEXT: Count: 2
# LLVM-HIST-NEXT: Percentage: 66.7
# LLVM-HIST-NEXT: Coverage: 0.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Chain {
# LLVM-HIST-NEXT: Length: 1
# LLVM-HIST-NEXT: Count: 0
# LLVM-HIST-NEXT: Percentage: 0.0
# LLVM-HIST-NEXT: Coverage: 0.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Chain {
# LLVM-HIST-NEXT: Length: 2
# LLVM-HIST-NEXT: Count: 0
# LLVM-HIST-NEXT: Percentage: 0.0
# LLVM-HIST-NEXT: Coverage: 0.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Chain {
# LLVM-HIST-NEXT: Length: 3
# LLVM-HIST-NEXT: Count: 1
# LLVM-HIST-NEXT: Percentage: 33.3
# LLVM-HIST-NEXT: Coverage: 100.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: ]
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: GnuHashHistogram {
# LLVM-HIST-NEXT: TotalBuckets: 3
# LLVM-HIST-NEXT: Buckets [
# LLVM-HIST-NEXT: Bucket {
# LLVM-HIST-NEXT: Length: 0
# LLVM-HIST-NEXT: Count: 1
# LLVM-HIST-NEXT: Percentage: 33.3
# LLVM-HIST-NEXT: Coverage: 0.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Bucket {
# LLVM-HIST-NEXT: Length: 1
# LLVM-HIST-NEXT: Count: 1
# LLVM-HIST-NEXT: Percentage: 33.3
# LLVM-HIST-NEXT: Coverage: 25.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Bucket {
# LLVM-HIST-NEXT: Length: 2
# LLVM-HIST-NEXT: Count: 0
# LLVM-HIST-NEXT: Percentage: 0.0
# LLVM-HIST-NEXT: Coverage: 25.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: Bucket {
# LLVM-HIST-NEXT: Length: 3
# LLVM-HIST-NEXT: Count: 1
# LLVM-HIST-NEXT: Percentage: 33.3
# LLVM-HIST-NEXT: Coverage: 100.0
# LLVM-HIST-NEXT: }
# LLVM-HIST-NEXT: ]
# LLVM-HIST-NEXT: }

--- !ELF
FileHeader:
Class: ELFCLASS[[BITS]]
Expand Down

0 comments on commit 0d3f7d2

Please sign in to comment.