~aleteoryx/muditaos

ref: 798a2fb45afee614205ae8d8f7680dc678e251da muditaos/debug_crash_dump.sh -rwxr-xr-x 2.4 KiB
798a2fb4 — Mateusz Grzegorzek [BH-361] Move date to separate directory 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

BUILD_DIR=
CRASH_DUMP=
PURE_ELF=
GDB=${GDB:-arm-none-eabi-gdb}

function perror()
{
    echo "Error:" $@ >&2
}

function print_usage()
{
    echo "debug_crash_dump: This utility uses the CrashDebug stub to load the"
    echo "crash dumps generated by the CrashCatcher fault handler library."
    echo "The dump must be in the CrashCatcher hex dump format. This format is"
    echo "different from the standard core dump file format and this utility"
    echo "won't load standard core files."
    echo
    echo "Usage: [OPTIONS] <builddir> <crashdump>"
    echo
    echo "Options:"
    echo "  -e|--elf   The elf file that generated the crash dump (full path)."
    echo "             '<builddir>/PurePhone.elf' by default."
    echo
    echo "ENV vars:"
    echo "  GDB        The gdb executable used to load the crash dump."
    echo "             'arm-none-eabi-gdb' by default."
}

function parse_args()
{
    local PARAMS=""
    while (( "$#" )); do
        case "$1" in
            -h|--help)
                print_usage
                exit
                ;;
            -e|--elf)
                if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
                    PURE_ELF="$2"
                    shift 2
                else
                    perror "Argument missing for '$1'."
                    print_usage
                    exit 1
                fi
                ;;
            -*|--*=) # unsupported flags
              perror "Unsupported flag: '$1'."
              exit 1
              ;;
            *) # preserve positional arguments
              PARAMS="$PARAMS $1"
              shift
              ;;
        esac
    done

    eval set -- "$PARAMS"

    if [[ $# != 2 ]]; then
        perror "Bad number of arguments."
        print_usage
        exit 1
    fi

    BUILD_DIR="$1"
    CRASH_DUMP="$2"
    PURE_ELF="${PURE_ELF:-$BUILD_DIR/PurePhone.elf}"
}

function exec_gdb()
{
    local CRASH_DEBUG="$BUILD_DIR/host-tools/crashdebug/CrashDebug"

    exec "$GDB" "$PURE_ELF"                                                             \
        -ex "set target-charset ASCII"                                                  \
        -ex "target remote | \"$CRASH_DEBUG\" --elf \"$PURE_ELF\" --dump \"$CRASH_DUMP\""
}

function main()
{
    parse_args $@
    exec_gdb
}

main $@