osmith has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38503?usp=email )

Change subject: testenv: qemu: get coredump and show backtrace
......................................................................

testenv: qemu: get coredump and show backtrace

If the SUT crashes inside QEMU, copy the coredump via 9p to the outer
system (either host or podman) where we have the same binaries and also
debug symbols, and run gdb there to show the backtrace.

Related: OS#6600
Change-Id: Ia08ac58c43388b5ea4d3712c5ef83f54b538b10a
---
M _testenv/data/scripts/qemu/qemu_functions.sh
M _testenv/data/scripts/qemu/qemu_init.sh
2 files changed, 21 insertions(+), 0 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  fixeria: Looks good to me, approved




diff --git a/_testenv/data/scripts/qemu/qemu_functions.sh 
b/_testenv/data/scripts/qemu/qemu_functions.sh
index c0dd8cc..e2014a1 100755
--- a/_testenv/data/scripts/qemu/qemu_functions.sh
+++ b/_testenv/data/scripts/qemu/qemu_functions.sh
@@ -1,5 +1,6 @@
 #!/bin/sh -ex
 INITRD_DIR="$PWD/_initrd"
+CORE_DIR="$PWD/_coredump"

 # Add one or more files to the initramfs, with parent directories.
 # usr-merge: resolve symlinks for /lib -> /usr/lib etc. so "cp --parents" does
@@ -171,6 +172,8 @@
                machine_arg="-machine pc"
        fi

+       mkdir -p "$CORE_DIR"
+
        # sudo is required to set up networking in qemu_ifup.sh
        # </dev/null to deatch stdin, so qemu doesn't capture ^C
        sudo sh -c "
@@ -186,6 +189,13 @@
                        -serial stdio \
                        -netdev 
'tap,id=nettest,script=$TESTENV_QEMU_SCRIPTS/qemu_ifup.sh' \
                        -device 
'virtio-net-pci,netdev=nettest,mac=$(qemu_random_mac)' \
+                       -virtfs 
'local,path=$CORE_DIR,mount_tag=coredir,security_model=passthrough,fmode=666,writeout=immediate'
 \
                </dev/null
        "
+
+       # Show coredump backtrace
+       if [ -e "$CORE_DIR/coredump" ]; then
+               execfn="$(file "$CORE_DIR/coredump" | grep -o "execfn: '.*'" | 
cut -d "'" -f 2)"
+               gdb --batch "$execfn" "$CORE_DIR/coredump" -ex bt
+       fi
 }
diff --git a/_testenv/data/scripts/qemu/qemu_init.sh 
b/_testenv/data/scripts/qemu/qemu_init.sh
index 1c8b39b..1c100f8 100755
--- a/_testenv/data/scripts/qemu/qemu_init.sh
+++ b/_testenv/data/scripts/qemu/qemu_init.sh
@@ -1,6 +1,7 @@
 #!/bin/busybox sh
 echo "Running initrd-init.sh"
 set -ex
+COREDUMP=/tmp/coredump

 export HOME=/root
 export LD_LIBRARY_PATH=/usr/local/lib
@@ -27,10 +28,20 @@
 ip link set lo up
 ip link set eth0 up

+sysctl -w kernel.core_pattern="$COREDUMP"
+ulimit -c unlimited
+
 echo "KERNEL_TEST_VM_IS_READY"

 # Use '|| true' to avoid "attempting to kill init" kernel panic on failure
 /cmd.sh || true

+if [ -e "$COREDUMP" ]; then
+       mkdir -p /mnt/coredir
+       mount -t 9p -o trans=virtio coredir /mnt/coredir -oversion=9p2000.L
+       chmod 666 "$COREDUMP"
+       cp "$COREDUMP" /mnt/coredir
+fi
+
 # Avoid kernel panic when init exits
 poweroff -f

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38503?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ia08ac58c43388b5ea4d3712c5ef83f54b538b10a
Gerrit-Change-Number: 38503
Gerrit-PatchSet: 5
Gerrit-Owner: osmith <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to