#!/usr/bin/env bash set -e arch='x86_64' bdfore='' kgdb=false while getopts A:a:b:k OPT; do case "$OPT" in a) arch="$OPTARG" ;; A) after="$OPTARG" ;; b) before="$OPTARG" ;; k) kgdb=true ;; esac done shift "$(($OPTIND - 1))" if [ "$#" -gt 0 ]; then brk="-ex 'break $1'" shift else brk='' fi buildroot_out_dir="$(pwd)/buildroot/output.${arch}~" gdb="${buildroot_out_dir}/host/usr/bin/${arch}-linux-gdb $before" cd "${buildroot_out_dir}/build/linux-custom/" if "$kgdb"; then cmd="$gdb \ -q \ -ex 'add-auto-load-safe-path $(pwd)' \ -ex 'file vmlinux' \ -ex 'target remote localhost:1234' " else case "$arch" in 'x86_64') cmd="$gdb \ -q \ -ex 'add-auto-load-safe-path $(pwd)' \ -ex 'file vmlinux' \ -ex 'set arch i386:x86-64:intel' \ -ex 'target remote localhost:1234' \ $brk \ -ex 'continue' \ -ex 'disconnect' \ -ex 'set arch i386:x86-64' \ -ex 'target remote localhost:1234' \ -ex 'lx-symbols ../kernel_module-1.0/' \ " ;; 'arm'|'aarch64'|'mips64') cmd="$gdb \ -q \ -ex 'add-auto-load-safe-path $(pwd)' \ -ex 'file vmlinux' \ -ex 'target remote localhost:1234' \ -ex 'lx-symbols ../kernel_module-1.0/' \ $brk \ " ;; esac fi cmd="$cmd $after" echo "$cmd" eval "$cmd"