[PATCH] D26405: Add the ability to dump hex bytes with optional offsets and ASCII bytes.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 8 10:30:13 PST 2016


Ironically enough, I noticed that the implementation of `printBinaryImpl`
uses some lower-cased variables.  I'm not sure if I wrote that or someone
else, but either way, I guess don't take it as an indication that it's ok.
That's still wrong, even if it was me :)

On Tue, Nov 8, 2016 at 10:25 AM Zachary Turner <zturner at google.com> wrote:

> zturner added a comment.
>
> Just a tip.  If you wrap the block in triple backticks it will show up in
> a fixed-width font in phabricator (see below for an example)
>
> That aside, this looks pretty good, but we have this functionality in a
> couple of places in LLVM already.  It would be nice to centralize.  Also,
> this is just a personal preference, but I kind of prefer the way the
> existing implementations format this.  Maybe you could look at the existing
> implementations and if you prefer it as well, move the code for them over
> here?
>
> Here's a sample of what our current output looks like:
>
>   bin\llvm-pdbdump raw -stream-data=1
> d:\src\llvm\test\debuginfo\pdb\inputs\empty.pdb
>   ...
>         0000: 942E3101 E207E554 01000000 0B355641  |..1....T.....5VA|
>         0010: 86A0A249 896F9988 FAE52FF0 22000000  |...I.o..../."...|
>         0020: 2F4C696E 6B496E66 6F002F6E 616D6573  |/LinkInfo./names|
>         0030: 002F7372 632F6865 61646572 626C6F63  |./src/headerbloc|
>         0040: 6B000300 00000600 00000100 00001A00  |k...............|
>         0050: 00000000 00001100 00000900 00000A00  |................|
>         0060: 00000D00 00000000 00000500 00000000  |................|
>         0070: 00004191 3201                        |..A.2.|
>
> The code for this is in `ScopedPrinter::printBinaryImpl`.
>
> Even if we don't combine the two right away, I still prefer this style, so
> it would be nice if the API matched this style closely enough that it would
> be possible to have `printBinaryBlock` delegate to your function in the
> future with only minor changes.
>
> Some limitations of the existing implementation:
>
> 1. Doesn't allow configurable line length.  It's always 16-bytes per line.
> 2. Doesn't allow configurable field-width.  Always 4-bytes per field.
> 3. Doesn't allow prefixing the address with `0x` or left-padding with
> zeros.
>
> Feel free to take on as much or as little of this as you think is useful.
> But I think we should at least be consistent with the output style.
>
>
>
> ================
> Comment at: lib/Support/raw_ostream.cpp:370
> +    // Print the hex bytes for this line
> +    uint32_t i = 0;
> +    for (i = 0; i < FB.NumPerLine; ++i) {
> ----------------
> This will need to be an uppercase `I`.
>
>
> ================
> Comment at: lib/Support/raw_ostream.cpp:388
> +      // Print the ASCII char values for each byte on this line
> +      for (uint32_t i = 0; i < FB.NumPerLine; ++i) {
> +        size_t Index = LineIndex + i;
> ----------------
> Same here.
>
>
> ================
> Comment at: unittests/Support/NativeFormatTests.cpp:48
>
> +std::string format_hex_bytes(const void *P, size_t N, uint64_t Offset =
> -1ULL,
> +                             uint32_t NumPerLine = 16) {
> ----------------
> I know it's a poorly named file, but these tests should probably go in
> `raw_ostream_test.cpp`.  `NativeFormatTests.cpp` was intended specifically
> to test the functions in `NativeFormatting.cpp`.
>
>
> Repository:
>   rL LLVM
>
> https://reviews.llvm.org/D26405
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161108/1e0c264e/attachment.html>


More information about the llvm-commits mailing list