#!/usr/bin/env bash set -eu . common set -- ${cli_rungdb:-} "$@" after= before= lx_symbols="-ex 'lx-symbols ../kernel_module-1.0/' \\ " kgdb=false while getopts A:a:b:gkL OPT; do case "$OPT" in A) after="$OPTARG" ;; a) arch="$OPTARG" ;; b) before="$OPTARG" ;; g) gem5=true ;; k) kgdb=true ;; L) lx_symbols= ;; ?) exit 2 ;; esac done shift "$(($OPTIND - 1))" if [ "$#" -gt 0 ]; then brk="-ex 'break ${1}' \\ " shift else brk= fi if "$gem5"; then port=7000 else port=1234 fi set_common_vars "$arch" "$gem5" gdb="${host_dir}/usr/bin/${arch}-linux-gdb \\ ${before}" if "$kgdb"; then cmd="\ ${gdb} \ -q \\ -ex 'add-auto-load-safe-path $(pwd)' \\ -ex 'file vmlinux' \\ -ex 'target remote localhost:${port}' \\ " else # ## lx-symbols # # ### lx-symbols after continue # # lx symbols must be run after continue. # # running it immediately after the connect on the bootloader leads to failure, # likely because kernel structure on which it depends are not yet available. # # With this setup, continue runs, and lx-symbols only runs when a break happens, # either by hitting the breakpoint, or by entering Ctrl + C. # # Sure, if the user sets a break on a raw address of the bootloader, # problems will still arise, but let's think about that some other time. # # ### lx-symbols autoload # # The lx-symbols commands gets loaded through the file vmlinux-gdb.py # which gets put on the kernel build root when python debugging scripts are enabled. cmd="\ ${gdb} \ -q \\ -ex 'add-auto-load-safe-path $(pwd)' \\ -ex 'file vmlinux' \\ -ex 'target remote localhost:${port}' \\ ${brk} \ -ex 'continue' \\ ${lx_symbols} \ " fi "${root_dir}/eeval" "cd '${build_dir}/linux-custom/' && \\ $cmd $after" "${common_out_run_dir}/rungdb.sh"