Skip to content

Commit 6730ff7

Browse files
committed
Merge branch 'latest' into net
Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
2 parents 2846559 + 2c8916e commit 6730ff7

File tree

3 files changed

+111
-6
lines changed

3 files changed

+111
-6
lines changed

entrypoint.sh

+78-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ with_clang() {
3737

3838
set_trace_on
3939

40+
DEFAULT_VSOCK_CID="3"
41+
4042
# The behaviour can be changed with 'input' env var
4143
: "${INPUT_CCACHE_MAXSIZE:=5G}"
4244
: "${INPUT_CCACHE_DIR:=""}"
@@ -57,12 +59,13 @@ set_trace_on
5759
: "${INPUT_GCOV:=""}"
5860
: "${INPUT_NET_BRIDGES:=""}"
5961
: "${INPUT_MAC_ADDRESS_PREFIX:=""}"
60-
: "${INPUT_VSOCK_CID:="3"}"
62+
: "${INPUT_VSOCK_CID:="${DEFAULT_VSOCK_CID}"}"
6163
: "${INPUT_CI_RESULTS_DIR:=""}"
6264
: "${INPUT_CI_PRINT_EXIT_CODE:=1}"
6365
: "${INPUT_CI_TIMEOUT_SEC:=5400}"
6466
: "${INPUT_EXPECT_TIMEOUT:="-1"}"
6567
: "${INPUT_BUILD_SKIP_PERF:=1}"
68+
: "${INPUT_FULL_DUMP:=0}"
6669

6770
if [ -z "${INPUT_MODE}" ]; then
6871
INPUT_MODE="${1}"
@@ -95,12 +98,14 @@ BASH_PROFILE="/root/.bash_profile"
9598
VIRTME_WORKDIR="${KERNEL_SRC}/.virtme"
9699
VIRTME_SCRIPTS_DIR="${VIRTME_WORKDIR}/scripts"
97100
VIRTME_HEADERS_DIR="${VIRTME_WORKDIR}/headers"
101+
VIRTME_CURRENT_BUILD_DIR="${INPUT_CURRENT_BUILD:-"${VIRTME_WORKDIR}/current_build"}"
98102

99103
VIRTME_SCRIPT="${VIRTME_SCRIPTS_DIR}/tests.sh"
100104
VIRTME_SCRIPT_END="__VIRTME_END__"
101105
VIRTME_SCRIPT_UNEXPECTED_STOP="Unexpected stop of the VM"
102106
VIRTME_SCRIPT_TIMEOUT="${VIRTME_SCRIPTS_DIR}/tests.timeout"
103107
VIRTME_SCRIPT_TIMEOUT_END="__VIRTME_TIMEOUT_END__"
108+
VIRTME_SCRIPT_TIMEOUT_GDB="${VIRTME_SCRIPTS_DIR}/gdb.timeout"
104109
VIRTME_RUN_SCRIPT="${VIRTME_SCRIPTS_DIR}/virtme.sh"
105110
VIRTME_RUN_EXPECT="${VIRTME_SCRIPTS_DIR}/virtme.expect"
106111

@@ -122,9 +127,13 @@ VIRTME_RUN_OPTS=(
122127
--server --port "${INPUT_VSOCK_CID}" # To connect to the VM using VSock
123128
--show-command
124129
--verbose --show-boot-console
130+
--kopt nokaslr # needed for gdb
125131
--kopt mitigations=off
126132
)
127-
VIRTME_RUN_QEMU_OPTS=()
133+
VIRTME_RUN_QEMU_OPTS=(
134+
-gdb tcp::$((1234 + INPUT_VSOCK_CID - DEFAULT_VSOCK_CID))
135+
-qmp "tcp::$((3636 + INPUT_VSOCK_CID - DEFAULT_VSOCK_CID)),server,nowait"
136+
)
128137

129138
# results dir
130139
RESULTS_DIR_BASE="${VIRTME_WORKDIR}/results"
@@ -325,11 +334,18 @@ setup_env() { local mode
325334
# Avoid a long advice
326335
git config --global advice.detachedHead false
327336

337+
mkdir -p "/root/.config/gdb"
338+
echo "add-auto-load-safe-path ${KERNEL_SRC}/scripts/gdb/vmlinux-gdb.py" \
339+
> "/root/.config/gdb/gdbinit"
340+
328341
VIRTME_BUILD_DIR="${VIRTME_WORKDIR}/build"
329342
with_clang && VIRTME_BUILD_DIR+="-clang"
330343
is_mode_debug "${mode}" && VIRTME_BUILD_DIR+="-debug"
331344
is_mode_btf "${mode}" && VIRTME_BUILD_DIR+="-btf"
332345
[ -n "${INPUT_BUILD_SUFFIX}" ] && VIRTME_BUILD_DIR+="-${INPUT_BUILD_SUFFIX}"
346+
rm -rf "${VIRTME_CURRENT_BUILD_DIR}"
347+
ln -s "${VIRTME_BUILD_DIR}" "${VIRTME_CURRENT_BUILD_DIR}"
348+
333349
VIRTME_PERF_DIR="${VIRTME_BUILD_DIR}/tools/perf"
334350
VIRTME_TOOLS_SBIN_DIR="${VIRTME_BUILD_DIR}/tools/sbin"
335351
VIRTME_CACHE_DIR="${VIRTME_BUILD_DIR}/.cache"
@@ -402,6 +418,10 @@ setup_env() { local mode
402418
--memory "${INPUT_RAM}"
403419
)
404420

421+
if [ "${INPUT_FULL_DUMP}" = 1 ]; then
422+
VIRTME_RUN_OPTS+=(--disable-microvm)
423+
VIRTME_RUN_QEMU_OPTS+=(-device vmcoreinfo)
424+
fi
405425

406426
OUTPUT_VIRTME="${RESULTS_DIR}/output.log"
407427
TESTS_SUMMARY="${RESULTS_DIR}/summary.txt"
@@ -724,6 +744,24 @@ build_perf() { local rc=0
724744
return ${rc}
725745
}
726746

747+
build_gdb_index() { local rc=0
748+
if readelf -S vmlinux 2>/dev/null | grep -q ".gdb_index"; then
749+
printinfo "Skip GDB Index build: already there"
750+
return 0
751+
fi
752+
753+
log_section_start "Build GDB Index"
754+
755+
ln -sf "${VIRTME_CURRENT_BUILD_DIR}/vmlinux" .
756+
ln -sf "${VIRTME_CURRENT_BUILD_DIR}/scripts/gdb/linux/constants.py" scripts/gdb/linux/
757+
758+
GDB=gdb-multiarch gdb-add-index vmlinux || rc=${?}
759+
760+
log_section_end
761+
762+
return ${rc}
763+
}
764+
727765
build() {
728766
if [ "${INPUT_BUILD_SKIP}" = 1 ]; then
729767
printinfo "Skip kernel build"
@@ -735,6 +773,7 @@ build() {
735773
if with_clang; then
736774
build_compile_commands || true # nice to have
737775
fi
776+
build_gdb_index
738777
install_kernel_headers
739778
build_perf
740779
ccache_stat
@@ -1372,6 +1411,18 @@ echo "${VIRTME_SCRIPT_TIMEOUT_END}"
13721411
EOF
13731412
chmod +x "${VIRTME_SCRIPT_TIMEOUT}"
13741413

1414+
cat <<EOF > "${VIRTME_SCRIPT_TIMEOUT_GDB}"
1415+
set output-radix 16
1416+
target remote localhost:1234
1417+
l
1418+
bt full
1419+
info frame
1420+
info registers
1421+
thread apply all bt full
1422+
detach
1423+
exit
1424+
EOF
1425+
13751426
cat <<EOF > "${VIRTME_RUN_SCRIPT}"
13761427
#! /bin/bash
13771428
echo -e "$(log_section_start "Boot VM")"
@@ -1465,8 +1516,27 @@ expect {
14651516
} timeout {
14661517
send_user "Timeout: Getting more info: timeout\n"
14671518
send -i \$serialID "\x03\r"
1519+
} eof {
1520+
send_user "Timeout: Getting more info: unexpected end\n"
14681521
}
14691522
}
1523+
1524+
send_user "Timeout: Getting more info via GDB\n"
1525+
spawn gdb-multiarch --batch -x "${VIRTME_SCRIPT_TIMEOUT_GDB}" vmlinux
1526+
set gdbID \$spawn_id
1527+
expect {
1528+
"detached" {
1529+
send_user "Timeout: Getting more info via GDB: end\n"
1530+
} timeout {
1531+
send_user "Timeout: Getting more info via GDB: timeout\n"
1532+
send "\x03\r"
1533+
} eof {
1534+
send_user "Timeout: Getting more info via GDB: unexpected end\n"
1535+
}
1536+
}
1537+
close
1538+
1539+
set spawn_id \$consoleID
14701540
send_user "Timeout: sending Ctrl+C\n"
14711541
send "\x03\r"
14721542
sleep 2
@@ -2069,6 +2139,12 @@ case "${INPUT_MODE}" in
20692139
"connect")
20702140
exec "${VIRTME_RUN}" --mods none --client --port "${INPUT_VSOCK_CID}" ${1:+--remote-cmd "${*}"}
20712141
;;
2142+
"gdb")
2143+
exec "${VIRTME_RUN}" --mods none --gdb --kdir "${VIRTME_CURRENT_BUILD_DIR}"
2144+
;;
2145+
"dump")
2146+
exec vng --dump "${1?}"
2147+
;;
20722148
"lcov2html")
20732149
setup_env "${@:-normal}"
20742150
while [ -n "${1}" ] && [ ! -s "${1}" ]; do

