scripts/build/debug/300-gdb.sh
author "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
Wed May 25 20:23:48 2011 +0200 (2011-05-25)
branch1.11
changeset 2552 cc285cc98e65
parent 2344 7b6d5c5316ab
child 2490 cce067f0448e
permissions -rw-r--r--
debug/gdb: fix runtime sysroot

This patch sets the runtime sysroot to fix the following GDB warning:
"Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code."

The sysroot can later be changed within gdb with the `set sysroot`
command if necessary.

Signed-off-by: "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
(transplanted from 7690196856ce4a4700d1887cc3adf80acc627c52)
yann@479
     1
# Build script for the gdb debug facility
yann@479
     2
yann@1743
     3
# The version of ncurses to use. Yes, it's hard-coded.
yann@1743
     4
# It's used only internally by crosstool-NG, and is
yann@1743
     5
# not exposed outside, so we don't care about providing
yann@1743
     6
# config options for this.
yann@1743
     7
CT_DEBUG_GDB_NCURSES_VERSION="5.7"
yann@1743
     8
yann@2101
     9
# Ditto for the expat library
yann@2101
    10
CT_DEBUG_GDB_EXPAT_VERSION="2.0.1"
yann@2101
    11
yann@821
    12
do_debug_gdb_parts() {
yann@821
    13
    do_gdb=
yann@821
    14
    do_ncurses=
yann@2101
    15
    do_expat=
yann@821
    16
yann@821
    17
    if [ "${CT_GDB_CROSS}" = y ]; then
yann@1916
    18
        do_gdb=y
yann@821
    19
    fi
yann@821
    20
yann@821
    21
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@821
    22
        do_gdb=y
yann@821
    23
    fi
yann@821
    24
yann@821
    25
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@821
    26
        do_gdb=y
linux@2021
    27
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
    28
        if [ "${CT_MINGW32}" != "y" ]; then
linux@2021
    29
            do_ncurses=y
linux@2021
    30
        fi
yann@2101
    31
        do_expat=y
yann@821
    32
    fi
yann@821
    33
}
yann@821
    34
yann@479
    35
do_debug_gdb_get() {
yann@2303
    36
    local linaro_version
yann@2303
    37
    local linaro_series
yann@2303
    38
    local linaro_base_url="http://launchpad.net/gdb-linaro"
yann@2303
    39
yann@2303
    40
    # Account for the Linaro versioning
yann@2303
    41
    linaro_version="$( echo "${CT_GDB_VERSION}"      \
yann@2303
    42
                       |sed -r -e 's/^linaro-//;'   \
yann@2303
    43
                     )"
yann@2303
    44
    linaro_series="$( echo "${linaro_version}"      \
yann@2303
    45
                      |sed -r -e 's/-.*//;'         \
yann@2303
    46
                    )"
yann@2303
    47
yann@821
    48
    do_debug_gdb_parts
yann@821
    49
yann@821
    50
    if [ "${do_gdb}" = "y" ]; then
yann@1899
    51
        CT_GetFile "gdb-${CT_GDB_VERSION}"                          \
yann@1899
    52
                   {ftp,http}://ftp.gnu.org/pub/gnu/gdb             \
yann@2303
    53
                   ftp://sources.redhat.com/pub/gdb/{,old-}releases \
yann@2303
    54
                   "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
yann@821
    55
    fi
yann@821
    56
yann@821
    57
    if [ "${do_ncurses}" = "y" ]; then
yann@1743
    58
        CT_GetFile "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" .tar.gz  \
yann@573
    59
                   {ftp,http}://ftp.gnu.org/pub/gnu/ncurses \
yann@573
    60
                   ftp://invisible-island.net/ncurses
yann@573
    61
    fi
yann@2101
    62
yann@2101
    63
    if [ "${do_expat}" = "y" ]; then
yann@2101
    64
        CT_GetFile "expat-${CT_DEBUG_GDB_EXPAT_VERSION}" .tar.gz    \
yann@2101
    65
                   http://mesh.dl.sourceforge.net/sourceforge/expat/expat/${CT_DEBUG_GDB_EXPAT_VERSION}
yann@2101
    66
    fi
yann@479
    67
}
yann@479
    68
yann@479
    69
