#!/usr/bin/env bash set -e arch='x86_64' bdfore='' gem5=false kgdb=false while getopts A:a:b:gk OPT; do case "$OPT" in a) arch="$OPTARG" ;; A) after="$OPTARG" ;; b) before="$OPTARG" ;; g) gem5=true ;; k) kgdb=true ;; esac done shift "$(($OPTIND - 1))" if [ "$#" -gt 0 ]; then brk="-ex 'break $1'" shift else brk='' fi if "$gem5"; then arch_dir="${arch}-gem5" port=7000 else arch_dir="$arch" port=1234 fi buildroot_out_dir="$(pwd)/buildroot/output.${arch_dir}~" 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:$port' " 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:$port' \ $brk \ -ex 'continue' \ -ex 'disconnect' \ -ex 'set arch i386:x86-64' \ -ex 'target remote localhost:$port' \ -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:$port' \ -ex 'lx-symbols ../kernel_module-1.0/' \ $brk \ " ;; esac fi cmd="$cmd $after" echo "$cmd" | tee rungdb.log eval "$cmd"