run.sh

+7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ for env in "${!INPUT_@}"; do
1717
envs+=(-e "${env}=${!env}")
1818
done
1919

20+
ports=()
21+
if [ -z "$(docker ps --filter "label=name=mptcp-upstream-virtme-docker" --format '{{.Ports}}')" ]; then
22+
ports+=(-p 127.0.0.1:1234-1238:1234-1238
23+
-p 127.0.0.1:3636-3640:3636-3640)
24+
fi
25+
2026
docker run \
2127
-v "${PWD}:${PWD}:rw" \
2228
-v "${VIRTME_GIT_DIR}:${VIRTME_GIT_DIR}:ro" \
@@ -32,6 +38,7 @@ docker run \
3238
"${envs[@]}" \
3339
-e "VIRTME_ARCH" \
3440
-e "COMPILER" \
41+
"${ports[@]}" \
3542
--privileged \
3643
--rm \
3744
${VIRTME_INTERACTIVE} \

vscode/local-virtme.sh

+26-4
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,39 @@ defconfig() {
2828
fi
2929
}
3030

31+
wait_for_vm() {
32+
local i=0
33+
34+
echo "Waiting for VM to be ready"
35+
36+
while ((i < 3600)); do
37+
if [ -n "$(docker exec "$(docker ps --filter "label=name=mptcp-upstream-virtme-docker" -l --format "{{.ID}}")" \
38+
pidof qemu-system-x86_64 2>/dev/null)" ]; then
39+
echo "VM started"
40+
return 0
41+
fi
42+
i=$((i+1))
43+
sleep 1
44+
done
45+
echo "Timeout waiting for VM"
46+
return 1
47+
}
48+
3149
case "${COMMAND}" in
32-
"build" | "clean" | "menuconfig" | "update" | "systemtap-build")
50+
"build" | "clean" | "menuconfig" | "update" | "systemtap-build" | "gdb-index")
3351
echo "local: allow: ${COMMAND}"
3452
;;
35-
"gdb-index")
53+
"install-autostart")
3654
echo "local: skip: ${COMMAND}"
3755
exit 0
3856
;;
39-
"defconfig")
57+
"defconfig" | "wait-for-vm")
4058
echo "local: custom: ${COMMAND}"
41-
${COMMAND}
59+
${COMMAND//-/_}
60+
exit
61+
;;
62+
"start" | "start-wait-dbg")
63+
echo "local: ${COMMAND}: please start a VM using MPTCP Upstream Virtme Docker from another terminal"
4264
exit
4365
;;
4466
*)

0 commit comments

Comments
 (0)