diff options
author | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2013-05-09 18:32:34 +0200 |
---|---|---|
committer | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2013-05-09 18:32:34 +0200 |
commit | 76d9f005ffcd6e8a8500efea38b508e440b344f0 (patch) | |
tree | 77bde05b436472f1437d876add1ddc1516cb789e /meta-linaro/recipes-devtools | |
parent | 6a9ddcafc7169a829ed64810f1f47824eee7a1f3 (diff) |
gdb: add 7.6 (on a way to OE Core)
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
Diffstat (limited to 'meta-linaro/recipes-devtools')
11 files changed, 2327 insertions, 0 deletions
diff --git a/meta-linaro/recipes-devtools/gdb/gdb-7.6.inc b/meta-linaro/recipes-devtools/gdb/gdb-7.6.inc new file mode 100644 index 00000000..00cb6eea --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb-7.6.inc @@ -0,0 +1,10 @@ +LICENSE="GPLv2 & GPLv3 & LGPLv2 & LGPLv3" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \ + file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674" + +S = "${WORKDIR}/${BPN}-${PV}" + +SRC_URI[md5sum] = "a9836707337e5f7bf76a009a8904f470" +SRC_URI[sha256sum] = "8070389a5dcc104eb0be483d582729f98ed4d761ad19cedd3f17b5d2502faa36" diff --git a/meta-linaro/recipes-devtools/gdb/gdb-cross-canadian_7.6.bb b/meta-linaro/recipes-devtools/gdb/gdb-cross-canadian_7.6.bb new file mode 100644 index 00000000..7f6e343d --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb-cross-canadian_7.6.bb @@ -0,0 +1,3 @@ +require recipes-devtools/gdb/gdb-common.inc +require recipes-devtools/gdb/gdb-cross-canadian.inc +require gdb-7.6.inc diff --git a/meta-linaro/recipes-devtools/gdb/gdb-cross_7.6.bb b/meta-linaro/recipes-devtools/gdb/gdb-cross_7.6.bb new file mode 100644 index 00000000..c24563d9 --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb-cross_7.6.bb @@ -0,0 +1,4 @@ +require recipes-devtools/gdb/gdb-cross.inc +require gdb-7.6.inc + +SRC_URI += "file://sim-install-6.6.patch" diff --git a/meta-linaro/recipes-devtools/gdb/gdb/gdbserver-cflags-last.diff b/meta-linaro/recipes-devtools/gdb/gdb/gdbserver-cflags-last.diff new file mode 100644 index 00000000..4dfc419c --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/gdbserver-cflags-last.diff @@ -0,0 +1,25 @@ +Upstream-Status: Pending + +--- + gdb/gdbserver/Makefile.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- gdb/gdbserver/Makefile.in.orig ++++ gdb/gdbserver/Makefile.in +@@ -118,14 +118,14 @@ WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_C + # CFLAGS is specifically reserved for setting from the command line + # when running make. I.E. "make CFLAGS=-Wmissing-prototypes". + CFLAGS = @CFLAGS@ + + # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. +-INTERNAL_CFLAGS_BASE = ${CFLAGS} ${GLOBAL_CFLAGS} \ ++INTERNAL_CFLAGS_BASE = ${GLOBAL_CFLAGS} \ + ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} + INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS) +-INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER ++INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) ${CFLAGS} -DGDBSERVER + + # LDFLAGS is specifically reserved for setting from the command line + # when running make. + LDFLAGS = @LDFLAGS@ + INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@ diff --git a/meta-linaro/recipes-devtools/gdb/gdb/kill_arm_map_symbols.patch b/meta-linaro/recipes-devtools/gdb/gdb/kill_arm_map_symbols.patch new file mode 100644 index 00000000..9fc45b9f --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/kill_arm_map_symbols.patch @@ -0,0 +1,26 @@ +Upstream-Status: Inappropriate [embedded specific] + +Index: gdb-7.3/gdb/arm-tdep.c +=================================================================== +--- gdb-7.3.orig/gdb/arm-tdep.c 2011-05-17 14:27:01.000000000 -0700 ++++ gdb-7.3/gdb/arm-tdep.c 2011-08-05 22:29:58.784201850 -0700 +@@ -7806,6 +7806,19 @@ + static void + arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym) + { ++ ++ /* FIXME: We want gdb to ignore the ARM ELF mapping symbols when ++ displaying disassembly so we use this horrible hack here to ++ artifically set their address to the highest possible value. ++ This is wrong of course, and it prevents the symbols from being ++ used for their intended purpose - to distinguish between ARM ++ and THUMB code. So we ought to find a better way to do this. */ ++ if (bfd_asymbol_name (sym) ++ && bfd_asymbol_name (sym)[0] == '$' ++ && bfd_asymbol_name (sym)[1] != 0 ++ && bfd_asymbol_name (sym)[2] == 0) ++ SYMBOL_VALUE_ADDRESS(msym) = (CORE_ADDR) 0x7ffffffc; ++ + if (ARM_SYM_BRANCH_TYPE (&((elf_symbol_type *)sym)->internal_elf_sym) + == ST_BRANCH_TO_THUMB) + MSYMBOL_SET_SPECIAL (msym); diff --git a/meta-linaro/recipes-devtools/gdb/gdb/libiberty-cross.patch b/meta-linaro/recipes-devtools/gdb/gdb/libiberty-cross.patch new file mode 100644 index 00000000..d051fdf1 --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/libiberty-cross.patch @@ -0,0 +1,632 @@ +Upstream-Status: Pending + +--- libiberty/configure.in.old 2004-03-31 21:25:25.000000000 +0100 ++++ libiberty/configure.in 2004-03-31 21:18:02.000000000 +0100 +@@ -100,6 +100,7 @@ + AC_CHECK_TOOL(RANLIB, ranlib, :) + + LIB_AC_PROG_CC ++AC_PROG_CC_WORKS + + AC_PROG_CC_C_O + # autoconf is lame and doesn't give us any substitution variable for this. +@@ -402,7 +403,6 @@ + + # We haven't set the list of objects yet. Use the standard autoconf + # tests. This will only work if the compiler works. +- AC_PROG_CC_WORKS + AC_REPLACE_FUNCS($funcs) + libiberty_AC_FUNC_C_ALLOCA + AC_FUNC_VFORK + +--- libiberty/configure.old 2003-06-19 21:05:35.000000000 +0100 ++++ libiberty/configure 2004-03-31 21:35:12.000000000 +0100 +@@ -1000,13 +1000,60 @@ + fi + + ++echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ++echo "configure:1005: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ++ ++ac_ext=c ++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ++cross_compiling=$ac_cv_prog_cc_cross ++ ++cat > conftest.$ac_ext << EOF ++ ++#line 1016 "configure" ++#include "confdefs.h" ++ ++main(){return(0);} ++EOF ++if { (eval echo configure:1021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++ ac_cv_prog_cc_works=yes ++ # If we can't run a trivial program, we are probably using a cross compiler. ++ if (./conftest; exit) 2>/dev/null; then ++ ac_cv_prog_cc_cross=no ++ else ++ ac_cv_prog_cc_cross=yes ++ fi ++else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ ac_cv_prog_cc_works=no ++fi ++rm -fr conftest* ++ac_ext=c ++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ++cross_compiling=$ac_cv_prog_cc_cross ++ ++echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 ++if test $ac_cv_prog_cc_works = no; then ++ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } ++fi ++echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ++echo "configure:1047: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 ++echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 ++cross_compiling=$ac_cv_prog_cc_cross ++ + + if test "x$CC" != xcc; then + echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 +-echo "configure:1007: checking whether $CC and cc understand -c and -o together" >&5 ++echo "configure:1054: checking whether $CC and cc understand -c and -o together" >&5 + else + echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 +-echo "configure:1010: checking whether cc understands -c and -o together" >&5 ++echo "configure:1057: checking whether cc understands -c and -o together" >&5 + fi + set dummy $CC; ac_cc="`echo $2 | + sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" +@@ -1018,16 +1065,16 @@ + # We do the test twice because some compilers refuse to overwrite an + # existing .o file with -o, though they will create one. + ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' +-if { (eval echo configure:1022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && +- test -f conftest.o && { (eval echo configure:1023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; ++if { (eval echo configure:1069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ++ test -f conftest.o && { (eval echo configure:1070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. +- if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ++ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + ac_try='cc -c conftest.c -o conftest.o 1>&5' +- if { (eval echo configure:1030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && +- test -f conftest.o && { (eval echo configure:1031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; ++ if { (eval echo configure:1077: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ++ test -f conftest.o && { (eval echo configure:1078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + then + # cc works too. + : +@@ -1063,7 +1110,7 @@ + + + echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 +-echo "configure:1067: checking for POSIXized ISC" >&5 ++echo "configure:1114: checking for POSIXized ISC" >&5 + if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 + then +@@ -1084,12 +1131,12 @@ + fi + + echo $ac_n "checking for working const""... $ac_c" 1>&6 +-echo "configure:1088: checking for working const" >&5 ++echo "configure:1135: checking for working const" >&5 + if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1093 "configure" ++#line 1140 "configure" + #include "confdefs.h" + + int main() { +@@ -1138,7 +1185,7 @@ + + ; return 0; } + EOF +-if { (eval echo configure:1142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes + else +@@ -1159,21 +1206,21 @@ + fi + + echo $ac_n "checking for inline""... $ac_c" 1>&6 +-echo "configure:1163: checking for inline" >&5 ++echo "configure:1210: checking for inline" >&5 + if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + ac_cv_c_inline=no + for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <<EOF +-#line 1170 "configure" ++#line 1217 "configure" + #include "confdefs.h" + + int main() { + } $ac_kw foo() { + ; return 0; } + EOF +-if { (eval echo configure:1177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1224: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break + else +@@ -1199,14 +1246,14 @@ + esac + + echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +-echo "configure:1203: checking whether byte ordering is bigendian" >&5 ++echo "configure:1250: checking whether byte ordering is bigendian" >&5 + if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + ac_cv_c_bigendian=unknown + # See if sys/param.h defines the BYTE_ORDER macro. + cat > conftest.$ac_ext <<EOF +-#line 1210 "configure" ++#line 1257 "configure" + #include "confdefs.h" + #include <sys/types.h> + #include <sys/param.h> +@@ -1217,11 +1264,11 @@ + #endif + ; return 0; } + EOF +-if { (eval echo configure:1221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. + cat > conftest.$ac_ext <<EOF +-#line 1225 "configure" ++#line 1272 "configure" + #include "confdefs.h" + #include <sys/types.h> + #include <sys/param.h> +@@ -1232,7 +1279,7 @@ + #endif + ; return 0; } + EOF +-if { (eval echo configure:1236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes + else +@@ -1252,7 +1299,7 @@ + echo $ac_n "cross-compiling... " 2>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1256 "configure" ++#line 1303 "configure" + #include "confdefs.h" + main () { + /* Are we little or big endian? From Harbison&Steele. */ +@@ -1265,7 +1312,7 @@ + exit (u.c[sizeof (long) - 1] == 1); + } + EOF +-if { (eval echo configure:1269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_c_bigendian=no + else +@@ -1283,7 +1330,7 @@ + echo "$ac_t""$ac_cv_c_bigendian" 1>&6 + if test $ac_cv_c_bigendian = unknown; then + echo $ac_n "checking to probe for byte ordering""... $ac_c" 1>&6 +-echo "configure:1287: checking to probe for byte ordering" >&5 ++echo "configure:1334: checking to probe for byte ordering" >&5 + + cat >conftest.c <<EOF + short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +@@ -1352,7 +1399,7 @@ + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +-echo "configure:1356: checking for a BSD compatible install" >&5 ++echo "configure:1403: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1413,7 +1460,7 @@ + # able to link anything, it had better be able to at least compile + # something. + echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +-echo "configure:1417: checking how to run the C preprocessor" >&5 ++echo "configure:1464: checking how to run the C preprocessor" >&5 + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -1428,13 +1475,13 @@ + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext <<EOF +-#line 1432 "configure" ++#line 1479 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1485: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1445,13 +1492,13 @@ + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext <<EOF +-#line 1449 "configure" ++#line 1496 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1455: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1462,13 +1509,13 @@ + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext <<EOF +-#line 1466 "configure" ++#line 1513 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1519: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1496,17 +1543,17 @@ + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +-echo "configure:1500: checking for $ac_hdr" >&5 ++echo "configure:1547: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1505 "configure" ++#line 1552 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1510: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* +@@ -1533,12 +1580,12 @@ + done + + echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 +-echo "configure:1537: checking for sys/wait.h that is POSIX.1 compatible" >&5 ++echo "configure:1584: checking for sys/wait.h that is POSIX.1 compatible" >&5 + if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1542 "configure" ++#line 1589 "configure" + #include "confdefs.h" + #include <sys/types.h> + #include <sys/wait.h> +@@ -1554,7 +1601,7 @@ + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; return 0; } + EOF +-if { (eval echo configure:1558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1605: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_sys_wait_h=yes + else +@@ -1575,12 +1622,12 @@ + fi + + echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 +-echo "configure:1579: checking whether time.h and sys/time.h may both be included" >&5 ++echo "configure:1626: checking whether time.h and sys/time.h may both be included" >&5 + if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1584 "configure" ++#line 1631 "configure" + #include "confdefs.h" + #include <sys/types.h> + #include <sys/time.h> +@@ -1589,7 +1636,7 @@ + struct tm *tp; + ; return 0; } + EOF +-if { (eval echo configure:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_time=yes + else +@@ -1611,19 +1658,19 @@ + + + echo $ac_n "checking whether errno must be declared""... $ac_c" 1>&6 +-echo "configure:1615: checking whether errno must be declared" >&5 ++echo "configure:1662: checking whether errno must be declared" >&5 + if eval "test \"`echo '$''{'libiberty_cv_declare_errno'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1620 "configure" ++#line 1667 "configure" + #include "confdefs.h" + #include <errno.h> + int main() { + int x = errno; + ; return 0; } + EOF +-if { (eval echo configure:1627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + libiberty_cv_declare_errno=no + else +@@ -1645,12 +1692,12 @@ + + + echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +-echo "configure:1649: checking for ANSI C header files" >&5 ++echo "configure:1696: checking for ANSI C header files" >&5 + if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1654 "configure" ++#line 1701 "configure" + #include "confdefs.h" + #include <stdlib.h> + #include <stdarg.h> +@@ -1658,7 +1705,7 @@ + #include <float.h> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* +@@ -1675,7 +1722,7 @@ + if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat > conftest.$ac_ext <<EOF +-#line 1679 "configure" ++#line 1726 "configure" + #include "confdefs.h" + #include <string.h> + EOF +@@ -1693,7 +1740,7 @@ + if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat > conftest.$ac_ext <<EOF +-#line 1697 "configure" ++#line 1744 "configure" + #include "confdefs.h" + #include <stdlib.h> + EOF +@@ -1714,7 +1761,7 @@ + : + else + cat > conftest.$ac_ext <<EOF +-#line 1718 "configure" ++#line 1765 "configure" + #include "confdefs.h" + #include <ctype.h> + #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +@@ -1725,7 +1772,7 @@ + exit (0); } + + EOF +-if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + : + else +@@ -1749,12 +1796,12 @@ + fi + + echo $ac_n "checking for uintptr_t""... $ac_c" 1>&6 +-echo "configure:1753: checking for uintptr_t" >&5 ++echo "configure:1800: checking for uintptr_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_uintptr_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1758 "configure" ++#line 1805 "configure" + #include "confdefs.h" + #include <sys/types.h> + #if STDC_HEADERS +@@ -1790,12 +1837,12 @@ + + + echo $ac_n "checking for pid_t""... $ac_c" 1>&6 +-echo "configure:1794: checking for pid_t" >&5 ++echo "configure:1841: checking for pid_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1799 "configure" ++#line 1846 "configure" + #include "confdefs.h" + #include <sys/types.h> + #if STDC_HEADERS +@@ -1895,12 +1942,12 @@ + realpath canonicalize_file_name + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +-echo "configure:1899: checking for $ac_func" >&5 ++echo "configure:1946: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +-#line 1904 "configure" ++#line 1951 "configure" + #include "confdefs.h" + /* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +@@ -1923,7 +1970,7 @@ + + ; return 0; } + EOF +-if { (eval echo configure:1927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else +@@ -2152,53 +2199,6 @@ + + # We haven't set the list of objects yet. Use the standard autoconf + # tests. This will only work if the compiler works. +- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +-echo "configure:2157: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +- +-ac_ext=c +-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +-cross_compiling=$ac_cv_prog_cc_cross +- +-cat > conftest.$ac_ext << EOF +- +-#line 2168 "configure" +-#include "confdefs.h" +- +-main(){return(0);} +-EOF +-if { (eval echo configure:2173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +- ac_cv_prog_cc_works=yes +- # If we can't run a trivial program, we are probably using a cross compiler. +- if (./conftest; exit) 2>/dev/null; then +- ac_cv_prog_cc_cross=no +- else +- ac_cv_prog_cc_cross=yes +- fi +-else +- echo "configure: failed program was:" >&5 +- cat conftest.$ac_ext >&5 +- ac_cv_prog_cc_works=no +-fi +-rm -fr conftest* +-ac_ext=c +-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +-cross_compiling=$ac_cv_prog_cc_cross +- +-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +-if test $ac_cv_prog_cc_works = no; then +- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +-fi +-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +-echo "configure:2199: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +-cross_compiling=$ac_cv_prog_cc_cross +- + for ac_func in $funcs + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +@@ -2900,7 +2900,7 @@ + esac + + +-for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h ++for ac_hdr in unistd.h + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +@@ -3032,24 +3032,11 @@ + #include <fcntl.h> + #include <sys/mman.h> + +-#if HAVE_SYS_TYPES_H +-# include <sys/types.h> +-#endif +- +-#if HAVE_STDLIB_H +-# include <stdlib.h> +-#endif +- +-#if HAVE_SYS_STAT_H +-# include <sys/stat.h> +-#endif +- +-#if HAVE_UNISTD_H +-# include <unistd.h> +-#endif +- + /* This mess was copied from the GNU getpagesize.h. */ + #ifndef HAVE_GETPAGESIZE ++# ifdef HAVE_UNISTD_H ++# include <unistd.h> ++# endif + + /* Assume that all systems that can run configure have sys/param.h. */ + # ifndef HAVE_SYS_PARAM_H +@@ -3157,7 +3144,7 @@ + } + + EOF +-if { (eval echo configure:3161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:3148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_func_mmap_fixed_mapped=yes + else +@@ -3181,7 +3168,7 @@ + + + echo $ac_n "checking for working strncmp""... $ac_c" 1>&6 +-echo "configure:3185: checking for working strncmp" >&5 ++echo "configure:3172: checking for working strncmp" >&5 + if eval "test \"`echo '$''{'ac_cv_func_strncmp_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3189,7 +3176,7 @@ + ac_cv_func_strncmp_works=no + else + cat > conftest.$ac_ext <<EOF +-#line 3193 "configure" ++#line 3180 "configure" + #include "confdefs.h" + + /* Test by Jim Wilson and Kaveh Ghazi. +@@ -3253,7 +3240,7 @@ + } + + EOF +-if { (eval echo configure:3257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:3244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_func_strncmp_works=yes + else diff --git a/meta-linaro/recipes-devtools/gdb/gdb/renesas-sh-native-support.patch b/meta-linaro/recipes-devtools/gdb/gdb/renesas-sh-native-support.patch new file mode 100644 index 00000000..15ff6201 --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/renesas-sh-native-support.patch @@ -0,0 +1,1379 @@ +Description: Add Renesas SH (sh4) support + Add support for Renesas SH (sh4) architecture. + . + gdb (7.4-1~cvs20111117.2) experimental; urgency=low + . + * Add Renesas SH (sh4) support (Closes: #576242) + - Thanks Nobuhiro Iwamatsu, Takashi Yoshii. +Author: Hector Oron <zumbi@debian.org> +Bug-Debian: http://bugs.debian.org/576242 + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Forwarded: <no|not-needed|url proving that it has been forwarded> +Last-Update: <2011-11-17> + + +Upstream-Status: Pending +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +Index: gdb-7.5/gdb/configure.host +=================================================================== +--- gdb-7.5.orig/gdb/configure.host 2012-05-30 12:41:34.000000000 -0700 ++++ gdb-7.5/gdb/configure.host 2012-09-19 14:40:42.974609772 -0700 +@@ -140,6 +140,7 @@ + + s390*-*-*) gdb_host=s390 ;; + ++sh*-*-linux*) gdb_host=linux ;; + sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu) + gdb_host=nbsd ;; + sh*-*-openbsd*) gdb_host=nbsd ;; +Index: gdb-7.5/gdb/Makefile.in +=================================================================== +--- gdb-7.5.orig/gdb/Makefile.in 2012-07-02 08:29:33.000000000 -0700 ++++ gdb-7.5/gdb/Makefile.in 2012-09-19 14:40:42.974609772 -0700 +@@ -1493,6 +1493,7 @@ + score-tdep.c \ + ser-go32.c ser-pipe.c ser-tcp.c ser-mingw.c \ + sh-tdep.c sh64-tdep.c shnbsd-tdep.c shnbsd-nat.c \ ++ sh-linux-tdep.c sh-linux-nat.c \ + sol2-tdep.c \ + solib-irix.c solib-svr4.c solib-sunos.c \ + sparc-linux-nat.c sparc-linux-tdep.c \ +Index: gdb-7.5/gdb/sh-linux-tdep.c +=================================================================== +--- gdb-7.5.orig/gdb/sh-linux-tdep.c 2012-05-07 06:17:29.000000000 -0700 ++++ gdb-7.5/gdb/sh-linux-tdep.c 2012-09-19 14:46:50.610623784 -0700 +@@ -18,14 +18,37 @@ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + #include "defs.h" ++#include "gdbcore.h" ++#include "frame.h" ++#include "frame-base.h" ++#include "frame-unwind.h" ++#include "dwarf2-frame.h" ++#include "value.h" ++#include "regcache.h" ++#include "inferior.h" + #include "osabi.h" + ++#include "reggroups.h" ++#include "arch-utils.h" ++#include "floatformat.h" + #include "solib-svr4.h" + #include "symtab.h" ++#include "gdb_string.h" ++#include "command.h" ++#include "gdb_assert.h" + + #include "trad-frame.h" + #include "tramp-frame.h" + ++#include <sys/ptrace.h> ++#include <sys/types.h> ++#include <sys/param.h> ++#include <sys/user.h> ++#include <sys/syscall.h> ++ ++#include <asm/ptrace.h> ++ ++#include "regset.h" + #include "glibc-tdep.h" + #include "sh-tdep.h" + #include "linux-tdep.h" +@@ -180,9 +203,505 @@ + sh_linux_rt_sigreturn_init + }; + ++/* Recognizing signal handler frames. */ ++ ++/* GNU/Linux has two flavors of signals. Normal signal handlers, and ++ "realtime" (RT) signals. The RT signals can provide additional ++ information to the signal handler if the SA_SIGINFO flag is set ++ when establishing a signal handler using `sigaction'. It is not ++ unlikely that future versions of GNU/Linux will support SA_SIGINFO ++ for normal signals too. */ ++ ++/* When the SH Linux kernel calls a signal handler and the ++ SA_RESTORER flag isn't set, the return address points to a bit of ++ code on the stack. This function returns whether the PC appears to ++ be within this bit of code. ++ ++ The instruction sequence for normal signals is ++ mov.w 1f,r3 ++ trapa #16 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ 1: .word __NR_sigreturn ++ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x0077. ++ ++ Checking for the code sequence should be somewhat reliable, because ++ the effect is to call the system call sigreturn. This is unlikely ++ to occur anywhere other than a signal trampoline. ++ ++ It kind of sucks that we have to read memory from the process in ++ order to identify a signal trampoline, but there doesn't seem to be ++ any other way. The PC_IN_SIGTRAMP macro in tm-linux.h arranges to ++ only call us if no function name could be identified, which should ++ be the case since the code is on the stack. ++ ++ Detection of signal trampolines for handlers that set the ++ SA_RESTORER flag is in general not possible. Unfortunately this is ++ what the GNU C Library has been doing for quite some time now. ++ However, as of version 2.1.2, the GNU C Library uses signal ++ trampolines (named __restore and __restore_rt) that are identical ++ to the ones used by the kernel. Therefore, these trampolines are ++ supported too. */ ++ ++#define MOVW(n) (0x9300|((n)-2)) /* Move mem word at PC+n to R3 */ ++#define TRAP16 0xc310 /* Syscall w/no args (NR in R3) */ ++#define OR_R0_R0 0x200b /* or r0,r0 (insert to avoid hardware bug) */ ++ ++#define LINUX_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */ ++#define LINUX_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */ ++#define LINUX_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */ ++ ++static const unsigned short linux_sigtramp_code[] = ++{ ++ LINUX_SIGTRAMP_INSN0, ++ LINUX_SIGTRAMP_INSN1, ++ LINUX_SIGTRAMP_INSN2, ++ LINUX_SIGTRAMP_INSN2, ++ LINUX_SIGTRAMP_INSN2, ++ LINUX_SIGTRAMP_INSN2, ++ LINUX_SIGTRAMP_INSN2, ++ __NR_sigreturn ++}; ++ ++#define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code) ++ ++/* If PC is in a sigtramp routine, return the address of the start of ++ the routine. Otherwise, return 0. */ ++ ++static CORE_ADDR ++sh_linux_sigtramp_start (struct frame_info *next_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (next_frame); ++ gdb_byte buf[LINUX_SIGTRAMP_LEN]; ++ ++ /* We only recognize a signal trampoline if PC is at the start of ++ one of the three instructions. We optimize for finding the PC at ++ the start, as will be the case when the trampoline is not the ++ first frame on the stack. We assume that in the case where the ++ PC is not at the start of the instruction sequence, there will be ++ a few trailing readable bytes on the stack. */ ++ ++ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN)) ++ return 0; ++ ++ if (buf[0] != LINUX_SIGTRAMP_INSN0) ++ { ++ if (buf[0] != LINUX_SIGTRAMP_INSN1) ++ return 0; ++ ++ pc -= 2; ++ ++ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN)) ++ return 0; ++ } ++ ++ if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0) ++ return 0; ++ ++ return pc; ++} ++ ++/* This function does the same for RT signals. Here the instruction ++ sequence is ++ mov.w 1f,r3 ++ trapa #16 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ or r0, r0 ++ 1: .word __NR_rt_sigreturn ++ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x00ad. ++ ++ The effect is to call the system call rt_sigreturn. */ ++ ++#define LINUX_RT_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */ ++#define LINUX_RT_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */ ++#define LINUX_RT_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */ ++ ++static const unsigned short linux_rt_sigtramp_code[] = ++{ ++ LINUX_RT_SIGTRAMP_INSN0, ++ LINUX_RT_SIGTRAMP_INSN1, ++ LINUX_RT_SIGTRAMP_INSN2, ++ LINUX_RT_SIGTRAMP_INSN2, ++ LINUX_RT_SIGTRAMP_INSN2, ++ LINUX_RT_SIGTRAMP_INSN2, ++ LINUX_RT_SIGTRAMP_INSN2, ++ __NR_rt_sigreturn ++}; ++ ++#define LINUX_RT_SIGTRAMP_LEN (sizeof linux_rt_sigtramp_code) ++ ++/* If PC is in a RT sigtramp routine, return the address of the start ++ of the routine. Otherwise, return 0. */ ++ ++static CORE_ADDR ++sh_linux_rt_sigtramp_start (struct frame_info *next_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (next_frame); ++ gdb_byte buf[LINUX_RT_SIGTRAMP_LEN]; ++ ++ /* We only recognize a signal trampoline if PC is at the start of ++ one of the two instructions. We optimize for finding the PC at ++ the start, as will be the case when the trampoline is not the ++ first frame on the stack. We assume that in the case where the ++ PC is not at the start of the instruction sequence, there will be ++ a few trailing readable bytes on the stack. */ ++ ++ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_RT_SIGTRAMP_LEN)) ++ return 0; ++ ++ if (buf[0] != LINUX_RT_SIGTRAMP_INSN0) ++ { ++ if (buf[0] != LINUX_RT_SIGTRAMP_INSN1) ++ return 0; ++ ++ pc -= 2; ++ ++ if (!safe_frame_unwind_memory (next_frame, pc, buf, ++ LINUX_RT_SIGTRAMP_LEN)) ++ return 0; ++ } ++ ++ if (memcmp (buf, linux_rt_sigtramp_code, LINUX_RT_SIGTRAMP_LEN) != 0) ++ return 0; ++ ++ return pc; ++} ++ ++/* Return whether PC is in a GNU/Linux sigtramp routine. */ ++ ++static int ++sh_linux_sigtramp_p (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (this_frame); ++ char *name; ++ ++ find_pc_partial_function (pc, &name, NULL, NULL); ++ ++ /* If we have NAME, we can optimize the search. The trampolines are ++ named __restore and __restore_rt. However, they aren't dynamically ++ exported from the shared C library, so the trampoline may appear to ++ be part of the preceding function. This should always be sigaction, ++ __sigaction, or __libc_sigaction (all aliases to the same function). */ ++ if (name == NULL || strstr (name, "sigaction") != NULL) ++ return (sh_linux_sigtramp_start (this_frame) != 0 ++ || sh_linux_rt_sigtramp_start (this_frame) != 0); ++ ++ return (strcmp ("__restore", name) == 0 ++ || strcmp ("__restore_rt", name) == 0); ++} ++ ++/* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */ ++#define SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 12 ++ ++ ++/* Assuming NEXT_FRAME is a frame following a GNU/Linux sigtramp ++ routine, return the address of the associated sigcontext structure. */ ++ ++static CORE_ADDR ++sh_linux_sigcontext_addr (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc; ++ CORE_ADDR sp; ++ ++ sp = get_frame_register_unsigned (this_frame, SP_REGNUM); ++ ++ pc = sh_linux_sigtramp_start (this_frame); ++ if (pc) ++ { ++ return sp; ++ } ++ ++ pc = sh_linux_rt_sigtramp_start (this_frame); ++ if (pc) ++ { ++ CORE_ADDR ucontext_addr; ++ ++ /* The sigcontext structure is part of the user context. A ++ pointer to the user context is passed as the third argument ++ to the signal handler. */ ++ ucontext_addr = get_frame_register_unsigned (this_frame, ARG0_REGNUM+2); ++ return ucontext_addr + SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET; ++ } ++ ++ error ("Couldn't recognize signal trampoline."); ++ return 0; ++} ++ ++/* Signal trampolines. */ ++extern struct sh_frame_cache *sh_alloc_frame_cache (void); ++ ++static struct sh_frame_cache * ++sh_linux_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache) ++{ ++ struct sh_frame_cache *cache; ++ struct gdbarch_tdep *tdep = gdbarch_tdep (get_current_arch ()); ++ CORE_ADDR sigcontext_addr; ++ ++ if (*this_cache) ++ return *this_cache; ++ ++ cache = sh_alloc_frame_cache (); ++ ++ cache->base = get_frame_register_unsigned (this_frame, SP_REGNUM); ++ sigcontext_addr = tdep->sigcontext_addr (this_frame); ++ if (tdep->sc_reg_offset) ++ { ++ int i; ++ ++ gdb_assert (tdep->sc_num_regs <= SH_NUM_REGS); ++ ++ for (i = 0; i < tdep->sc_num_regs; i++) ++ if (tdep->sc_reg_offset[i] != -1) ++ cache->saved_regs[i] = sigcontext_addr + tdep->sc_reg_offset[i]; ++ } ++ ++ *this_cache = cache; ++ return cache; ++} ++ ++static void ++sh_linux_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache, ++ struct frame_id *this_id) ++{ ++ struct sh_frame_cache *cache = ++ sh_linux_sigtramp_frame_cache (this_frame, this_cache); ++ ++ (*this_id) = frame_id_build (cache->base + 64, cache->pc); ++} ++ ++extern struct value * sh_frame_prev_register (); ++static struct value * ++sh_linux_sigtramp_frame_prev_register (struct frame_info *this_frame, ++ void **this_cache, int regnum) ++{ ++ sh_linux_sigtramp_frame_cache (this_frame, this_cache); ++ ++ return sh_frame_prev_register (this_frame, this_cache, regnum); ++} ++ ++static int ++sh_linux_sigtramp_frame_sniffer (const struct frame_unwind *self, ++ struct frame_info *this_frame, ++ void **this_prologue_cache) ++{ ++ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame)); ++ ++ /* We shouldn't even bother if we don't have a sigcontext_addr ++ handler. */ ++ if (tdep->sigcontext_addr == NULL) ++ return 0; ++ ++ if (tdep->sigtramp_p != NULL) ++ { ++ if (tdep->sigtramp_p (this_frame)) ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static const struct frame_unwind sh_linux_sigtramp_frame_unwind = ++{ ++ SIGTRAMP_FRAME, ++ sh_linux_sigtramp_frame_this_id, ++ sh_linux_sigtramp_frame_prev_register, ++ NULL, ++ sh_linux_sigtramp_frame_sniffer ++}; ++ ++/* Supply register REGNUM from the buffer specified by GREGS and LEN ++ in the general-purpose register set REGSET to register cache ++ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ ++ ++void ++sh_supply_gregset (const struct regset *regset, struct regcache *regcache, ++ int regnum, const void *gregs, size_t len) ++{ ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); ++ const char *regs = gregs; ++ int i; ++ ++ gdb_assert (len == tdep->sizeof_gregset); ++ ++ for (i = 0; i < tdep->gregset_num_regs; i++) ++ { ++ if ((regnum == i || regnum == -1) ++ && tdep->gregset_reg_offset[i] != -1) ++ regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]); ++ } ++} ++ ++/* Collect register REGNUM from the register cache REGCACHE and store ++ it in the buffer specified by GREGS and LEN as described by the ++ general-purpose register set REGSET. If REGNUM is -1, do this for ++ all registers in REGSET. */ ++ ++void ++sh_collect_gregset (const struct regset *regset, ++ const struct regcache *regcache, ++ int regnum, void *gregs, size_t len) ++{ ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); ++ char *regs = gregs; ++ int i; ++ ++ gdb_assert (len == tdep->sizeof_gregset); ++ ++ for (i = 0; i < tdep->gregset_num_regs; i++) ++ { ++ if ((regnum == i || regnum == -1) ++ && tdep->gregset_reg_offset[i] != -1) ++ regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]); ++ } ++} ++ ++/* Supply register REGNUM from the buffer specified by FPREGS and LEN ++ in the floating-point register set REGSET to register cache ++ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ ++ ++static void ++sh_supply_fpregset (const struct regset *regset, struct regcache *regcache, ++ int regnum, const void *fpregs, size_t len) ++{ ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); ++ const char *regs = fpregs; ++ int i; ++ ++ gdb_assert (len == tdep->sizeof_fpregset); ++ for (i = 0; i < 16; i++) ++ { ++ if (regnum == i+25 || regnum == -1) ++ regcache_raw_supply (regcache, i+25, regs + i*4); ++ } ++ if (regnum == FPSCR_REGNUM || regnum == -1) ++ regcache_raw_supply (regcache, FPSCR_REGNUM, regs + 32*4); ++ if (regnum == FPUL_REGNUM || regnum == -1) ++ regcache_raw_supply (regcache, FPUL_REGNUM, regs + 33*4); ++} ++ ++/* Collect register REGNUM from the register cache REGCACHE and store ++ it in the buffer specified by FPREGS and LEN as described by the ++ floating-point register set REGSET. If REGNUM is -1, do this for ++ all registers in REGSET. */ ++ ++static void ++sh_collect_fpregset (const struct regset *regset, ++ const struct regcache *regcache, ++ int regnum, void *fpregs, size_t len) ++{ ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); ++ char *regs = fpregs; ++ int i; ++ ++ gdb_assert (len == tdep->sizeof_fpregset); ++ for (i = 0; i < 16; i++) ++ { ++ if (regnum == i+25 || regnum == -1) ++ regcache_raw_collect (regcache, i+25, regs + i*4); ++ } ++ if (regnum == FPSCR_REGNUM || regnum == -1) ++ regcache_raw_collect (regcache, FPSCR_REGNUM, regs + 32*4); ++ if (regnum == FPUL_REGNUM || regnum == -1) ++ regcache_raw_collect (regcache, FPUL_REGNUM, regs + 33*4); ++} ++ ++/* Return the appropriate register set for the core section identified ++ by SECT_NAME and SECT_SIZE. */ ++ ++const struct regset * ++sh_linux_regset_from_core_section (struct gdbarch *gdbarch, ++ const char *sect_name, size_t sect_size) ++{ ++ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++ ++ if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset) ++ { ++ if (tdep->gregset == NULL) ++ tdep->gregset = regset_alloc (gdbarch, sh_supply_gregset, ++ sh_collect_gregset); ++ return tdep->gregset; ++ } ++ ++ if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)) ++ { ++ if (tdep->fpregset == NULL) ++ tdep->fpregset = regset_alloc (gdbarch, sh_supply_fpregset, ++ sh_collect_fpregset); ++ return tdep->fpregset; ++ } ++ ++ return NULL; ++} ++ ++/* The register sets used in GNU/Linux ELF core-dumps are identical to ++ the register sets in `struct user' that are used for a.out ++ core-dumps. These are also used by ptrace(2). The corresponding ++ types are `elf_gregset_t' for the general-purpose registers (with ++ `elf_greg_t' the type of a single GP register) and `elf_fpregset_t' ++ for the floating-point registers. ++ ++ Those types used to be available under the names `gregset_t' and ++ `fpregset_t' too, and GDB used those names in the past. But those ++ names are now used for the register sets used in the `mcontext_t' ++ type, which have a different size and layout. */ ++ ++/* Mapping between the general-purpose registers in `struct user' ++ format and GDB's register cache layout. */ ++ ++/* From <sys/reg.h>. */ ++static int sh_linux_gregset_reg_offset[] = ++{ ++ 0, 4, 8, 12, 16, 20, 24, 28, ++ 32, 36, 40, 44, 48, 52, 56, 60, ++ ++ REG_PC*4, REG_PR*4, REG_GBR*4, -1, ++ REG_MACH*4, REG_MACL*4, REG_SR*4, ++}; ++ ++/* Mapping between the general-purpose registers in `struct ++ sigcontext' format and GDB's register cache layout. */ ++ ++/* From <asm/sigcontext.h>. */ ++static int sh_linux_sc_reg_offset[] = ++{ ++ 4, 8, 12, 16, 20, 24, 28, 32, ++ 36, 40, 44, 48, 52, 56, 60, 64, ++ 68, 72, 80, -1, ++ 84, 88, 76 ++}; ++ + static void + sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + { ++ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++ bfd abfd; ++ ++ tdep->gregset_reg_offset = sh_linux_gregset_reg_offset; ++ tdep->gregset_num_regs = ARRAY_SIZE (sh_linux_gregset_reg_offset); ++ tdep->sizeof_gregset = 23 * 4; ++ ++ tdep->jb_pc_offset = 32; /* From <bits/setjmp.h>. */ ++ ++ tdep->sigtramp_p = sh_linux_sigtramp_p; ++ tdep->sigcontext_addr = sh_linux_sigcontext_addr; ++ tdep->sc_reg_offset = sh_linux_sc_reg_offset; ++ tdep->sc_num_regs = ARRAY_SIZE (sh_linux_sc_reg_offset); ++ ++ frame_unwind_append_unwinder(gdbarch, &sh_linux_sigtramp_frame_unwind); ++ ++ /* If we have a register mapping, enable the generic core file ++ support, unless it has already been enabled. */ ++ if (tdep->gregset_reg_offset ++ && !gdbarch_regset_from_core_section_p (gdbarch)) ++ set_gdbarch_regset_from_core_section (gdbarch, ++ sh_linux_regset_from_core_section); ++ + linux_init_abi (info, gdbarch); + + /* GNU/Linux uses SVR4-style shared libraries. */ +Index: gdb-7.5/gdb/sh-tdep.h +=================================================================== +--- gdb-7.5.orig/gdb/sh-tdep.h 2012-03-01 15:55:40.000000000 -0800 ++++ gdb-7.5/gdb/sh-tdep.h 2012-09-19 14:48:32.406627602 -0700 +@@ -21,6 +21,12 @@ + + /* Contributed by Steve Chamberlain sac@cygnus.com. */ + ++struct frame_info; ++struct gdbarch; ++struct reggroup; ++struct regset; ++struct regcache; ++ + /* Registers for all SH variants. Used also by sh3-rom.c. */ + enum + { +@@ -29,6 +35,7 @@ + ARG0_REGNUM = 4, + ARGLAST_REGNUM = 7, + FP_REGNUM = 14, ++ SP_REGNUM = 15, + PC_REGNUM = 16, + PR_REGNUM = 17, + GBR_REGNUM = 18, +@@ -81,6 +88,24 @@ + FV0_REGNUM = 76, + FV_LAST_REGNUM = 79 + }; ++#define SH_NUM_REGS 67 ++ ++struct sh_frame_cache ++{ ++ /* Base address. */ ++ CORE_ADDR base; ++ LONGEST sp_offset; ++ CORE_ADDR pc; ++ ++ /* Flag showing that a frame has been created in the prologue code. */ ++ int uses_fp; ++ ++ /* Saved registers. */ ++ CORE_ADDR saved_regs[SH_NUM_REGS]; ++ CORE_ADDR saved_sp; ++}; ++ ++extern struct sh_frame_cache *sh_frame_cache (struct frame_info *next_frame, void **this_cache); + + /* This structure describes a register in a core-file. */ + struct sh_corefile_regmap +@@ -89,8 +114,32 @@ + unsigned int offset; + }; + ++/* sh architecture specific information. */ + struct gdbarch_tdep + { ++ /* General-purpose registers. */ ++ struct regset *gregset; ++ int *gregset_reg_offset; ++ int gregset_num_regs; ++ size_t sizeof_gregset; ++ ++ /* Floating-point registers. */ ++ struct regset *fpregset; ++ size_t sizeof_fpregset; ++ ++ /* Offset of saved PC in jmp_buf. */ ++ int jb_pc_offset; ++ ++ /* Detect sigtramp. */ ++ int (*sigtramp_p) (struct frame_info *); ++ ++ /* Get address of sigcontext for sigtramp. */ ++ CORE_ADDR (*sigcontext_addr) (struct frame_info *); ++ ++ /* Offset of registers in `struct sigcontext'. */ ++ int *sc_reg_offset; ++ int sc_num_regs; ++ + /* Non-NULL when debugging from a core file. Provides the offset + where each general-purpose register is stored inside the associated + core file section. */ +Index: gdb-7.5/gdb/sh-linux-nat.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.5/gdb/sh-linux-nat.c 2012-09-19 14:40:42.978609771 -0700 +@@ -0,0 +1,269 @@ ++/* Low level SH interface to ptrace, for GDB when running native. ++ Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++ ++This file is part of GDB. ++ ++This program is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2 of the License, or ++(at your option) any later version. ++ ++This program is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include "defs.h" ++#include "inferior.h" ++#include "gdbcore.h" ++#include "regcache.h" ++#include "linux-nat.h" ++#include "target.h" ++#include "arch-utils.h" ++ ++#include "gdb_assert.h" ++#include "gdb_string.h" ++#include <sys/ptrace.h> ++#include <sys/user.h> ++#include <sys/procfs.h> ++#include <asm/ptrace.h> ++ ++/* Prototypes for supply_gregset etc. */ ++#include "gregset.h" ++#include "sh-tdep.h" ++ ++/* Defines ps_err_e, struct ps_prochandle. */ ++#include "gdb_proc_service.h" ++ ++//#include <asm/elf.h> ++ ++#define SH_LINUX_NUM_REGS 40 ++/* This table must line up with REGISTER_NAME in "sh-tdep.c". */ ++static const int regmap[] = ++{ ++ /* general registers 0-15 */ ++ REG_REG0 , REG_REG0+1 , REG_REG0+2 , REG_REG0+3, ++ REG_REG0+4 , REG_REG0+5 , REG_REG0+6 , REG_REG0+7, ++ REG_REG0+8 , REG_REG0+9 , REG_REG0+10, REG_REG0+11, ++ REG_REG0+12, REG_REG0+13, REG_REG0+14, REG_REG0+15, ++ /* 16 - 22 */ ++ REG_PC, REG_PR, REG_GBR, -1, REG_MACH, REG_MACL, REG_SR, ++ /* 23, 24 */ ++ REG_FPUL, REG_FPSCR, ++ /* floating point registers 25 - 40 */ ++ REG_FPREG0 , REG_FPREG0+1 , REG_FPREG0+2 , REG_FPREG0+3 , ++ REG_FPREG0+4 , REG_FPREG0+5 , REG_FPREG0+6 , REG_FPREG0+7 , ++ REG_FPREG0+8 , REG_FPREG0+9 , REG_FPREG0+10, REG_FPREG0+11, ++ REG_FPREG0+12, REG_FPREG0+13, REG_FPREG0+14, REG_FPREG0+15, ++}; ++ ++CORE_ADDR ++register_u_addr (CORE_ADDR blockend, int regnum) ++{ ++ if (regnum < 0 || regnum >= sizeof regmap/sizeof regmap[0]) ++ return (CORE_ADDR)-1; ++ return (blockend + 4 * regmap[regnum]); ++} ++ ++ ++/* Return the address in the core dump or inferior of register REGNO. ++ BLOCKEND is the address of the end of the user structure. */ ++ ++CORE_ADDR ++register_addr (int regno, CORE_ADDR blockend) ++{ ++ CORE_ADDR addr; ++ ++ if (regno < 0 || regno >= SH_LINUX_NUM_REGS) { ++ internal_error (__FILE__, __LINE__, ++ _("Got request for bad register number %d."), regno); ++ } ++ ++ REGISTER_U_ADDR (addr, blockend, regno); ++ ++ return addr; ++} ++ ++/* Fetch one register. */ ++ ++static void ++fetch_register (struct regcache *regcache, int tid, int regno) ++{ ++ int val; ++ ++ if (cannot_fetch_register (regno)) ++ { ++ regcache_raw_supply (regcache, regno, NULL); ++ return; ++ } ++ ++ errno = 0; ++ val = ptrace (PTRACE_PEEKUSER, tid, register_addr (regno, 0), 0); ++ if (errno != 0) ++ perror_with_name (_("Couldn't get registers")); ++ ++ regcache_raw_supply (regcache, regno, &val); ++} ++ ++/* Store one register. */ ++ ++static void ++store_register (struct regcache *regcache, int tid, int regno) ++{ ++ int val; ++ ++ if (cannot_store_register (regno)) ++ return; ++ ++ errno = 0; ++ regcache_raw_collect (regcache, regno, &val); ++ ptrace (PTRACE_POKEUSER, tid, register_addr (regno, 0), val); ++ if (errno != 0) ++ perror_with_name (_("Couldn't write registers")); ++} ++ ++/* Transfering the general-purpose registers between GDB, inferiors ++ and core files. */ ++ ++/* Fill GDB's register array with the general-purpose register values ++ in *GREGSETP. */ ++ ++void ++supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp) ++{ ++ elf_greg_t *regp = (elf_greg_t *) gregsetp; ++ int i; ++ ++ for (i = 0; i < 23; i++) ++ if (regmap[i] == -1) ++ regcache_raw_supply (regcache, i, NULL); ++ else ++ regcache_raw_supply (regcache, i, (char *) (regp + regmap[i])); ++} ++ ++/* Fill register REGNO (if it is a general-purpose register) in ++ *GREGSETPS with the value in GDB's register array. If REGNO is -1, ++ do this for all registers. */ ++ ++void ++fill_gregset (const struct regcache *regcache, elf_gregset_t *gregsetp, int regno) ++{ ++ elf_greg_t *regp = (elf_greg_t *) gregsetp; ++ int i; ++ ++ for (i = 0; i < 23; i++) ++ if (regmap[i] != -1 && (regno == -1 || regno == i)) ++ regcache_raw_collect (regcache, i, (char *) (regp + regmap[i])); ++} ++ ++/* Transfering floating-point registers between GDB, inferiors and cores. */ ++ ++/* Fill GDB's register array with the floating-point register values in ++ *FPREGSETP. */ ++ ++void ++supply_fpregset (struct regcache *regcache, const elf_fpregset_t *fpregsetp) ++{ ++ int i; ++ long *regp = (long *)fpregsetp; ++ ++ for (i = 0; i < 16; i++) ++ regcache_raw_supply (regcache, 25 + i, (char *) (regp + i)); ++ regcache_raw_supply (regcache, FPUL_REGNUM, (char *) (regp + REG_FPUL - REG_FPREG0)); ++ regcache_raw_supply (regcache, FPSCR_REGNUM, (char *) (regp + REG_FPSCR - REG_FPREG0)); ++} ++ ++/* Fill register REGNO (if it is a floating-point register) in ++ *FPREGSETP with the value in GDB's register array. If REGNO is -1, ++ do this for all registers. */ ++ ++void ++fill_fpregset (const struct regcache *regcache, elf_fpregset_t *fpregsetp, int regno) ++{ ++ int i; ++ long *regp = (long *)fpregsetp; ++ ++ for (i = 0; i < 16; i++) ++ if ((regno == -1) || (regno == i)) ++ regcache_raw_collect (regcache, 25 + i, (char *) (regp + i)); ++ if ((regno == -1) || regno == FPSCR_REGNUM) ++ regcache_raw_collect (regcache, FPSCR_REGNUM, (char *) (regp + REG_FPSCR - REG_FPREG0)); ++ if ((regno == -1) || regno == FPUL_REGNUM) ++ regcache_raw_collect (regcache, FPUL_REGNUM, (char *) (regp + REG_FPUL - REG_FPREG0)); ++} ++ ++/* Transferring arbitrary registers between GDB and inferior. */ ++ ++/* Check if register REGNO in the child process is accessible. ++ If we are accessing registers directly via the U area, only the ++ general-purpose registers are available. ++ All registers should be accessible if we have GETREGS support. */ ++ ++int ++cannot_fetch_register (int regno) ++{ ++ return (regno < 0 || regno >= sizeof regmap / sizeof regmap[0] || regmap[regno] == -1); ++} ++ ++int ++cannot_store_register (int regno) ++{ ++ return (regno < 0 || regno >= sizeof regmap / sizeof regmap[0] || regmap[regno] == -1); ++} ++ ++/* Fetch register values from the inferior. ++ If REGNO is negative, do this for all registers. ++ Otherwise, REGNO specifies which register (so we can save time). */ ++ ++static void ++sh_linux_fetch_inferior_registers (struct target_ops *ops, struct regcache *regcache, int regno) ++{ ++ int i; ++ int tid; ++ ++ /* GNU/Linux LWP ID's are process ID's. */ ++ if ((tid = TIDGET (inferior_ptid)) == 0) ++ tid = PIDGET (inferior_ptid); /* Not a threaded program. */ ++ ++ for (i = 0; i < SH_LINUX_NUM_REGS; i++) ++ if (regno == -1 || regno == i) ++ fetch_register (regcache, tid, i); ++} ++/* Store our register values back into the inferior. ++ If REGNO is negative, do this for all registers. ++ Otherwise, REGNO specifies which register (so we can save time). */ ++ ++static void ++sh_linux_store_inferior_registers (struct target_ops *ops, struct regcache *regcache, int regno) ++{ ++ int i; ++ int tid; ++ ++ /* GNU/Linux LWP ID's are process ID's. */ ++ if ((tid = TIDGET (inferior_ptid)) == 0) ++ tid = PIDGET (inferior_ptid); /* Not a threaded program. */ ++ ++ for (i = 0; i < SH_LINUX_NUM_REGS; i++) ++ if (regno == -1 || regno == i) ++ store_register (regcache, tid, i); ++} ++ ++void ++_initialize_sh_linux_nat (void) ++{ ++ struct target_ops *t; ++ ++ /* Fill in the generic GNU/Linux methods. */ ++ t = linux_target (); ++ ++ /* Add our register access methods. */ ++ t->to_fetch_registers = sh_linux_fetch_inferior_registers; ++ t->to_store_registers = sh_linux_store_inferior_registers; ++ ++ /* Register the target. */ ++ linux_nat_add_target (t); ++} +Index: gdb-7.5/gdb/sh-tdep.c +=================================================================== +--- gdb-7.5.orig/gdb/sh-tdep.c 2012-06-08 07:24:57.000000000 -0700 ++++ gdb-7.5/gdb/sh-tdep.c 2012-09-19 14:45:09.770619943 -0700 +@@ -21,6 +21,9 @@ + sac@cygnus.com. */ + + #include "defs.h" ++#include "arch-utils.h" ++#include "command.h" ++#include "dummy-frame.h" + #include "frame.h" + #include "frame-base.h" + #include "frame-unwind.h" +@@ -37,6 +40,7 @@ + #include "arch-utils.h" + #include "floatformat.h" + #include "regcache.h" ++#include "regset.h" + #include "doublest.h" + #include "osabi.h" + #include "reggroups.h" +@@ -69,23 +73,6 @@ + + static const char *sh_active_calling_convention = sh_cc_gcc; + +-#define SH_NUM_REGS 67 +- +-struct sh_frame_cache +-{ +- /* Base address. */ +- CORE_ADDR base; +- LONGEST sp_offset; +- CORE_ADDR pc; +- +- /* Flag showing that a frame has been created in the prologue code. */ +- int uses_fp; +- +- /* Saved registers. */ +- CORE_ADDR saved_regs[SH_NUM_REGS]; +- CORE_ADDR saved_sp; +-}; +- + static int + sh_is_renesas_calling_convention (struct type *func_type) + { +@@ -1045,7 +1032,7 @@ + return 0; + /* Otherwise if the type of that member is float, the whole type is + treated as float. */ +- if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT) ++ if (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0))) == TYPE_CODE_FLT) + return 1; + /* Otherwise it's not treated as float. */ + return 0; +@@ -1095,7 +1082,7 @@ + in four registers available. Loop thru args from first to last. */ + for (argnum = 0; argnum < nargs; argnum++) + { +- type = value_type (args[argnum]); ++ type = check_typedef (value_type (args[argnum])); + len = TYPE_LENGTH (type); + val = sh_justify_value_in_reg (gdbarch, args[argnum], len); + +@@ -1809,7 +1796,7 @@ + reg->how = DWARF2_FRAME_REG_UNDEFINED; + } + +-static struct sh_frame_cache * ++struct sh_frame_cache * + sh_alloc_frame_cache (void) + { + struct sh_frame_cache *cache; +@@ -1836,7 +1823,7 @@ + return cache; + } + +-static struct sh_frame_cache * ++struct sh_frame_cache * + sh_frame_cache (struct frame_info *this_frame, void **this_cache) + { + struct gdbarch *gdbarch = get_frame_arch (this_frame); +@@ -1903,9 +1890,9 @@ + return cache; + } + +-static struct value * +-sh_frame_prev_register (struct frame_info *this_frame, +- void **this_cache, int regnum) ++struct value * ++sh_frame_prev_register (struct frame_info *this_frame, void **this_cache, ++ int regnum) + { + struct gdbarch *gdbarch = get_frame_arch (this_frame); + struct sh_frame_cache *cache = sh_frame_cache (this_frame, this_cache); +@@ -1919,7 +1906,7 @@ + the current frame. Frob regnum so that we pull the value from + the correct place. */ + if (regnum == gdbarch_pc_regnum (gdbarch)) +- regnum = PR_REGNUM; ++ regnum = PR_REGNUM; /* XXX: really? */ + + if (regnum < SH_NUM_REGS && cache->saved_regs[regnum] != -1) + return frame_unwind_got_memory (this_frame, regnum, +@@ -2225,8 +2212,8 @@ + static struct gdbarch * + sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + { +- struct gdbarch *gdbarch; + struct gdbarch_tdep *tdep; ++ struct gdbarch *gdbarch; + + /* SH5 is handled entirely in sh64-tdep.c. */ + if (info.bfd_arch_info->mach == bfd_mach_sh5) +@@ -2242,6 +2229,18 @@ + tdep = XZALLOC (struct gdbarch_tdep); + gdbarch = gdbarch_alloc (&info, tdep); + ++ /* General-purpose registers. */ ++ tdep->gregset = NULL; ++ tdep->gregset_reg_offset = NULL; ++ tdep->gregset_num_regs = 23; ++ tdep->sizeof_gregset = 0; ++ ++ /* Floating-point registers. */ ++ tdep->fpregset = NULL; ++ tdep->sizeof_fpregset = 34*4; ++ ++ tdep->jb_pc_offset = -1; ++ + set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); + set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT); + set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT); +@@ -2389,10 +2388,11 @@ + break; + } + ++ dwarf2_append_unwinders (gdbarch); ++ + /* Hook in ABI-specific overrides, if they have been registered. */ + gdbarch_init_osabi (info, gdbarch); + +- dwarf2_append_unwinders (gdbarch); + frame_unwind_append_unwinder (gdbarch, &sh_stub_unwind); + frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind); + +Index: gdb-7.5/gdb/testsuite/gdb.asm/sh-linux.inc +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.5/gdb/testsuite/gdb.asm/sh-linux.inc 2012-09-19 14:40:42.978609771 -0700 +@@ -0,0 +1,78 @@ ++# You'll find a bunch of nop opcodes in the below macros. They are ++# there to keep the code correctly aligned. Be careful to maintain ++# them when changing the code. ++ ++ comment "subroutine declare" ++ .purgem gdbasm_declare ++ .macro gdbasm_declare name ++ .align 1 ++ .global \name ++\name: ++ .endm ++ ++ comment "subroutine prologue" ++ .macro gdbasm_enter ++ mov.l r14,@-r15 ++ sts.l pr,@-r15 ++ mov r15,r14 ++ nop ++ .endm ++ ++ comment "subroutine epilogue" ++ .macro gdbasm_leave ++ mov r14,r15 ++ lds.l @r15+,pr ++ mov.l @r15+,r14 ++ rts ++ nop ++ nop ++ .endm ++ ++ comment "subroutine end" ++ .purgem gdbasm_end ++ .macro gdbasm_end name ++ .size \name, .-_foo1 ++ .align 1 ++ .endm ++ ++ comment "subroutine call" ++ .macro gdbasm_call subr ++ mov.l .Lconst\@,r1 ++ bra .Lafterconst\@ ++ nop ++ .align 2 ++.Lconst\@: ++ .long \subr ++.Lafterconst\@: ++ jsr @r1 ++ nop ++ .endm ++ ++ .macro gdbasm_several_nops ++ nop ++ nop ++ nop ++ nop ++ .endm ++ ++ comment "exit (0)" ++ .macro gdbasm_exit0 ++ sleep ++ nop ++ .endm ++ ++ comment "crt0 startup" ++ .macro gdbasm_startup ++ mov #0,r14 ++ .endm ++ ++ comment "Declare a data variable" ++ .purgem gdbasm_datavar ++ .macro gdbasm_datavar name value ++ .data ++ .align 2 ++ .type \name, @object ++ .size \name, 4 ++\name: ++ .long \value ++ .endm +Index: gdb-7.5/gdb/testsuite/gdb.asm/sh.inc +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.asm/sh.inc 2012-04-16 01:02:09.000000000 -0700 ++++ gdb-7.5/gdb/testsuite/gdb.asm/sh.inc 2012-09-19 14:40:42.978609771 -0700 +@@ -40,9 +40,8 @@ + mov.l .Lconst\@,r1 + bra .Lafterconst\@ + nop +- nop +-.Lconst\@: + .align 2 ++.Lconst\@: + .long \subr + .align 1 + .Lafterconst\@: +Index: gdb-7.5/gdb/testsuite/gdb.asm/asm-source.exp +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.asm/asm-source.exp 2012-06-25 13:11:43.000000000 -0700 ++++ gdb-7.5/gdb/testsuite/gdb.asm/asm-source.exp 2012-09-19 14:40:42.978609771 -0700 +@@ -108,6 +108,11 @@ + append link-flags " -m elf32ppc" + } + } ++ "sh*-linux*" { ++ set asm-arch sh-linux ++ set asm-flags "-I${srcdir}/${subdir} -I${objdir}/${subdir}" ++ set debug-flags "-gdwarf-2" ++ } + "sh*-*-*" { + set asm-arch sh + set debug-flags "-gdwarf-2" +Index: gdb-7.5/gdb/testsuite/gdb.base/sigall.c +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.base/sigall.c 2012-02-28 02:24:15.000000000 -0800 ++++ gdb-7.5/gdb/testsuite/gdb.base/sigall.c 2012-09-19 14:42:02.202612808 -0700 +@@ -5,6 +5,10 @@ + /* Signal handlers, we set breakpoints in them to make sure that the + signals really get delivered. */ + ++#ifdef __sh__ ++#define signal(a,b) /* Signals not supported on this target - make them go away */ ++#endif ++ + #ifdef PROTOTYPES + void + handle_ABRT (int sig) +Index: gdb-7.5/gdb/testsuite/gdb.base/signals.c +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.base/signals.c 2012-02-28 02:24:15.000000000 -0800 ++++ gdb-7.5/gdb/testsuite/gdb.base/signals.c 2012-09-19 14:43:22.034615831 -0700 +@@ -3,6 +3,10 @@ + #include <signal.h> + #include <unistd.h> + ++#ifdef __sh__ ++#define signal(a,b) /* Signals not supported on this target - make them go away */ ++#define alarm(a) /* Ditto for alarm() */ ++#endif + + static int count = 0; + +Index: gdb-7.5/gdb/testsuite/gdb.base/annota1.c +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.base/annota1.c 2012-02-28 14:40:48.000000000 -0800 ++++ gdb-7.5/gdb/testsuite/gdb.base/annota1.c 2012-09-19 14:42:42.074614308 -0700 +@@ -1,6 +1,9 @@ + #include <stdio.h> + #include <signal.h> + ++#ifdef __sh__ ++#define signal(a,b) /* Signals not supported on this target - make them go away */ ++#endif + + #ifdef PROTOTYPES + void +Index: gdb-7.5/gdb/testsuite/gdb.base/annota3.c +=================================================================== +--- gdb-7.5.orig/gdb/testsuite/gdb.base/annota3.c 2012-02-28 14:40:48.000000000 -0800 ++++ gdb-7.5/gdb/testsuite/gdb.base/annota3.c 2012-09-19 14:43:54.410617081 -0700 +@@ -1,6 +1,10 @@ + #include <stdio.h> + #include <signal.h> + ++#ifdef __sh__ ++#define signal(a,b) /* Signals not supported on this target - make them go away */ ++#endif ++ + + #ifdef PROTOTYPES + void +Index: gdb-7.5/gdb/config/sh/xm-linux.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.5/gdb/config/sh/xm-linux.h 2012-09-19 14:40:42.994609807 -0700 +@@ -0,0 +1,32 @@ ++/* Native support for GNU/Linux, for GDB, the GNU debugger. ++ Copyright (C) 2000 Free Software Foundation, Inc. ++ ++This file is part of GDB. ++ ++This program is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2 of the License, or ++(at your option) any later version. ++ ++This program is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#ifndef XM_LINUX_H ++#define XM_LINUX_H ++ ++#define HOST_BYTE_ORDER LITTLE_ENDIAN ++ ++#define HAVE_TERMIOS ++ ++#define NEED_POSIX_SETPGID ++ ++/* Need R_OK etc, but USG isn't defined. */ ++#include <unistd.h> ++ ++#endif /* #ifndef XM_LINUX_H */ +Index: gdb-7.5/gdb/config/sh/nm-linux.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.5/gdb/config/sh/nm-linux.h 2012-09-19 14:40:42.994609807 -0700 +@@ -0,0 +1,54 @@ ++/* Native-dependent definitions for SuperH running Linux, for GDB. ++ Copyright 2004 Free Software Foundation, Inc. ++ ++ This file is part of GDB. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef NM_LINUX_H ++#define NM_LINUX_H ++ ++/* Get generic Linux native definitions. */ ++#include "config/nm-linux.h" ++/* Support for the user area. */ ++ ++/* Return the size of the user struct. */ ++extern int kernel_u_size (void); ++#define KERNEL_U_SIZE kernel_u_size() ++ ++/* This is the amount to substract from u.u_ar0 to get the offset in ++ the core file of the register values. */ ++#define KERNEL_U_ADDR 0 ++ ++#define U_REGS_OFFSET 0 ++ ++extern CORE_ADDR register_u_addr (CORE_ADDR blockend, int regnum); ++#define REGISTER_U_ADDR(addr, blockend, regnum) \ ++ (addr) = register_u_addr (blockend, regnum) ++ ++/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ ++#define FETCH_INFERIOR_REGISTERS ++ ++/* Nevertheless, define CANNOT_{FETCH,STORE}_REGISTER, because we ++ might fall back on the code `infptrace.c' (well a copy of that code ++ in `sh-linux-nat.c' for now) and we can access only the ++ general-purpose registers in that way. */ ++extern int cannot_fetch_register (int regno); ++extern int cannot_store_register (int regno); ++#define CANNOT_FETCH_REGISTER(regno) cannot_fetch_register (regno) ++#define CANNOT_STORE_REGISTER(regno) cannot_store_register (regno) ++ ++#endif /* NM_LINUX_H */ +Index: gdb-7.5/gdb/config/sh/linux.mh +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.5/gdb/config/sh/linux.mh 2012-09-19 14:40:42.994609807 -0700 +@@ -0,0 +1,8 @@ ++# Host: Renesas Super-H running GNU/Linux ++NAT_FILE= config/sh/nm-linux.h ++NATDEPFILES= inf-ptrace.o fork-child.o corelow.o sh-linux-nat.o \ ++ proc-service.o linux-thread-db.o gcore.o \ ++ linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o ++ ++NAT_CDEPS = $(srcdir)/proc-service.list ++LOADLIBES= -ldl $(RDYNAMIC) diff --git a/meta-linaro/recipes-devtools/gdb/gdb/sim-install-6.6.patch b/meta-linaro/recipes-devtools/gdb/gdb/sim-install-6.6.patch new file mode 100644 index 00000000..f67c25d5 --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/sim-install-6.6.patch @@ -0,0 +1,14 @@ +Upstream-Status: Inappropriate [embedded specific] + +--- gdb-6.1/sim/common/Makefile.in~ 2004-01-15 21:25:06.000000000 +0000 ++++ gdb-6.1/sim/common/Makefile.in 2004-07-22 17:07:46.237809032 +0100 +@@ -34,7 +34,7 @@ + + datadir = @datadir@ + mandir = @mandir@ +-man1dir = $(mandir)/man1 ++man1dir = $(DESTDIR)$(mandir)/man1 + infodir = @infodir@ + includedir = @includedir@ + + diff --git a/meta-linaro/recipes-devtools/gdb/gdb/sim-install.patch b/meta-linaro/recipes-devtools/gdb/gdb/sim-install.patch new file mode 100644 index 00000000..a663ba7b --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/sim-install.patch @@ -0,0 +1,36 @@ +Upstream-Status: Inappropriate [embedded specific] + +--- gdb-6.1/sim/common/Makefile.in~ 2004-01-15 21:25:06.000000000 +0000 ++++ gdb-6.1/sim/common/Makefile.in 2004-07-22 17:07:46.237809032 +0100 +@@ -34,7 +34,7 @@ + + datadir = @datadir@ + mandir = @mandir@ +-man1dir = $(mandir)/man1 ++man1dir = $(DESTDIR)$(mandir)/man1 + infodir = @infodir@ + includedir = @includedir@ + + +--- gdb-6.1/sim/common/Make-common.in~sim-install.patch 2003-09-08 18:24:59.000000000 +0100 ++++ gdb-6.1/sim/common/Make-common.in 2004-07-22 17:56:18.947423032 +0100 +@@ -581,14 +581,14 @@ + + install-common: installdirs + n=`echo run | sed '$(program_transform_name)'`; \ +- $(INSTALL_PROGRAM) run$(EXEEXT) $(bindir)/$$n$(EXEEXT) ++ $(INSTALL_PROGRAM) run$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT) + n=`echo libsim.a | sed s/libsim.a/lib$(target_alias)-sim.a/`; \ +- $(INSTALL_DATA) libsim.a $(libdir)/$$n ; \ +- ( cd $(libdir) ; $(RANLIB) $$n ) ++ $(INSTALL_DATA) libsim.a $(DESTDIR)$(libdir)/$$n ; \ ++ ( cd $(DESTDIR)$(libdir) ; $(RANLIB) $$n ) + + installdirs: +- $(SHELL) $(srcdir)/../../mkinstalldirs $(bindir) +- $(SHELL) $(srcdir)/../../mkinstalldirs $(libdir) ++ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir) ++ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(libdir) + + check: + cd ../testsuite && $(MAKE) check RUNTESTFLAGS="$(RUNTESTFLAGS)" diff --git a/meta-linaro/recipes-devtools/gdb/gdb/uclibc.patch b/meta-linaro/recipes-devtools/gdb/gdb/uclibc.patch new file mode 100644 index 00000000..f5fd518f --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb/uclibc.patch @@ -0,0 +1,196 @@ +Upstream-Status: Pending + +--- binutils-2.15.91.0.1/bfd/config.bfd~binutils-2.15.90.0.3-uclibc-100-conf ++++ binutils-2.15.91.0.1/bfd/config.bfd +@@ -128,7 +128,7 @@ + targ_defvec=ecoffalpha_little_vec + targ_selvecs=bfd_elf64_alpha_vec + ;; +- alpha*-*-linux-gnu* | alpha*-*-elf*) ++ alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*) + targ_defvec=bfd_elf64_alpha_vec + targ_selvecs=ecoffalpha_little_vec + ;; +@@ -138,7 +138,7 @@ + alpha*-*-*) + targ_defvec=ecoffalpha_little_vec + ;; +- ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu) ++ ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-linux-uclibc* | ia64*-*-kfreebsd*-gnu) + targ_defvec=bfd_elf64_ia64_little_vec + targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec" + ;; +@@ -215,7 +215,7 @@ + targ_defvec=bfd_elf32_littlearm_vec + targ_selvecs=bfd_elf32_bigarm_vec + ;; +- armeb-*-elf | arm*b-*-linux-gnu*) ++ armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*) + targ_defvec=bfd_elf32_bigarm_vec + targ_selvecs=bfd_elf32_littlearm_vec + ;; +@@ -223,8 +223,8 @@ + targ_defvec=bfd_elf32_littlearm_vec + targ_selvecs=bfd_elf32_bigarm_vec + ;; +- arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \ +- arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks) ++ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \ ++ arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks) + targ_defvec=bfd_elf32_littlearm_vec + targ_selvecs=bfd_elf32_bigarm_vec + ;; +@@ -367,7 +367,7 @@ + ;; + + #ifdef BFD64 +- hppa*64*-*-linux-gnu*) ++ hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*) + targ_defvec=bfd_elf64_hppa_linux_vec + targ_selvecs=bfd_elf64_hppa_vec + ;; +@@ -378,7 +378,7 @@ + ;; + #endif + +- hppa*-*-linux-gnu* | hppa*-*-netbsd*) ++ hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*) + targ_defvec=bfd_elf32_hppa_linux_vec + targ_selvecs=bfd_elf32_hppa_vec + ;; +@@ -501,7 +501,7 @@ + targ_selvecs=bfd_elf32_i386_vec + targ_underscore=yes + ;; +- i[3-7]86-*-linux-gnu*) ++ i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) + targ_defvec=bfd_elf32_i386_vec + targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec" + targ64_selvecs=bfd_elf64_x86_64_vec +@@ -515,7 +515,7 @@ + targ_defvec=bfd_elf64_x86_64_vec + targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec" + ;; +- x86_64-*-linux-gnu*) ++ x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) + targ_defvec=bfd_elf64_x86_64_vec + targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec" + ;; +@@ -690,7 +690,7 @@ + targ_selvecs=bfd_elf32_m68k_vec + targ_underscore=yes + ;; +- m68*-*-linux-gnu*) ++ m68*-*-linux-gnu* | m68*-*-linux-uclibc*) + targ_defvec=bfd_elf32_m68k_vec + targ_selvecs=m68klinux_vec + ;; +@@ -966,7 +966,8 @@ + ;; + #endif + powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \ +- powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \ ++ powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \ ++ powerpc-*-rtems* | \ + powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*) + targ_defvec=bfd_elf32_powerpc_vec + targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec" +@@ -1003,8 +1004,8 @@ + targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec" + ;; + powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \ +- powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\ +- powerpcle-*-rtems*) ++ powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\ ++ powerpcle-*-vxworks* | powerpcle-*-rtems*) + targ_defvec=bfd_elf32_powerpcle_vec + targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec" + targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec" +@@ -1165,7 +1166,7 @@ + targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec" + targ_underscore=yes + ;; +- sparc-*-linux-gnu*) ++ sparc-*-linux-gnu* | sparc-*-linux-uclibc*) + targ_defvec=bfd_elf32_sparc_vec + targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec" + ;; +@@ -1212,7 +1213,7 @@ + targ_defvec=sunos_big_vec + targ_underscore=yes + ;; +- sparc64-*-linux-gnu*) ++ sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*) + targ_defvec=bfd_elf64_sparc_vec + targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec" + ;; +--- binutils-2.15.91.0.1/bfd/configure~binutils-2.15.90.0.3-uclibc-100-conf ++++ binutils-2.15.91.0.1/bfd/configure +@@ -1687,6 +1687,11 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + ++linux-uclibc*) ++ lt_cv_deplibs_check_method=pass_all ++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` ++ ;; ++ + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' +@@ -5266,7 +5271,7 @@ + alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) + COREFILE='' + ;; +- alpha*-*-linux-gnu*) ++ alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*) + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/alphalinux.h"' + ;; +@@ -5326,7 +5331,7 @@ + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/i386mach3.h"' + ;; +- i[3-7]86-*-linux-gnu*) ++ i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/i386linux.h"' + ;; +@@ -5364,7 +5369,7 @@ + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/hp300bsd.h"' + ;; +- m68*-*-linux-gnu*) ++ m68*-*-linux-gnu* | m68*-*-linux-uclibc*) + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/m68klinux.h"' + ;; +--- binutils-2.15.91.0.1/bfd/configure.in~binutils-2.15.90.0.3-uclibc-100-conf ++++ binutils-2.15.91.0.1/bfd/configure.in +@@ -164,7 +164,7 @@ + alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) + COREFILE='' + ;; +- alpha*-*-linux-gnu*) ++ alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*) + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/alphalinux.h"' + ;; +@@ -245,7 +245,7 @@ + TRAD_HEADER='"hosts/i386mach3.h"' + ;; + changequote(,)dnl +- i[3-7]86-*-linux-gnu*) ++ i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) + changequote([,])dnl + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/i386linux.h"' +@@ -286,7 +286,7 @@ + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/hp300bsd.h"' + ;; +- m68*-*-linux-gnu*) ++ m68*-*-linux-gnu* | m68*-*-linux-uclibc*) + COREFILE=trad-core.lo + TRAD_HEADER='"hosts/m68klinux.h"' + ;; diff --git a/meta-linaro/recipes-devtools/gdb/gdb_7.6.bb b/meta-linaro/recipes-devtools/gdb/gdb_7.6.bb new file mode 100644 index 00000000..f67a5324 --- /dev/null +++ b/meta-linaro/recipes-devtools/gdb/gdb_7.6.bb @@ -0,0 +1,2 @@ +require recipes-devtools/gdb/gdb.inc +require gdb-7.6.inc |