lkml.org 
[lkml]   [2017]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -tip 2/3] x86: tools: Rename distill.awk to objdump_reformat.awk
    Date
    Rename distill.awk to objdump_reformat.awk because
    it actually re-format the output of objdump so that
    insn_decoder_test can read it.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    ---
    arch/x86/tools/Makefile | 4 +--
    arch/x86/tools/distill.awk | 48 -----------------------------------
    arch/x86/tools/insn_decoder_test.c | 6 ++--
    arch/x86/tools/objdump_reformat.awk | 48 +++++++++++++++++++++++++++++++++++
    4 files changed, 53 insertions(+), 53 deletions(-)
    delete mode 100644 arch/x86/tools/distill.awk
    create mode 100644 arch/x86/tools/objdump_reformat.awk

    diff --git a/arch/x86/tools/Makefile b/arch/x86/tools/Makefile
    index b0d75684d313..09af7ff53044 100644
    --- a/arch/x86/tools/Makefile
    +++ b/arch/x86/tools/Makefile
    @@ -13,11 +13,11 @@ else
    posttest_64bit = -n
    endif

    -distill_awk = $(srctree)/arch/x86/tools/distill.awk
    +reformatter = $(srctree)/arch/x86/tools/objdump_reformat.awk
    chkobjdump = $(srctree)/arch/x86/tools/chkobjdump.awk

    quiet_cmd_posttest = TEST $@
    - cmd_posttest = ($(OBJDUMP) -v | $(AWK) -f $(chkobjdump)) || $(OBJDUMP) -d -j .text $(objtree)/vmlinux | $(AWK) -f $(distill_awk) | $(obj)/insn_decoder_test $(posttest_64bit) $(posttest_verbose)
    + cmd_posttest = ($(OBJDUMP) -v | $(AWK) -f $(chkobjdump)) || $(OBJDUMP) -d -j .text $(objtree)/vmlinux | $(AWK) -f $(reformatter) | $(obj)/insn_decoder_test $(posttest_64bit) $(posttest_verbose)

    quiet_cmd_sanitytest = TEST $@
    cmd_sanitytest = $(obj)/insn_sanity $(posttest_64bit) -m 1000000
    diff --git a/arch/x86/tools/distill.awk b/arch/x86/tools/distill.awk
    deleted file mode 100644
    index 80cd7d53bd07..000000000000
    --- a/arch/x86/tools/distill.awk
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -#!/bin/awk -f
    -# SPDX-License-Identifier: GPL-2.0
    -# Usage: objdump -d a.out | awk -f distill.awk | ./insn_decoder_test
    -# Distills the disassembly as follows:
    -# - Removes all lines except the disassembled instructions.
    -# - For instructions that exceed 1 line (7 bytes), crams all the hex bytes
    -# into a single line.
    -# - Remove bad(or prefix only) instructions
    -
    -BEGIN {
    - prev_addr = ""
    - prev_hex = ""
    - prev_mnemonic = ""
    - bad_expr = "(\\(bad\\)|^rex|^.byte|^rep(z|nz)$|^lock$|^es$|^cs$|^ss$|^ds$|^fs$|^gs$|^data(16|32)$|^addr(16|32|64))"
    - fwait_expr = "^9b "
    - fwait_str="9b\tfwait"
    -}
    -
    -/^ *[0-9a-f]+ <[^>]*>:/ {
    - # Symbol entry
    - printf("%s%s\n", $2, $1)
    -}
    -
    -/^ *[0-9a-f]+:/ {
    - if (split($0, field, "\t") < 3) {
    - # This is a continuation of the same insn.
    - prev_hex = prev_hex field[2]
    - } else {
    - # Skip bad instructions
    - if (match(prev_mnemonic, bad_expr))
    - prev_addr = ""
    - # Split fwait from other f* instructions
    - if (match(prev_hex, fwait_expr) && prev_mnemonic != "fwait") {
    - printf "%s\t%s\n", prev_addr, fwait_str
    - sub(fwait_expr, "", prev_hex)
    - }
    - if (prev_addr != "")
    - printf "%s\t%s\t%s\n", prev_addr, prev_hex, prev_mnemonic
    - prev_addr = field[1]
    - prev_hex = field[2]
    - prev_mnemonic = field[3]
    - }
    -}
    -
    -END {
    - if (prev_addr != "")
    - printf "%s\t%s\t%s\n", prev_addr, prev_hex, prev_mnemonic
    -}
    diff --git a/arch/x86/tools/insn_decoder_test.c b/arch/x86/tools/insn_decoder_test.c
    index 8be7264cb723..286d2e3b9d57 100644
    --- a/arch/x86/tools/insn_decoder_test.c
    +++ b/arch/x86/tools/insn_decoder_test.c
    @@ -29,7 +29,7 @@
    * particular. See if insn_get_length() and the disassembler agree
    * on the length of each instruction in an elf disassembly.
    *
    - * Usage: objdump -d a.out | awk -f distill.awk | ./insn_decoder_test
    + * Usage: objdump -d a.out | awk -f objdump_reformat.awk | ./insn_decoder_test
    */

    const char *prog;
    @@ -38,8 +38,8 @@ static int x86_64;

    static void usage(void)
    {
    - fprintf(stderr, "Usage: objdump -d a.out | awk -f distill.awk |"
    - " %s [-y|-n] [-v]\n", prog);
    + fprintf(stderr, "Usage: objdump -d a.out | awk -f objdump_reformat.awk"
    + " | %s [-y|-n] [-v]\n", prog);
    fprintf(stderr, "\t-y 64bit mode\n");
    fprintf(stderr, "\t-n 32bit mode\n");
    fprintf(stderr, "\t-v verbose mode\n");
    diff --git a/arch/x86/tools/objdump_reformat.awk b/arch/x86/tools/objdump_reformat.awk
    new file mode 100644
    index 000000000000..f418c91b71f0
    --- /dev/null
    +++ b/arch/x86/tools/objdump_reformat.awk
    @@ -0,0 +1,48 @@
    +#!/bin/awk -f
    +# SPDX-License-Identifier: GPL-2.0
    +# Usage: objdump -d a.out | awk -f objdump_reformat.awk | ./insn_decoder_test
    +# Reformats the disassembly as follows:
    +# - Removes all lines except the disassembled instructions.
    +# - For instructions that exceed 1 line (7 bytes), crams all the hex bytes
    +# into a single line.
    +# - Remove bad(or prefix only) instructions
    +
    +BEGIN {
    + prev_addr = ""
    + prev_hex = ""
    + prev_mnemonic = ""
    + bad_expr = "(\\(bad\\)|^rex|^.byte|^rep(z|nz)$|^lock$|^es$|^cs$|^ss$|^ds$|^fs$|^gs$|^data(16|32)$|^addr(16|32|64))"
    + fwait_expr = "^9b "
    + fwait_str="9b\tfwait"
    +}
    +
    +/^ *[0-9a-f]+ <[^>]*>:/ {
    + # Symbol entry
    + printf("%s%s\n", $2, $1)
    +}
    +
    +/^ *[0-9a-f]+:/ {
    + if (split($0, field, "\t") < 3) {
    + # This is a continuation of the same insn.
    + prev_hex = prev_hex field[2]
    + } else {
    + # Skip bad instructions
    + if (match(prev_mnemonic, bad_expr))
    + prev_addr = ""
    + # Split fwait from other f* instructions
    + if (match(prev_hex, fwait_expr) && prev_mnemonic != "fwait") {
    + printf "%s\t%s\n", prev_addr, fwait_str
    + sub(fwait_expr, "", prev_hex)
    + }
    + if (prev_addr != "")
    + printf "%s\t%s\t%s\n", prev_addr, prev_hex, prev_mnemonic
    + prev_addr = field[1]
    + prev_hex = field[2]
    + prev_mnemonic = field[3]
    + }
    +}
    +
    +END {
    + if (prev_addr != "")
    + printf "%s\t%s\t%s\n", prev_addr, prev_hex, prev_mnemonic
    +}
    \
     
     \ /
      Last update: 2017-11-24 16:11    [W:2.353 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site