mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-17 21:48:19 +00:00
fb317779fc
Update Dr. Mingw (ExcHndl) to 0.9.8. Use the new `ExcHndlSetLogFileNameW` function to set the exception log file name using wide characters, to support paths containing unicode. It's not necessary to call `ExcHndlInit` explicitly after loading `exchndl.dll`, as the `DllMain` will already initialize the exception handler when the DLL is loaded. Module offsets are supported by upstream ExcHndl now, so we don't need to provide our own version that supplies the module offset to `ExcHndlInit` anymore. Upstream ExcHndl will also resolve the source code lines for addresses automatically, when the executable is build with debug information. Handle the cases that the exception handling module cannot be loaded and that the `ExcHndlSetLogFileNameW` function cannot be found in the module. Update `scripts/parse_drmingw.sh`: - Parse both old and new module offsets. - Use tabs instead of spaces consistently. - Reset the ANSI color after printing colored messages.
38 lines
1.2 KiB
Bash
Executable file
38 lines
1.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [ -z ${1+x} ]; then
|
|
printf "\e[31m%s\e[30m\n" "Did not pass executable file (full path)"
|
|
printf "\e[31m%s\e[30m\n" "Usage: $0 <executable> <crash_log>"
|
|
echo -en "\e[0m"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z ${2+x} ]; then
|
|
printf "\e[31m%s\e[30m\n" "Did not pass crash log file (full path)"
|
|
printf "\e[31m%s\e[30m\n" "Usage: $0 <executable> <crash_log>"
|
|
echo -en "\e[0m"
|
|
exit 1
|
|
fi
|
|
|
|
TMP_OFFSET=$(grep -E -o "\(with offset [0-9A-F]+\)" "$2" | grep -E -o "[A-F0-9]*")
|
|
if [ -z "$TMP_OFFSET" ]; then
|
|
TMP_OFFSET=$(grep -E -o "^[0-9A-F]+-[0-9A-F]+ .+\.exe$" "$2" | grep -E -o "^[A-F0-9]+")
|
|
if [ -z "$TMP_OFFSET" ]; then
|
|
printf "\e[31m%s\e[30m\n" "Module offset not found; addresses will be absolute"
|
|
echo -en "\e[0m"
|
|
fi
|
|
fi
|
|
|
|
ADDR_PC_REGEX='[0-9A-F]+ [0-9A-F]+ [0-9A-F]+ [0-9A-F]+'
|
|
while read -r line
|
|
do
|
|
if [[ $line =~ $ADDR_PC_REGEX ]]
|
|
then
|
|
TMP_ADDR=$(echo "$line" | grep -E -o -m 1 "[A-F0-9]+ " | head -1)
|
|
ADDR_BASE=$(winedump -f "$1" | grep -E -o "image base[ ]*0x[0-9A-Fa-f]*" | grep -E -o "[0-9A-Fa-f]+" | tail -1)
|
|
REAL_ADDR=$(printf '%X\n' "$(((0x$TMP_ADDR-0x$TMP_OFFSET)+0x$ADDR_BASE))")
|
|
echo "Parsing address: $REAL_ADDR (img base: $ADDR_BASE)"
|
|
addr2line -e "$1" "$REAL_ADDR"
|
|
fi
|
|
done < "$2"
|