Files
linux-kernel-module-cheat/rungdb
Ciro Santilli 6e9f3dcf23 Document gem5 userland debugging
This lead to an infinite chaing of refactorings:

Fix arm and aarch64 lx-symbols

This was just by chance, a continue GDB command was needed before running it.

I noticed that there is no more need for the x86 GDB --ex 'set arch i386:x86-64:intel'
thing and unified all archs. TODO bisect where that was fixed and understand why.

Add debug kernel configs for gem5 kernel.

Document gem5 aarch64 gdb debug doesn't work.

Document tmux split pane action.
2018-03-23 20:55:26 +00:00

89 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
. common
after=''
arch='x86_64'
before=''
gem5=false
lx_symbols="-ex 'lx-symbols ../kernel_module-1.0/'"
kgdb=false
while getopts A:a:b:gkL OPT; do
case "$OPT" in
a)
arch="$OPTARG"
;;
A)
after="$OPTARG"
;;
b)
before="$OPTARG"
;;
g)
gem5=true
;;
k)
kgdb=true
;;
L)
lx_symbols=''
;;
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="${out_dir}/host/usr/bin/${arch}-linux-gdb ${before}"
cd "${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
# ## 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
cmd="$cmd $after"
echo "$cmd" | tee "${root_dir}/rungdb.log"
eval "$cmd"