)]}'
{
  "commit": "0b73da3f40128eab6ca2a07508f424029a1edaeb",
  "tree": "06c6c2f92bb5dc0b8ae2b03e0fa7320171d6b492",
  "parents": [
    "8035e4288078cb806e7dd6bafe4d3e54d44cab3f"
  ],
  "author": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Sat Jun 06 15:48:52 2009 +0200"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Sat Jun 06 18:58:31 2009 +0200"
  },
  "message": "perf_counter tools: Add \u0027perf annotate\u0027 feature\n\nAdd new perf sub-command to display annotated source code:\n\n $ perf annotate decode_tree_entry\n\n------------------------------------------------\n Percent |\tSource code \u0026 Disassembly of /home/mingo/git/git\n------------------------------------------------\n         :\n         :\t/home/mingo/git/git:     file format elf64-x86-64\n         :\n         :\n         :\tDisassembly of section .text:\n         :\n         :\t00000000004a0da0 \u003cdecode_tree_entry\u003e:\n         :\t\t*modep \u003d mode;\n         :\t\treturn str;\n         :\t}\n         :\n         :\tstatic void decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned long size)\n         :\t{\n    3.82 :\t  4a0da0:\t41 54                \tpush   %r12\n         :\t\tconst char *path;\n         :\t\tunsigned int mode, len;\n         :\n         :\t\tif (size \u003c 24 || buf[size - 21])\n    0.17 :\t  4a0da2:\t48 83 fa 17          \tcmp    $0x17,%rdx\n         :\t\t*modep \u003d mode;\n         :\t\treturn str;\n         :\t}\n         :\n         :\tstatic void decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned long size)\n         :\t{\n    0.00 :\t  4a0da6:\t49 89 fc             \tmov    %rdi,%r12\n    0.00 :\t  4a0da9:\t55                   \tpush   %rbp\n    3.37 :\t  4a0daa:\t53                   \tpush   %rbx\n         :\t\tconst char *path;\n         :\t\tunsigned int mode, len;\n         :\n         :\t\tif (size \u003c 24 || buf[size - 21])\n    0.08 :\t  4a0dab:\t76 73                \tjbe    4a0e20 \u003cdecode_tree_entry+0x80\u003e\n    0.00 :\t  4a0dad:\t80 7c 16 eb 00       \tcmpb   $0x0,-0x15(%rsi,%rdx,1)\n    3.48 :\t  4a0db2:\t75 6c                \tjne    4a0e20 \u003cdecode_tree_entry+0x80\u003e\n         :\tstatic const char *get_mode(const char *str, unsigned int *modep)\n         :\t{\n         :\t\tunsigned char c;\n         :\t\tunsigned int mode \u003d 0;\n         :\n         :\t\tif (*str \u003d\u003d \u0027 \u0027)\n    1.94 :\t  4a0db4:\t0f b6 06             \tmovzbl (%rsi),%eax\n    0.39 :\t  4a0db7:\t3c 20                \tcmp    $0x20,%al\n    0.00 :\t  4a0db9:\t74 65                \tje     4a0e20 \u003cdecode_tree_entry+0x80\u003e\n         :\t\t\treturn NULL;\n         :\n         :\t\twhile ((c \u003d *str++) !\u003d \u0027 \u0027) {\n    0.06 :\t  4a0dbb:\t89 c2                \tmov    %eax,%edx\n         :\t\t\tif (c \u003c \u00270\u0027 || c \u003e \u00277\u0027)\n    1.99 :\t  4a0dbd:\t31 ed                \txor    %ebp,%ebp\n         :\t\tunsigned int mode \u003d 0;\n         :\n         :\t\tif (*str \u003d\u003d \u0027 \u0027)\n         :\t\t\treturn NULL;\n         :\n         :\t\twhile ((c \u003d *str++) !\u003d \u0027 \u0027) {\n    1.74 :\t  4a0dbf:\t48 8d 5e 01          \tlea    0x1(%rsi),%rbx\n         :\t\t\tif (c \u003c \u00270\u0027 || c \u003e \u00277\u0027)\n    0.00 :\t  4a0dc3:\t8d 42 d0             \tlea    -0x30(%rdx),%eax\n    0.17 :\t  4a0dc6:\t3c 07                \tcmp    $0x7,%al\n    0.00 :\t  4a0dc8:\t76 0d                \tjbe    4a0dd7 \u003cdecode_tree_entry+0x37\u003e\n    0.00 :\t  4a0dca:\teb 54                \tjmp    4a0e20 \u003cdecode_tree_entry+0x80\u003e\n    0.00 :\t  4a0dcc:\t0f 1f 40 00          \tnopl   0x0(%rax)\n   16.57 :\t  4a0dd0:\t8d 42 d0             \tlea    -0x30(%rdx),%eax\n    0.14 :\t  4a0dd3:\t3c 07                \tcmp    $0x7,%al\n    0.00 :\t  4a0dd5:\t77 49                \tja     4a0e20 \u003cdecode_tree_entry+0x80\u003e\n         :\t\t\t\treturn NULL;\n         :\t\t\tmode \u003d (mode \u003c\u003c 3) + (c - \u00270\u0027);\n    3.12 :\t  4a0dd7:\t0f b6 c2             \tmovzbl %dl,%eax\n         :\t\tunsigned int mode \u003d 0;\n         :\n         :\t\tif (*str \u003d\u003d \u0027 \u0027)\n         :\t\t\treturn NULL;\n         :\n         :\t\twhile ((c \u003d *str++) !\u003d \u0027 \u0027) {\n    0.00 :\t  4a0dda:\t0f b6 13             \tmovzbl (%rbx),%edx\n   16.74 :\t  4a0ddd:\t48 83 c3 01          \tadd    $0x1,%rbx\n         :\t\t\tif (c \u003c \u00270\u0027 || c \u003e \u00277\u0027)\n         :\t\t\t\treturn NULL;\n         :\t\t\tmode \u003d (mode \u003c\u003c 3) + (c - \u00270\u0027);\n\nThe first column is the percentage of samples that arrived on that\nparticular line - relative to the total cost of the function.\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLKML-Reference: \u003cnew-submission\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a9d6d5ee270120f147b47492acc90671fb7cbbae",
      "old_mode": 33188,
      "old_path": "Documentation/perf_counter/Documentation/perf-annotate.txt",
      "new_id": "c9dcade068312d843904107d51beb9d9497f2c4a",
      "new_mode": 33188,
      "new_path": "Documentation/perf_counter/Documentation/perf-annotate.txt"
    },
    {
      "type": "modify",
      "old_id": "d656484ec98389ad2528b17a585a6097b7646a31",
      "old_mode": 33188,
      "old_path": "Documentation/perf_counter/builtin-annotate.c",
      "new_id": "116a3978b44c73a67f1b29de931e10dbd3911548",
      "new_mode": 33188,
      "new_path": "Documentation/perf_counter/builtin-annotate.c"
    },
    {
      "type": "modify",
      "old_id": "a06bbfba8350a45d740c2a0af67f51e9ee29d8d1",
      "old_mode": 33188,
      "old_path": "Documentation/perf_counter/util/symbol.c",
      "new_id": "23f4f7b3b83d1efc12f04ea349c1d4ac3f5db748",
      "new_mode": 33188,
      "new_path": "Documentation/perf_counter/util/symbol.c"
    },
    {
      "type": "modify",
      "old_id": "e23cc31266843ffb4b1474e18695016a4e15da78",
      "old_mode": 33188,
      "old_path": "Documentation/perf_counter/util/symbol.h",
      "new_id": "4839d68f14f08a79fe39ff5ace0986b2fbb8ce46",
      "new_mode": 33188,
      "new_path": "Documentation/perf_counter/util/symbol.h"
    }
  ]
}
