removed files
[~madcoder/dotfiles.git] / +bin / objdump-sym
1 #!/bin/bash
2
3 . "$(dirname "$0")/setup.sh"
4
5 exe="$1"
6 sym="$2"
7
8 die() {
9     echo "$@" >&2
10     exit 1
11 }
12
13 get_sym() {
14     objdump -j .text -tT "$1" | grep " $2\$" || die "symbol not found"
15 }
16
17 hex_to_d() { printf "%d" "$1"; }
18 sum_hex()  { expr $(hex_to_d "$1") + $(hex_to_d "$2"); }
19
20 do_dump() {
21     local addr=0x$1
22     local size=0x$2
23     objdump -dS --start-address=$addr --stop-address=$(printf "0x%016x" $(sum_hex $addr $size)) "$exe"
24 }
25
26 render_it() {
27     local esc=$(printf "\033")
28
29     sed -e "/^  [a-f0-9]\+:/{s/^.*$/$esc[34m&$esc[0m/}"
30 }
31
32 get_sym "$exe" "$sym" | while read addr flags1 flags2 sect size rest; do
33     pager=
34     if test -n "$TERM" -a "$TERM" != "dumb"; then
35         do_dump "$addr" "$size" | render_it | env LESS=FRSX less
36     else
37         do_dump "$addr" "$size" | render_it
38     fi
39 done