do_debug_gdb_extract() {
yann@821
    70
    do_debug_gdb_parts
yann@821
    71
yann@821
    72
    if [ "${do_gdb}" = "y" ]; then
yann@1899
    73
        CT_Extract "gdb-${CT_GDB_VERSION}"
yann@1901
    74
        CT_Patch "gdb" "${CT_GDB_VERSION}"
yann@821
    75
    fi
yann@821
    76
yann@821
    77
    if [ "${do_ncurses}" = "y" ]; then
yann@1743
    78
        CT_Extract "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@2326
    79
        CT_DoExecLog ALL chmod -R u+w "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@1901
    80
        CT_Patch "ncurses" "${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@598
    81
    fi
yann@2101
    82
yann@2101
    83
    if [ "${do_expat}" = "y" ]; then
yann@2101
    84
        CT_Extract "expat-${CT_DEBUG_GDB_EXPAT_VERSION}"
yann@2101
    85
        CT_Patch "expat" "${CT_DEBUG_GDB_EXPAT_VERSION}"
yann@2101
    86
    fi
yann@479
    87
}
yann@479
    88
yann@479
    89
do_debug_gdb_build() {
yann@1481
    90
    local -a extra_config
yann@1481
    91
linux@2021
    92
    do_debug_gdb_parts
linux@2021
    93
yann@1899
    94
    gdb_src_dir="${CT_SRC_DIR}/gdb-${CT_GDB_VERSION}"
yann@479
    95
yann@479
    96
    # Version 6.3 and below behave badly with gdbmi
yann@479
    97
    case "${CT_GDB_VERSION}" in
yann@1481
    98
        6.2*|6.3)   extra_config+=("--disable-gdbmi");;
yann@479
    99
    esac
yann@479
   100
yann@479
   101
    if [ "${CT_GDB_CROSS}" = "y" ]; then
yann@1481
   102
        local -a cross_extra_config
yann@1481
   103
yann@479
   104
        CT_DoStep INFO "Installing cross-gdb"
yann@479
   105
        CT_DoLog EXTRA "Configuring cross-gdb"
yann@479
   106
yann@479
   107
        mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   108
        cd "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   109
yann@1481
   110
        cross_extra_config=("${extra_config[@]}")
yann@583
   111
        case "${CT_THREADS}" in
yann@1481
   112
            none)   cross_extra_config+=("--disable-threads");;
yann@1481
   113
            *)      cross_extra_config+=("--enable-threads");;
yann@583
   114
        esac
yann@583
   115
yann@479
   116
        CC_for_gdb=
yann@479
   117
        LD_for_gdb=
yann@583
   118
        if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
yann@479
   119
            CC_for_gdb="gcc -static"
yann@479
   120
            LD_for_gdb="ld -static"
yann@479
   121
        fi
yann@479
   122
yann@821
   123
        gdb_cross_configure="${gdb_src_dir}/configure"
yann@821
   124
yann@1481
   125
        CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
yann@602
   126
yann@2344
   127
        CT_DoExecLog CFG                                \
yann@479
   128
        CC="${CC_for_gdb}"                              \
yann@583
   129
        LD="${LD_for_gdb}"                              \
yann@821
   130
        "${gdb_cross_configure}"                        \
yann@479
   131
            --build=${CT_BUILD}                         \
yann@479
   132
            --host=${CT_HOST}                           \
yann@479
   133
            --target=${CT_TARGET}                       \
yann@479
   134
            --prefix="${CT_PREFIX_DIR}"                 \
yann@479
   135
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
benoit@2476
   136
            --with-sysroot="${CT_SYSROOT_DIR}"          \
yann@801
   137
            --disable-werror                            \
yann@1481
   138
            "${cross_extra_config[@]}"
yann@479
   139
yann@479
   140
        CT_DoLog EXTRA "Building cross-gdb"
yann@2275
   141
        CT_DoExecLog ALL make ${JOBSFLAGS}
yann@479
   142
yann@479
   143
        CT_DoLog EXTRA "Installing cross-gdb"
yann@669
   144
        CT_DoExecLog ALL make install
yann@479
   145
yann@479
   146
        CT_EndStep
yann@479
   147
    fi
yann@479
   148
yann@479
   149
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@1481
   150
        local -a native_extra_config
yann@1481
   151
        local -a ncurses_opt
yann@2100
   152
        local -a gdb_native_CFLAGS
yann@1481
   153
yann@573
   154
        CT_DoStep INFO "Installing native gdb"
yann@573
   155
yann@2100
   156
        native_extra_config=("${extra_config[@]}")
yann@2100
   157
linux@2021
   158
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   159
        if [ "${do_ncurses}" = "y" ]; then
linux@2021
   160
            CT_DoLog EXTRA "Building static target ncurses"
yann@1281
   161
