blob: 0d79106922035d9fc0573617999db751dbde6404 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Debug a 32 bit binary on 64 bit linux.
. /usr/lib/crosutils/common.sh || exit 1
# Command line options
DEFINE_string board "${DEFAULT_BOARD}" "The board to debug for."
DEFINE_string sysroot "" "Where your target binaries are."
DEFINE_string debug_file_dir "" "Where your split-out debug symbols are."
# Parse command line and update positional args
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
# Die on any errors
set -e
if [[ -z "${FLAGS_board}" ]]; then
die "Error: --board is required."
fi
if [ $# -gt 2 -o $# -lt 1 ]; then
die "usage $0 [flags] file [core]"
fi
if [[ -n "${2}" ]]; then
CORE_CMD="core ${2}"
fi
if [[ -z "${FLAGS_sysroot}" ]]; then
SYSROOT="/build/${FLAGS_board}"
BOARDROOT="${SYSROOT}"
else
SYSROOT="${FLAGS_sysroot}"
BOARDROOT="/build/${FLAGS_board}"
fi
if [[ -z "${FLAGS_debug_file_dir}" ]]; then
DEBUG_FILE_DIR="${SYSROOT}/usr/lib/debug/"
else
DEBUG_FILE_DIR="${FLAGS_debug_file_dir}"
DEBUG_FILE="${DEBUG_FILE_DIR}${1#${SYSROOT}}.debug"
if [[ -f "${DEBUG_FILE}" ]]; then
DEBUG_FILE_CMD="symbol-file -readnow ${DEBUG_FILE}"
fi
fi
GDB="${BOARDROOT}/usr/bin/gdb"
# Use awk to pull the lib paths out of the board's /etc/ld.so.conf
LIB_PATHS=$(awk -v b="${BOARDROOT}" '$1 !~ /^#/ { p=p":"b$0 } \
END{print substr(p,2)}' \
"${BOARDROOT}/etc/ld.so.conf")
export LD_LIBRARY_PATH="${LIB_PATHS}"
# Using --exec, --core, etc makes gdb parse those files before the other
# settings take effect, causing the user to have to re-import them in order
# for the correct debug symbols to get used.
exec $GDB \
--eval-command "set sysroot ${SYSROOT}" \
--eval-command "set debug-file-directory ${DEBUG_FILE_DIR}" \
--eval-command "set prompt (cros-gdb) " \
--eval-command "${DEBUG_FILE_CMD}" \
--eval-command "file ${1}" \
--eval-command "${CORE_CMD}"