Слияние кода завершено, страница обновится автоматически
#!/bin/bash
#
# Configuration variables:
# LLDB - path to LLDB debugger
# defaults to finding in PATH
# GDB - path to GDB debugger
# defaults to finding in PATH
# EFI_ARCH - architecture to debug
# defaults to X64
# EFI_PORT - debugger TCP connection port
# defaults to 8864 for X64 and 8832 for IA32
# EFI_HOST - debugger TCP connection host
# defaults to localhost
# EFI_DEBUGGER - debugger to use
# defaults to LLDB on macOS and GDB otherwise, fallbacks to other when missing
# EFI_TOOLCHAIN - toolchain to use
# defaults to XCODE5 on macOS and GCC5 otherwise
# EFI_SYMS - symbols to use
# defaults to files in GdbSyms/Bin
# EFI_SYMS_PDB - optional PDB symbols for LLDB
# defaults to "-s GdbSyms/Bin/${EFI_ARCH}_CLANGPDB/GdbSyms.pdb" for CLANGPDB
# EFI_TRIPLE - optional target triple for LLDB
# defaults to x86_64-apple-macosx for XCODE5, x86_64-pc-windows-msvc for CLANGDWARF/CLANGPDB,
# x86_64-linux-gnu otherwise.
#
RUNDIR=$(dirname "$0")
pushd "${RUNDIR}" >/dev/null || exit 1
RUNDIR=$(pwd)
popd >/dev/null || exit 1
cd "$RUNDIR" || exit 1
find_gdb() {
if [ "${GDB}" = "" ]; then
GDB=$(which ggdb)
fi
if [ "${GDB}" = "" ]; then
GDB=$(which gdb-multiarch)
fi
if [ "${GDB}" = "" ]; then
GDB=$(which gdb)
fi
}
find_lldb() {
if [ "${LLDB}" = "" ]; then
LLDB=$(ls /opt/local/bin/lldb-mp* 2>/dev/null)
fi
if [ "${LLDB}" = "" ]; then
LLDB=$(which lldb)
fi
}
choose_debugger() {
find_gdb
find_lldb
if [ "${EFI_ARCH}" = "" ]; then
EFI_ARCH="X64"
fi
if [ "${EFI_HOST}" = "" ]; then
EFI_HOST="localhost"
fi
if [ "${EFI_PORT}" = "" ]; then
if [ "${EFI_ARCH}" = "IA32" ]; then
EFI_PORT=8832
else
EFI_PORT=8864
fi
fi
if [ "${EFI_DEBUGGER}" = "" ]; then
if [ "${LLDB}" != "" ] && [ "$(uname)" = "Darwin" ]; then
EFI_DEBUGGER="LLDB"
elif [ "${GDB}" != "" ]; then
EFI_DEBUGGER="GDB"
elif [ "${LLDB}" != "" ]; then
EFI_DEBUGGER="LLDB"
else
echo "Cannot find installed GDB or LLDB debugger!"
echo "Hint: set GDB or LLDB variables to debugger path."
exit 1
fi
fi
if [ "${EFI_TOOLCHAIN}" = "" ]; then
if [ "$(uname)" = "Darwin" ]; then
EFI_TOOLCHAIN="XCODE5"
else
EFI_TOOLCHAIN="GCC5"
fi
fi
if [ "${EFI_SYMS}" = "" ]; then
if [ "${EFI_TOOLCHAIN}" = "XCODE5" ]; then
EFI_SYMS="GdbSyms/Bin/${EFI_ARCH}_XCODE5/GdbSyms.dll"
elif [ "${EFI_TOOLCHAIN}" = "CLANGPDB" ]; then
EFI_SYMS_PDB="-s GdbSyms/Bin/${EFI_ARCH}_CLANGPDB/GdbSyms.pdb"
EFI_SYMS="GdbSyms/Bin/${EFI_ARCH}_CLANGPDB/GdbSyms.dll"
else
EFI_SYMS="GdbSyms/Bin/${EFI_ARCH}_${EFI_TOOLCHAIN}/GdbSyms.debug"
fi
fi
if [ ! -f "${EFI_SYMS}" ]; then
echo "Cannot find symbols: ${EFI_SYMS}!"
echo "Hint: compile this file or set EFI_SYMS variable."
exit 1
fi
if [ "${EFI_TRIPLE}" = "" ]; then
if [ "${EFI_ARCH}" = "IA32" ]; then
triple_arch=i386
else
triple_arch=x86_64
fi
if [ "${EFI_TOOLCHAIN}" = "XCODE5" ]; then
export EFI_TRIPLE="${triple_arch}-apple-macosx"
elif [ "${EFI_TOOLCHAIN}" = "CLANGPDB" ] || [ "${EFI_TOOLCHAIN}" = "CLANGDWARF" ]; then
export EFI_TRIPLE="${triple_arch}-pc-windows-msvc"
else
export EFI_TRIPLE="${triple_arch}-linux-gnu"
fi
fi
}
choose_debugger
if [ "${EFI_DEBUGGER}" = "GDB" ] || [ "${EFI_DEBUGGER}" = "gdb" ]; then
"${GDB}" -ex "set arch i386:x86-64:intel" \
-ex "target remote ${EFI_HOST}:${EFI_PORT}" \
-ex "source Scripts/gdb_uefi.py" \
-ex "set pagination off" \
-ex "reload-uefi" \
-ex "b DebugBreak" \
"${EFI_SYMS}"
elif [ "${EFI_DEBUGGER}" = "LLDB" ] || [ "${EFI_DEBUGGER}" = "lldb" ]; then
"$LLDB" -o "settings set plugin.process.gdb-remote.target-definition-file Scripts/x86_64_target_definition.py" \
-o "gdb-remote ${EFI_HOST}:${EFI_PORT}" \
-o "target create ${EFI_SYMS_PDB} ${EFI_SYMS}" \
-o "command script import Scripts/lldb_uefi.py" \
-o "command script add -c lldb_uefi.ReloadUefi reload-uefi" \
-o "reload-uefi" \
-o "b DebugBreak"
else
echo "Unsupported debugger ${EFI_DEBUGGER}!"
echo "Hint: use GDB or LLDB in EFI_DEBUGGER variable."
exit 1
fi
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )