OS_NAME: openbsd
IMAGE_FAMILY: pg-ci-openbsd-postgres
PKGCONFIG_PATH: '/usr/lib/pkgconfig:/usr/local/lib/pkgconfig'
+ CORE_DUMP_EXECUTABLE_DIR: $CIRRUS_WORKING_DIR/build/tmp_install/usr/local/pgsql/bin
MESON_FEATURES: >-
-Dbsd_auth=enabled
# ${CORE_DUMP_DIR}, they may not obey this. So, move core files to the
# ${CORE_DUMP_DIR} directory.
find build/ -type f -name '*.core' -exec mv '{}' ${CORE_DUMP_DIR} \;
- src/tools/ci/cores_backtrace.sh ${OS_NAME} ${CORE_DUMP_DIR}
+ src/tools/ci/cores_backtrace.sh ${OS_NAME} ${CORE_DUMP_DIR} ${CORE_DUMP_EXECUTABLE_DIR}
# configure feature flags, shared between the task running the linux tests and
#! /bin/sh
-if [ $# -ne 2 ]; then
+os=$1
+directory=$2
+executable_directory=$3
+
+if [ "$os" != 'openbsd' ] && [ $# -ne 2 ]; then
echo "cores_backtrace.sh <os> <directory>"
exit 1
fi
-os=$1
-directory=$2
+if [ "$os" = 'openbsd' ] && [ $# -ne 3 ]; then
+ echo "cores_backtrace.sh <os> <core_directory> <executable_directory>"
+ exit 1
+fi
case $os in
freebsd|linux|macos|netbsd|openbsd)
;;
esac
+if [ "$os" = 'openbsd' ]; then
+ export PATH="${executable_directory}:${PATH}"
+fi
+
first=1
for corefile in $(find "$directory" -type f) ; do
if [ "$first" -eq 1 ]; then
echo -e '\n\n'
fi
- if [ "$os" = 'macos' ] || [ "$os" = 'openbsd' ]; then
+ if [ "$os" = 'macos' ]; then
lldb -c $corefile --batch -o 'thread backtrace all' -o 'quit'
+ elif [ "$os" = 'openbsd' ]; then
+ # OpenBSD's ELF format doesn't include executable information, so we
+ # search for the executable manually in <executable_directory>.
+ filename=$(basename "$corefile")
+ base=$(echo "$filename" | sed 's/\.core.*$//')
+ binary=$(which "${base}")
+
+ if [ -z "$binary" ]; then
+ echo "executable ${base} not found in ${PATH}, running 'lldb' without debug information"
+ lldb -c "$corefile" --batch -o 'thread backtrace all' -o 'quit'
+ else
+ lldb "$binary" -c "$corefile" --batch -o 'thread backtrace all' -o 'quit'
+ fi
else
auxv=$(gdb --quiet --core ${corefile} --batch -ex 'info auxv' 2>/dev/null)
if [ $? -ne 0 ]; then