linux@2021
   162
            [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
linux@2021
   163
            [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
yann@1281
   164
linux@2021
   165
            mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
linux@2021
   166
            cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   167
linux@2021
   168
            # Use build = CT_REAL_BUILD so that configure thinks it is
linux@2021
   169
            # cross-compiling, and thus will use the ${CT_BUILD}-*
linux@2021
   170
            # tools instead of searching for the native ones...
anthony@2154
   171
            CT_DoExecLog CFG                                                    \
linux@2021
   172
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   173
                --build=${CT_BUILD}                                             \
linux@2021
   174
                --host=${CT_BUILD}                                              \
linux@2021
   175
                --prefix=/usr                                                   \
linux@2021
   176
                --without-shared                                                \
linux@2021
   177
                --enable-symlinks                                               \
linux@2021
   178
                --with-build-cc=${CT_REAL_BUILD}-gcc                            \
linux@2021
   179
                --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
linux@2021
   180
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
linux@2021
   181
                "${ncurses_opts[@]}"
yann@1264
   182
linux@2021
   183
            # Under some operating systems (eg. Winblows), there is an
linux@2021
   184
            # extension appended to executables. Find that.
linux@2021
   185
            tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
yann@1267
   186
yann@2275
   187
            CT_DoExecLog ALL make ${JOBSFLAGS} -C include
yann@2275
   188
            CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
yann@1264
   189
linux@2021
   190
            CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
linux@2021
   191
            CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
yann@1264
   192
linux@2021
   193
            mkdir -p "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   194
            cd "${CT_BUILD_DIR}/build-ncurses"
yann@573
   195
anthony@2154
   196
            CT_DoExecLog CFG                                                    \
linux@2021
   197
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   198
                --build=${CT_BUILD}                                             \
linux@2021
   199
                --host=${CT_TARGET}                                             \
linux@2021
   200
                --with-build-cc=${CT_BUILD}-gcc                                 \
linux@2021
   201
                --with-build-cpp=${CT_BUILD}-gcc                                \
linux@2021
   202
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
yann@2100
   203
                --prefix="${CT_BUILD_DIR}/static-target"                        \
linux@2021
   204
                --without-shared                                                \
linux@2021
   205
                --without-sysmouse                                              \
linux@2021
   206
                --without-progs                                                 \
linux@2021
   207
                --enable-termcap                                                \
linux@2021
   208
                "${ncurses_opts[@]}"
yann@573
   209
yann@2275
   210
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@573
   211
linux@2021
   212
            CT_DoExecLog ALL make install
yann@573
   213
linux@2021
   214
            # We no longer need the temporary tic. Remove it
yann@2022
   215
            CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
yann@2100
   216
yann@2100
   217
            native_extra_config+=("--with-curses")
yann@2100
   218
            # There's no better way to tell gdb where to find -lcurses... :-(
yann@2100
   219
            gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
yann@2100
   220
            gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
linux@2021
   221
        fi # do_ncurses
yann@1281
   222
yann@2101
   223
        if [ "${do_expat}" = "y" ]; then
yann@2101
   224
            CT_DoLog EXTRA "Building static target expat"
yann@2101
   225
yann@2101
   226
            mkdir -p "${CT_BUILD_DIR}/expat-build"
yann@2101
   227
            cd "${CT_BUILD_DIR}/expat-build"
yann@2101
   228
anthony@2154
   229
            CT_DoExecLog CFG                                                \
yann@2101
   230
            "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
yann@2101
   231
                --build=${CT_BUILD}                                         \
yann@2101
   232
                --host=${CT_TARGET}                                         \
yann@2101
   233
                --prefix="${CT_BUILD_DIR}/static-target"                    \
yann@2101
   234
                --enable-static                                             \
yann@2101
   235
                --disable-shared
yann@2101
   236
yann@2275
   237
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@2101
   238
            CT_DoExecLog ALL make install
yann@2101
   239
yann@2101
   240
            native_extra_config+=("--with-expat")
yann@2101
   241
            native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
yann@2101
   242
        fi # do_expat
yann@2101
   243
yann@479
   244
        CT_DoLog EXTRA "Configuring native gdb"
yann@479
   245
yann@479
   246
        mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   247
        cd "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   248
yann@583
   249
        case "${CT_THREADS}" in
yann@1481
   250
            none)   native_extra_config+=("--disable-threads");;
yann@1481
   251
            *)      native_extra_config+=("--enable-threads");;
yann@583
   252
        esac
yann@583
   253
yann@583
   254
        if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
yann@583
   255
            CC_for_gdb="${CT_TARGET}-gcc -static"
yann@583
   256
            LD_for_gdb="${CT_TARGET}-ld -static"
yann@626
   257
        else
yann@626
   258
            CC_for_gdb="${CT_TARGET}-gcc"
yann@626
   259
            LD_for_gdb="${CT_TARGET}-ld"
yann@583
   260
        fi
yann@583
   261
yann@583
   262
        export ac_cv_func_strncmp_works=yes
yann@583
   263
yann@1481
   264
        CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
yann@602
   265
yann@2344
   266
        CT_DoExecLog CFG                                \
yann@583
   267
        CC="${CC_for_gdb}"                              \
yann@583
   268
        LD="${LD_for_gdb}"                              \
yann@2344
   269
        CFLAGS="${gdb_native_CFLAGS[*]}"                \
yann@479
   270
        "${gdb_src_dir}/configure"                      \
yann@479
   271
            --build=${CT_BUILD}                         \
yann@479
   272
            --host=${CT_TARGET}                         \
yann@479
   273
            --target=${CT_TARGET}                       \
yann@479
   274
            --prefix=/usr                               \
yann@479
   275
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@479
   276
            --without-uiout                             \
yann@479
   277
            --disable-tui                               \
yann@479
   278
            --disable-gdbtk                             \
yann@479
   279
            --without-x                                 \
yann@479
   280
            --disable-sim                               \
yann@583
   281
            --disable-werror                            \
yann@479
   282
            --without-included-gettext                  \
yann@583
   283
            --without-develop                           \
yann@1481
   284
            "${native_extra_config[@]}"
yann@479
   285
yann@479
   286
        CT_DoLog EXTRA "Building native gdb"
yann@2275
   287
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@479
   288
yann@479
   289
        CT_DoLog EXTRA "Installing native gdb"
yann@1219
   290
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@479
   291
yann@583
   292
        # Building a native gdb also builds a gdbserver
yann@1219
   293
        find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
yann@583
   294
yann@583
   295
        unset ac_cv_func_strncmp_works
yann@583
   296
linux@2021
   297
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   298
        if [ "${CT_MINGW32}" != "y" ]; then
linux@2021
   299
            CT_DoLog EXTRA "Cleaning up ncurses"
linux@2021
   300
            cd "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   301
            CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
yann@1555
   302
linux@2021
   303
            CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
linux@2021
   304
        fi
yann@1733
   305
yann@1281
   306
        CT_EndStep # native gdb build
yann@583
   307
    fi
yann@583
   308
yann@583
   309
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@1481
   310
        local -a gdbserver_extra_config
yann@1481
   311
yann@583
   312
        CT_DoStep INFO "Installing gdbserver"
yann@583
   313
        CT_DoLog EXTRA "Configuring gdbserver"
yann@583
   314
yann@583
   315
        mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   316
        cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   317
yann@583
   318
        # Workaround for bad versions, where the configure
yann@583
   319
        # script for gdbserver is not executable...
yann@583
   320
        # Bah, GNU folks strike again... :-(
yann@583
   321
        chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
yann@583
   322
yann@583
   323
        gdbserver_LDFLAGS=
yann@583
   324
        if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
yann@583
   325
            gdbserver_LDFLAGS=-static
yann@583
   326
        fi
yann@583
   327
yann@1481
   328
        gdbserver_extra_config=("${extra_config[@]}")
yann@602
   329
yann@2344
   330
        CT_DoExecLog CFG                                \
yann@583
   331
        LDFLAGS="${gdbserver_LDFLAGS}"                  \
yann@583
   332
        "${gdb_src_dir}/gdb/gdbserver/configure"        \
yann@583
   333
            --build=${CT_BUILD}                         \
yann@583
   334
            --host=${CT_TARGET}                         \
yann@583
   335
            --target=${CT_TARGET}                       \
yann@583
   336
            --prefix=/usr                               \
yann@583
   337
            --sysconfdir=/etc                           \
yann@583
   338
            --localstatedir=/var                        \
yann@583
   339
            --includedir="${CT_HEADERS_DIR}"            \
yann@583
   340
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@583
   341
            --program-prefix=                           \
yann@583
   342
            --without-uiout                             \
yann@583
   343
            --disable-tui                               \
yann@583
   344
            --disable-gdbtk                             \
yann@583
   345
            --without-x                                 \
yann@583
   346
            --without-included-gettext                  \
yann@583
   347
            --without-develop                           \
yann@801
   348
            --disable-werror                            \
yann@1481
   349
            "${gdbserver_extra_config[@]}"
yann@583
   350
yann@583
   351
        CT_DoLog EXTRA "Building gdbserver"
yann@2275
   352
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@583
   353
yann@583
   354
        CT_DoLog EXTRA "Installing gdbserver"
yann@1219
   355
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@583
   356
yann@479
   357
        CT_EndStep
yann@479
   358
    fi
yann@479
   359
}