summaryrefslogtreecommitdiff
path: root/recipes/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/gdb')
-rw-r--r--recipes/gdb/files/gdbserver-cflags-last.diff13
-rw-r--r--recipes/gdb/files/kill_arm_map_symbols.patch24
-rw-r--r--recipes/gdb/files/libiberty-cross.patch630
-rw-r--r--recipes/gdb/files/sim-install-makefile-common.patch22
-rw-r--r--recipes/gdb/files/sim-install-makefile.patch11
-rw-r--r--recipes/gdb/files/uclibc.patch194
-rw-r--r--recipes/gdb/gdb-6.3/thumb-breakpoint.patch41
-rw-r--r--recipes/gdb/gdb-6.3/uclibc.patch194
-rw-r--r--recipes/gdb/gdb-6.6/early_debug_in_nptl.patch306
-rw-r--r--recipes/gdb/gdb-6.8/gcc-4.3-build-error.patch129
-rw-r--r--recipes/gdb/gdb-6.8/gdb-6.8-mingw-3.patch425
-rw-r--r--recipes/gdb/gdb-6.8/gdb-6.8-mips-mingw-sim-fixup.patch17
-rw-r--r--recipes/gdb/gdb-6.8/gdb-6.8-pr9638-ppc-canadian-configh.patch179
-rw-r--r--recipes/gdb/gdb-avr32.inc32
-rw-r--r--recipes/gdb/gdb-canadian-cross.inc18
-rw-r--r--recipes/gdb/gdb-canadian-sdk_6.8.bb12
-rw-r--r--recipes/gdb/gdb-common.inc22
-rw-r--r--recipes/gdb/gdb-cross-sdk_6.6.bb13
-rw-r--r--recipes/gdb/gdb-cross-sdk_6.8.bb13
-rw-r--r--recipes/gdb/gdb-cross.inc24
-rw-r--r--recipes/gdb/gdb-cross_6.3.bb8
-rw-r--r--recipes/gdb/gdb-cross_6.4.bb5
-rw-r--r--recipes/gdb/gdb-cross_6.6.bb7
-rw-r--r--recipes/gdb/gdb-cross_6.7.1.bb19
-rw-r--r--recipes/gdb/gdb-cross_6.8.bb7
-rw-r--r--recipes/gdb/gdb.inc47
-rw-r--r--recipes/gdb/gdb_6.3.bb3
-rw-r--r--recipes/gdb/gdb_6.4.bb3
-rw-r--r--recipes/gdb/gdb_6.6.bb5
-rw-r--r--recipes/gdb/gdb_6.7.1.bb7
-rw-r--r--recipes/gdb/gdb_6.8.bb5
-rw-r--r--recipes/gdb/gdbserver.inc66
-rw-r--r--recipes/gdb/gdbserver_6.7.1.bb6
-rw-r--r--recipes/gdb/gdbserver_6.8.bb1
34 files changed, 2508 insertions, 0 deletions
diff --git a/recipes/gdb/files/gdbserver-cflags-last.diff b/recipes/gdb/files/gdbserver-cflags-last.diff
new file mode 100644
index 0000000000..42bd740a7c
--- /dev/null
+++ b/recipes/gdb/files/gdbserver-cflags-last.diff
@@ -0,0 +1,13 @@
+--- gdb/gdbserver/Makefile.in.orig 2004-10-05 18:52:56.298419032 +0200
++++ gdb/gdbserver/Makefile.in 2004-10-05 18:53:10.442268840 +0200
+@@ -97,8 +97,8 @@
+ CFLAGS = @CFLAGS@
+
+ # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
+-INTERNAL_CFLAGS = $(WARN_CFLAGS) ${CFLAGS} ${GLOBAL_CFLAGS} \
+- ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${BFD_CFLAGS}
++INTERNAL_CFLAGS = $(WARN_CFLAGS) ${GLOBAL_CFLAGS} \
++ ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${BFD_CFLAGS} ${CFLAGS}
+
+ # LDFLAGS is specifically reserved for setting from the command line
+ # when running make.
diff --git a/recipes/gdb/files/kill_arm_map_symbols.patch b/recipes/gdb/files/kill_arm_map_symbols.patch
new file mode 100644
index 0000000000..177142192d
--- /dev/null
+++ b/recipes/gdb/files/kill_arm_map_symbols.patch
@@ -0,0 +1,24 @@
+Index: gdb-6.3/gdb/arm-tdep.c
+===================================================================
+--- gdb-6.3.orig/gdb/arm-tdep.c 2004-08-03 02:02:20.000000000 +0000
++++ gdb-6.3/gdb/arm-tdep.c 2005-11-09 15:13:29.000000000 +0000
+@@ -2491,6 +2491,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;
++
+ /* Thumb symbols are of type STT_LOPROC, (synonymous with
+ STT_ARM_TFUNC). */
+ if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
diff --git a/recipes/gdb/files/libiberty-cross.patch b/recipes/gdb/files/libiberty-cross.patch
new file mode 100644
index 0000000000..0d1897f9e0
--- /dev/null
+++ b/recipes/gdb/files/libiberty-cross.patch
@@ -0,0 +1,630 @@
+--- 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/recipes/gdb/files/sim-install-makefile-common.patch b/recipes/gdb/files/sim-install-makefile-common.patch
new file mode 100644
index 0000000000..24550edc6c
--- /dev/null
+++ b/recipes/gdb/files/sim-install-makefile-common.patch
@@ -0,0 +1,22 @@
+--- 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/recipes/gdb/files/sim-install-makefile.patch b/recipes/gdb/files/sim-install-makefile.patch
new file mode 100644
index 0000000000..7ac67496ac
--- /dev/null
+++ b/recipes/gdb/files/sim-install-makefile.patch
@@ -0,0 +1,11 @@
+--- gdb-6.6~org/sim/common/Makefile.in 2007-01-30 09:23:31.000000000 -0500
++++ gdb-6.6/sim/common/Makefile.in 2007-01-30 09:25:32.000000000 -0500
+@@ -34,7 +34,7 @@
+
+ datadir = @datadir@
+ mandir = @mandir@
+-man1dir = $(mandir)/man1
++man1dir = $(DESTDIR)$(mandir)/man1
+ infodir = @infodir@
+ includedir = @includedir@
+
diff --git a/recipes/gdb/files/uclibc.patch b/recipes/gdb/files/uclibc.patch
new file mode 100644
index 0000000000..3d6b7ba187
--- /dev/null
+++ b/recipes/gdb/files/uclibc.patch
@@ -0,0 +1,194 @@
+--- 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/recipes/gdb/gdb-6.3/thumb-breakpoint.patch b/recipes/gdb/gdb-6.3/thumb-breakpoint.patch
new file mode 100644
index 0000000000..cd678b0b93
--- /dev/null
+++ b/recipes/gdb/gdb-6.3/thumb-breakpoint.patch
@@ -0,0 +1,41 @@
+# This patch causes gdb to use thumb swi(1) on linux for a thumb breakpoint
+# rather than the default, swi(254). To stand any chance of making this
+# work a linux kernel patch is required to read the swi number on a thumb
+# swi. In the absence of this patch gdb will effectively insert a random
+# swi because the kernel reads the swi number from r7...
+#
+--- gdb-6.3/gdb/arm-linux-tdep.c.orig 2005-09-19 13:55:16.486702426 -0700
++++ gdb-6.3/gdb/arm-linux-tdep.c 2005-09-19 13:57:44.127992906 -0700
+@@ -44,6 +44,12 @@
+
+ static const char arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 };
+
++/* The following requires the corresponding patch to the kernel to recognise
++ * this SWI as a breakpoint.
++ */
++static const char arm_linux_thumb_le_breakpoint[] = {0x01, 0xdf};
++static const char arm_linux_thumb_be_breakpoint[] = {0xdf, 0x01};
++
+ /* Description of the longjmp buffer. */
+ #define ARM_LINUX_JB_ELEMENT_SIZE INT_REGISTER_SIZE
+ #define ARM_LINUX_JB_PC 21
+@@ -463,10 +469,17 @@
+
+ tdep->lowest_pc = 0x8000;
+ if (info.byte_order == BFD_ENDIAN_BIG)
+- tdep->arm_breakpoint = arm_linux_arm_be_breakpoint;
++ {
++ tdep->arm_breakpoint = arm_linux_arm_be_breakpoint;
++ tdep->thumb_breakpoint = arm_linux_thumb_be_breakpoint;
++ }
+ else
+- tdep->arm_breakpoint = arm_linux_arm_le_breakpoint;
++ {
++ tdep->arm_breakpoint = arm_linux_arm_le_breakpoint;
++ tdep->thumb_breakpoint = arm_linux_thumb_le_breakpoint;
++ }
+ tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint);
++ tdep->thumb_breakpoint_size = sizeof (arm_linux_thumb_le_breakpoint);
+
+ tdep->fp_model = ARM_FLOAT_FPA;
+
diff --git a/recipes/gdb/gdb-6.3/uclibc.patch b/recipes/gdb/gdb-6.3/uclibc.patch
new file mode 100644
index 0000000000..b3981202ff
--- /dev/null
+++ b/recipes/gdb/gdb-6.3/uclibc.patch
@@ -0,0 +1,194 @@
+--- gdb-6.3/bfd/config.bfd.orig 2004-10-15 06:47:11.000000000 +0100
++++ gdb-6.3/bfd/config.bfd 2005-01-05 19:30:32.000000000 +0000
+@@ -129,7 +129,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
+ ;;
+@@ -139,7 +139,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"
+ ;;
+@@ -216,7 +216,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
+ ;;
+@@ -224,8 +224,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 | \
+ arm*-*-eabi* )
+ targ_defvec=bfd_elf32_littlearm_vec
+ targ_selvecs=bfd_elf32_bigarm_vec
+@@ -378,7 +378,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
+ ;;
+@@ -389,7 +389,7 @@
+ ;;
+ #endif
+
+- hppa*-*-linux-gnu*)
++ hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+ targ_defvec=bfd_elf32_hppa_linux_vec
+ targ_selvecs=bfd_elf32_hppa_vec
+ ;;
+@@ -522,7 +522,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
+@@ -536,7 +536,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"
+ ;;
+@@ -711,7 +711,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
+ ;;
+@@ -987,7 +987,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"
+@@ -1024,8 +1025,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"
+@@ -1192,7 +1193,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"
+ ;;
+@@ -1239,7 +1240,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"
+ ;;
+--- gdb-6.3/bfd/configure.in.orig 2004-10-08 15:53:59.000000000 +0100
++++ gdb-6.3/bfd/configure.in 2005-01-05 19:28:50.000000000 +0000
+@@ -163,7 +163,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"'
+ ;;
+@@ -248,7 +248,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"'
+@@ -289,7 +289,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"'
+ ;;
+--- gdb-6.3/bfd/configure.orig 2004-10-08 15:53:56.000000000 +0100
++++ gdb-6.3/bfd/configure 2005-01-05 19:29:27.000000000 +0000
+@@ -3583,6 +3583,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* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -9914,7 +9919,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"'
+ ;;
+@@ -9978,7 +9983,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"'
+ ;;
+@@ -10016,7 +10021,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/recipes/gdb/gdb-6.6/early_debug_in_nptl.patch b/recipes/gdb/gdb-6.6/early_debug_in_nptl.patch
new file mode 100644
index 0000000000..c53f0d8ad5
--- /dev/null
+++ b/recipes/gdb/gdb-6.6/early_debug_in_nptl.patch
@@ -0,0 +1,306 @@
+http://sourceware.org/ml/gdb-patches/2007-06/msg00479.html
+
+Index: gdb/linux-thread-db.c
+===================================================================
+--- gdb/linux-thread-db.c.orig 2006-10-20 03:08:14.000000000 +0200
++++ gdb/linux-thread-db.c 2008-03-01 14:45:52.000000000 +0100
+@@ -213,6 +213,21 @@
+ }
+ }
+
++/* Return 1 if any threads have been registered. There may be none if
++ the threading library is not fully initialized yet. */
++
++static int
++have_threads_callback (struct thread_info *thread, void *dummy)
++{
++ return 1;
++}
++
++static int
++have_threads (void)
++{
++ return iterate_over_threads (have_threads_callback, NULL) != NULL;
++}
++
+ /* A callback function for td_ta_thr_iter, which we use to map all
+ threads to LWPs.
+
+@@ -700,23 +715,6 @@
+ }
+
+ static void
+-thread_db_attach (char *args, int from_tty)
+-{
+- target_beneath->to_attach (args, from_tty);
+-
+- /* Destroy thread info; it's no longer valid. */
+- init_thread_list ();
+-
+- /* The child process is now the actual multi-threaded
+- program. Snatch its process ID... */
+- proc_handle.pid = GET_PID (inferior_ptid);
+-
+- /* ...and perform the remaining initialization steps. */
+- enable_thread_event_reporting ();
+- thread_db_find_new_threads ();
+-}
+-
+-static void
+ detach_thread (ptid_t ptid, int verbose)
+ {
+ struct thread_info *thread_info;
+@@ -742,14 +740,13 @@
+ disable_thread_event_reporting ();
+
+ /* There's no need to save & restore inferior_ptid here, since the
+- inferior is supposed to be survive this function call. */
++ inferior is not supposed to survive this function call. */
+ inferior_ptid = lwp_from_thread (inferior_ptid);
+
+- /* Forget about the child's process ID. We shouldn't need it
+- anymore. */
+- proc_handle.pid = 0;
+-
+ target_beneath->to_detach (args, from_tty);
++
++ /* Should this be done by detach_command? */
++ target_mourn_inferior ();
+ }
+
+ static int
+@@ -870,12 +867,6 @@
+
+ ptid = target_beneath->to_wait (ptid, ourstatus);
+
+- if (proc_handle.pid == 0)
+- /* The current child process isn't the actual multi-threaded
+- program yet, so don't try to do any special thread-specific
+- post-processing and bail out early. */
+- return ptid;
+-
+ if (ourstatus->kind == TARGET_WAITKIND_EXITED
+ || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
+ return pid_to_ptid (-1);
+@@ -889,23 +880,32 @@
+ return pid_to_ptid (GET_PID (ptid));
+ }
+
++ /* If we do not know about the main thread yet, this would be a good time to
++ find it. */
++ if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads ())
++ thread_db_find_new_threads ();
++
+ if (ourstatus->kind == TARGET_WAITKIND_STOPPED
+ && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
+ /* Check for a thread event. */
+ check_event (ptid);
+
+- if (!ptid_equal (trap_ptid, null_ptid))
+- trap_ptid = thread_from_lwp (trap_ptid);
++ if (have_threads ())
++ {
++ /* Change ptids back into the higher level PID + TID format. If
++ the thread is dead and no longer on the thread list, we will
++ get back a dead ptid. This can occur if the thread death
++ event gets postponed by other simultaneous events. In such a
++ case, we want to just ignore the event and continue on. */
++
++ if (!ptid_equal (trap_ptid, null_ptid))
++ trap_ptid = thread_from_lwp (trap_ptid);
++
++ ptid = thread_from_lwp (ptid);
++ if (GET_PID (ptid) == -1)
++ ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
++ }
+
+- /* Change the ptid back into the higher level PID + TID format.
+- If the thread is dead and no longer on the thread list, we will
+- get back a dead ptid. This can occur if the thread death event
+- gets postponed by other simultaneous events. In such a case,
+- we want to just ignore the event and continue on. */
+- ptid = thread_from_lwp (ptid);
+- if (GET_PID (ptid) == -1)
+- ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
+-
+ return ptid;
+ }
+
+@@ -944,30 +944,6 @@
+ }
+
+ static void
+-thread_db_create_inferior (char *exec_file, char *allargs, char **env,
+- int from_tty)
+-{
+- unpush_target (&thread_db_ops);
+- using_thread_db = 0;
+- target_beneath->to_create_inferior (exec_file, allargs, env, from_tty);
+-}
+-
+-static void
+-thread_db_post_startup_inferior (ptid_t ptid)
+-{
+- if (proc_handle.pid == 0)
+- {
+- /* The child process is now the actual multi-threaded
+- program. Snatch its process ID... */
+- proc_handle.pid = GET_PID (ptid);
+-
+- /* ...and perform the remaining initialization steps. */
+- enable_thread_event_reporting ();
+- thread_db_find_new_threads ();
+- }
+-}
+-
+-static void
+ thread_db_mourn_inferior (void)
+ {
+ /* Forget about the child's process ID. We shouldn't need it
+@@ -1002,6 +978,22 @@
+
+ ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, ti.ti_tid);
+
++ if (ti.ti_tid == 0)
++ {
++ /* A thread ID of zero means that this is the main thread, but
++ glibc has not yet initialized thread-local storage and the
++ pthread library. We do not know what the thread's TID will
++ be yet. Just enable event reporting and otherwise ignore
++ it. */
++
++ err = td_thr_event_enable_p (th_p, 1);
++ if (err != TD_OK)
++ error (_("Cannot enable thread event reporting for %s: %s"),
++ target_pid_to_str (ptid), thread_db_err_str (err));
++
++ return 0;
++ }
++
+ if (!in_thread_list (ptid))
+ attach_thread (ptid, th_p, &ti, 1);
+
+@@ -1058,6 +1050,16 @@
+ return NULL;
+ }
+
++/* Return 1 if this thread has the same LWP as the passed PTID. */
++
++static int
++same_ptid_callback (struct thread_info *thread, void *arg)
++{
++ ptid_t *ptid_p = arg;
++
++ return GET_LWP (thread->ptid) == GET_LWP (*ptid_p);
++}
++
+ /* Get the address of the thread local variable in load module LM which
+ is stored at OFFSET within the thread local storage for thread PTID. */
+
+@@ -1066,6 +1068,21 @@
+ CORE_ADDR lm,
+ CORE_ADDR offset)
+ {
++ /* If we have not discovered any threads yet, check now. */
++ if (!is_thread (ptid) && !have_threads ())
++ thread_db_find_new_threads ();
++
++ /* Try to find a matching thread if we still have the LWP ID instead
++ of the thread ID. */
++ if (!is_thread (ptid))
++ {
++ struct thread_info *thread;
++
++ thread = iterate_over_threads (same_ptid_callback, &ptid);
++ if (thread != NULL)
++ ptid = thread->ptid;
++ }
++
+ if (is_thread (ptid))
+ {
+ td_err_e err;
+@@ -1125,14 +1142,11 @@
+ thread_db_ops.to_shortname = "multi-thread";
+ thread_db_ops.to_longname = "multi-threaded child process.";
+ thread_db_ops.to_doc = "Threads and pthreads support.";
+- thread_db_ops.to_attach = thread_db_attach;
+ thread_db_ops.to_detach = thread_db_detach;
+ thread_db_ops.to_resume = thread_db_resume;
+ thread_db_ops.to_wait = thread_db_wait;
+ thread_db_ops.to_xfer_partial = thread_db_xfer_partial;
+ thread_db_ops.to_kill = thread_db_kill;
+- thread_db_ops.to_create_inferior = thread_db_create_inferior;
+- thread_db_ops.to_post_startup_inferior = thread_db_post_startup_inferior;
+ thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
+ thread_db_ops.to_find_new_threads = thread_db_find_new_threads;
+ thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
+Index: gdb/gdbserver/thread-db.c
+===================================================================
+--- gdb/gdbserver/thread-db.c.orig 2006-10-17 18:02:27.000000000 +0200
++++ gdb/gdbserver/thread-db.c 2008-03-01 14:44:41.000000000 +0100
+@@ -40,6 +40,7 @@
+ /* Connection to the libthread_db library. */
+ static td_thragent_t *thread_agent;
+
++static void thread_db_find_new_threads (void);
+ static int find_new_threads_callback (const td_thrhandle_t *th_p, void *data);
+
+ static char *
+@@ -134,6 +135,8 @@
+ td_event_msg_t msg;
+ td_err_e err;
+ struct inferior_linux_data *tdata;
++ struct thread_info *inferior;
++ struct process_info *process;
+
+ if (debug_threads)
+ fprintf (stderr, "Thread creation event.\n");
+@@ -149,6 +152,14 @@
+ fprintf (stderr, "thread getmsg err: %s\n",
+ thread_db_err_str (err));
+
++ /* If we do not know about the main thread yet, this would be a good time to
++ find it. We need to do this to pick up the main thread before any newly
++ created threads. */
++ inferior = (struct thread_info *) all_threads.head;
++ process = get_thread_process (inferior);
++ if (process->thread_known == 0)
++ thread_db_find_new_threads ();
++
+ /* msg.event == TD_EVENT_CREATE */
+
+ find_new_threads_callback (msg.th_p, NULL);
+@@ -231,8 +242,24 @@
+ {
+ inferior = (struct thread_info *) all_threads.head;
+ process = get_thread_process (inferior);
++
+ if (process->thread_known == 0)
+ {
++ /* If the new thread ID is zero, a final thread ID will be
++ available later. Do not enable thread debugging yet. */
++ if (ti_p->ti_tid == 0)
++ {
++ err = td_thr_event_enable (th_p, 1);
++ if (err != TD_OK)
++ error ("Cannot enable thread event reporting for %d: %s",
++ ti_p->ti_lid, thread_db_err_str (err));
++ return;
++ }
++
++ if (process->lwpid != ti_p->ti_lid)
++ fatal ("PID mismatch! Expected %ld, got %ld",
++ (long) process->lwpid, (long) ti_p->ti_lid);
++
+ /* Switch to indexing the threads list by TID. */
+ change_inferior_id (&all_threads, ti_p->ti_tid);
+ goto found;
+@@ -331,6 +358,8 @@
+
+ process = get_thread_process (thread);
+ if (!process->thread_known)
++ thread_db_find_new_threads ();
++ if (!process->thread_known)
+ return TD_NOTHR;
+
+ err = td_thr_tls_get_addr (&process->th, (psaddr_t) load_module, offset,
diff --git a/recipes/gdb/gdb-6.8/gcc-4.3-build-error.patch b/recipes/gdb/gdb-6.8/gcc-4.3-build-error.patch
new file mode 100644
index 0000000000..36e501af1a
--- /dev/null
+++ b/recipes/gdb/gdb-6.8/gcc-4.3-build-error.patch
@@ -0,0 +1,129 @@
+http://patches.ubuntu.com/g/gdb/extracted/gcc-4.3-build-error.patch
+
+--- gdb/cli/cli-cmds.c~ 2008-06-24 16:07:25.000000000 +0200
++++ gdb/cli/cli-cmds.c 2008-06-24 16:22:31.000000000 +0200
+@@ -323,7 +323,8 @@
+ {
+ if (args)
+ error (_("The \"pwd\" command does not take an argument: %s"), args);
+- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
++ if (!getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
++ error (_("Unable to determine current directory"));
+
+ if (strcmp (gdb_dirbuf, current_directory) != 0)
+ printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
+--- gdb/linux-nat.c~ 2008-01-29 23:47:20.000000000 +0100
++++ gdb/linux-nat.c 2008-06-24 16:18:57.000000000 +0200
+@@ -2876,7 +2876,8 @@
+ sprintf (fname1, "/proc/%lld/cmdline", pid);
+ if ((procfile = fopen (fname1, "r")) != NULL)
+ {
+- fgets (buffer, sizeof (buffer), procfile);
++ if (!fgets (buffer, sizeof (buffer), procfile))
++ error(_("Unable to read '%s'"), fname1);
+ printf_filtered ("cmdline = '%s'\n", buffer);
+ fclose (procfile);
+ }
+--- gdb/inflow.c~ 2008-01-01 23:53:11.000000000 +0100
++++ gdb/inflow.c 2008-06-24 16:32:10.000000000 +0200
+@@ -512,7 +512,7 @@
+ void
+ new_tty (void)
+ {
+- int tty;
++ int tty, rv;
+
+ if (inferior_thisrun_terminal == 0)
+ return;
+@@ -545,17 +545,17 @@
+ if (tty != 0)
+ {
+ close (0);
+- dup (tty);
++ rv = dup (tty);
+ }
+ if (tty != 1)
+ {
+ close (1);
+- dup (tty);
++ rv = dup (tty);
+ }
+ if (tty != 2)
+ {
+ close (2);
+- dup (tty);
++ rv = dup (tty);
+ }
+ if (tty > 2)
+ close (tty);
+--- gdb/mi/mi-cmd-env.c~ 2008-01-01 23:53:14.000000000 +0100
++++ gdb/mi/mi-cmd-env.c 2008-06-24 16:23:25.000000000 +0200
+@@ -78,7 +78,8 @@
+
+ /* Otherwise the mi level is 2 or higher. */
+
+- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
++ if (!getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
++ error (_("Unable to determine current directory"));
+ ui_out_field_string (uiout, "cwd", gdb_dirbuf);
+
+ return MI_CMD_DONE;
+--- gdb/utils.c~ 2008-01-01 23:53:13.000000000 +0100
++++ gdb/utils.c 2008-06-24 16:29:13.000000000 +0200
+@@ -688,6 +688,7 @@
+ static int dejavu;
+ int quit_p;
+ int dump_core_p;
++ int rv;
+ char *reason;
+
+ /* Don't allow infinite error/warning recursion. */
+@@ -704,7 +705,7 @@
+ abort (); /* NOTE: GDB has only three calls to abort(). */
+ default:
+ dejavu = 3;
+- write (STDERR_FILENO, msg, sizeof (msg));
++ rv = write (STDERR_FILENO, msg, sizeof (msg));
+ exit (1);
+ }
+ }
+--- gdb/top.c~ 2008-01-01 23:53:13.000000000 +0100
++++ gdb/top.c 2008-06-24 16:26:51.000000000 +0200
+@@ -1628,7 +1628,8 @@
+
+ /* Run the init function of each source file */
+
+- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
++ if (!getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
++ error (_("Unable to determine current directory"));
+ current_directory = gdb_dirbuf;
+
+ #ifdef __MSDOS__
+--- gdb/ui-file.c~ 2008-01-01 23:53:13.000000000 +0100
++++ gdb/ui-file.c 2008-06-24 16:30:16.000000000 +0200
+@@ -477,11 +477,12 @@
+ static void
+ stdio_file_write (struct ui_file *file, const char *buf, long length_buf)
+ {
++ int rv;
+ struct stdio_file *stdio = ui_file_data (file);
+ if (stdio->magic != &stdio_file_magic)
+ internal_error (__FILE__, __LINE__,
+ _("stdio_file_write: bad magic number"));
+- fwrite (buf, length_buf, 1, stdio->file);
++ rv = fwrite (buf, length_buf, 1, stdio->file);
+ }
+
+ static void
+--- gdb/main.c~ 2008-06-24 16:07:25.000000000 +0200
++++ gdb/main.c 2008-06-24 16:25:05.000000000 +0200
+@@ -188,7 +188,8 @@
+ line[0] = '\0'; /* Terminate saved (now empty) cmd line */
+ instream = stdin;
+
+- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
++ if (!getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
++ error (_("Unable to determine current directory"));
+ current_directory = gdb_dirbuf;
+
+ gdb_stdout = stdio_fileopen (stdout);
diff --git a/recipes/gdb/gdb-6.8/gdb-6.8-mingw-3.patch b/recipes/gdb/gdb-6.8/gdb-6.8-mingw-3.patch
new file mode 100644
index 0000000000..7bfcca7518
--- /dev/null
+++ b/recipes/gdb/gdb-6.8/gdb-6.8-mingw-3.patch
@@ -0,0 +1,425 @@
+diff -urp gdb-6.8_orig/gdb/gdbserver/remote-utils.c gdb-6.8/gdb/gdbserver/remote-utils.c
+--- gdb-6.8_orig/gdb/gdbserver/remote-utils.c 2008-01-29 16:51:50.000000000 -0800
++++ gdb-6.8/gdb/gdbserver/remote-utils.c 2008-04-09 14:04:30.000000000 -0700
+@@ -617,7 +617,12 @@ input_interrupt (int unused)
+
+ cc = read (remote_desc, &c, 1);
+
++#ifdef _WIN32_WINNT
++ // its normal in windows for current_inferior to be null.
++ if (cc != 1 || c != '\003' /*|| current_inferior == NULL*/)
++#else
+ if (cc != 1 || c != '\003' || current_inferior == NULL)
++#endif
+ {
+ fprintf (stderr, "input_interrupt, count = %d c = %d ('%c')\n",
+ cc, c, c);
+diff -urp gdb-6.8_orig/gdb/gdbserver/server.c gdb-6.8/gdb/gdbserver/server.c
+--- gdb-6.8_orig/gdb/gdbserver/server.c 2008-02-19 13:36:54.000000000 -0800
++++ gdb-6.8/gdb/gdbserver/server.c 2008-04-23 13:56:51.000000000 -0700
+@@ -29,6 +29,10 @@
+ #include <sys/wait.h>
+ #endif
+
++#ifdef _WIN32
++#include <windows.h>
++#endif
++
+ unsigned long cont_thread;
+ unsigned long general_thread;
+ unsigned long step_thread;
+@@ -268,6 +272,20 @@ monitor_show_help (void)
+ monitor_output (" Enable general debugging messages\n");
+ monitor_output (" set remote-debug <0|1>\n");
+ monitor_output (" Enable remote protocol debugging messages\n");
++#ifdef _WIN32
++ monitor_output (" get processlist\n");
++ monitor_output (" List remote processes with names and pid\n");
++ monitor_output (" get processlistmi\n");
++ monitor_output (" Process list in an MI-like format\n");
++#endif
++ monitor_output (" set env <name=value>\n");
++ monitor_output (" Set environment variable in remote environment\n");
++ monitor_output (" cd <directory>\n");
++ monitor_output (" Change current working directory\n");
++ monitor_output (" pwd\n");
++ monitor_output (" Print current working directory\n");
++ monitor_output (" shell <command line>\n");
++ monitor_output (" Execute command on remote target\n");
+ monitor_output (" exit\n");
+ monitor_output (" Quit GDBserver\n");
+ }
+@@ -279,6 +297,47 @@ monitor_show_help (void)
+ return; \
+ }
+
++#ifdef _WIN32
++typedef DWORD (__stdcall *GETPROCESSIMAGEFILENAME)(HANDLE hProcess, LPTSTR lpImageFileName, DWORD nSize);
++typedef BOOL (__stdcall *ENUMPROCESSES)(DWORD* pProcessIds, DWORD cb, DWORD* pBytesReturned);
++
++# define HAS_DEVICE(P) \
++((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
++&& (P)[1] == ':')
++# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
++
++char *
++__basename (char const *name)
++{
++ char const *base = name += FILE_SYSTEM_PREFIX_LEN (name);
++ int all_slashes = 1;
++ char const *p;
++
++ for (p = name; *p; p++)
++ {
++ if (ISSLASH (*p))
++ base = p + 1;
++ else
++ all_slashes = 0;
++ }
++
++ /* If NAME is all slashes, arrange to return `/'. */
++ if (*base == '\0' && ISSLASH (*name) && all_slashes)
++ --base;
++
++ /* Make sure the last byte is not a slash. */
++ //assert (all_slashes || !ISSLASH (*(p - 1)));
++
++ return (char *) base;
++}
++#endif
++
++#ifndef _POSIX_PATH_MAX
++#define _POSIX_PATH_MAX 1024
++#define _POSIX_PATH_MAX_WAS_UNDEFINED
++#endif
++
+ /* Handle all of the extended 'q' packets. */
+ void
+ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
+@@ -664,6 +723,158 @@ handle_query (char *own_buf, int packet_
+ debug_threads = 1;
+ monitor_output ("Debug output enabled.\n");
+ }
++#ifdef _WIN32
++ else if (strncmp (mon, "get processlist", 15) == 0)
++ {
++ HINSTANCE lib = LoadLibrary("PSAPI.DLL");
++ GETPROCESSIMAGEFILENAME imageFilename = (GETPROCESSIMAGEFILENAME)GetProcAddress(lib, "GetProcessImageFileNameA");
++ ENUMPROCESSES enumProcesses = (ENUMPROCESSES)GetProcAddress(lib, "EnumProcesses");
++
++ char* name = (char*)malloc(MAX_PATH);
++
++ int miMode = (strcmp(mon, "get processlistmi") == 0);
++
++ DWORD* pids = (DWORD*)malloc(sizeof(DWORD)*1024);
++ memset(pids, 0, sizeof(pids));
++ DWORD size = 0;
++
++ if (!enumProcesses(pids, 1024 * sizeof(DWORD), &size))
++ {
++ free(pids);
++ free(mon);
++ return;
++ }
++
++ int cnt = 0;
++ int number = size / sizeof(DWORD);
++
++ char* miOutput = NULL;
++
++ if (!miMode)
++ monitor_output("Remote process list:\n");
++ else
++ {
++ miOutput = (char*)malloc((number * 255) * sizeof(char));
++ strcpy(miOutput, "^done,processlist=[");
++ }
++
++ for (cnt = 0; cnt < number; cnt++)
++ {
++ HMODULE hProcess = (HMODULE)OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pids[cnt]);
++ strcpy(name, "");
++ printf(name);
++
++ imageFilename(hProcess, name, MAX_PATH);
++
++ if (pids[cnt] > 4 && strcmp(name, "") != 0)
++ {
++ char item[2048] = "";
++ char tmp[24] = "0";
++ itoa(pids[cnt], tmp, 10);
++ strcat(item, tmp);
++ strcat(item, "=");
++ strcat(item, __basename(name));
++
++ if (!miMode)
++ {
++ strcat(item, "\n");
++ monitor_output(item);
++ }
++ else
++ {
++ strcat(miOutput, item);
++ strcat(miOutput, ",");
++ }
++ }
++
++ CloseHandle(hProcess);
++ }
++
++ if (miMode)
++ {
++ strcat(miOutput, "]\n");
++ monitor_output(miOutput);
++ free(miOutput);
++ }
++
++ FreeLibrary(lib);
++
++ free(pids);
++ free(name);
++ }
++#endif
++ else if (strncmp (mon, "set env ", 8) == 0)
++ {
++ char* envLine = mon + 8;
++ char* envName = strtok(envLine, "= ");
++ char* envValue = strtok(NULL, "= ");
++ if (envName && envValue)
++ {
++#ifdef _WIN32
++ SetEnvironmentVariable(envName, envValue);
++#else
++ setenv(envName, envValue, 1);
++#endif
++ monitor_output("Target environment variable set (");
++ monitor_output(envName);
++ monitor_output(" = ");
++ monitor_output(envValue);
++ monitor_output(").\n");
++ }
++ else
++ monitor_output("Incorrect format for environment variable.\n");
++ }
++ else if (strncmp (mon, "cd ", 3) == 0)
++ {
++ char* dir = mon + 3;
++ if (strlen(dir) > 0)
++ chdir(dir);
++ }
++ else if (strcmp(mon, "pwd") == 0)
++ {
++ long size = _POSIX_PATH_MAX;
++ char* current_directory = (char*)malloc(size);
++ getcwd(current_directory, size);
++ if (strlen(current_directory) > 0)
++ {
++ monitor_output(current_directory);
++ monitor_output("\n");
++ }
++ free(current_directory);
++ }
++ else if (strncmp (mon, "shell ", 6) == 0)
++ {
++ char* arg = mon + 6;
++
++ if (strlen(arg) == 0)
++ {
++ monitor_output("Inferior shells are not supported.");
++ free(mon);
++ return;
++ }
++
++ long size = _POSIX_PATH_MAX;
++ char* current_directory = (char*)malloc(size);
++ getcwd(current_directory, size);
++
++ int rc = system (arg);
++ char msg[255];
++ if (rc == -1)
++ {
++ sprintf(msg, "Cannot execute '%s': %s.\n", arg, strerror(errno));
++ monitor_output(msg);
++ }
++ else if (rc != -1)
++ {
++ sprintf(msg, "'%s' exited with status %d.\n", arg, rc);
++ monitor_output(msg);
++ }
++
++ /* Make sure to return to the directory GDB thinks it is, in case the
++ shell command we just ran changed it. */
++ chdir(current_directory);
++ free(current_directory);
++ }
+ else if (strcmp (mon, "set debug 0") == 0)
+ {
+ debug_threads = 0;
+@@ -699,6 +910,11 @@ handle_query (char *own_buf, int packet_
+ own_buf[0] = 0;
+ }
+
++#ifdef _POSIX_PATH_MAX_WAS_UNDEFINED
++#undef _POSIX_PATH_MAX
++#undef _POSIX_PATH_MAX_WAS_UNDEFINED
++#endif
++
+ /* Parse vCont packets. */
+ void
+ handle_v_cont (char *own_buf, char *status, int *signal)
+@@ -1503,6 +1719,8 @@ main (int argc, char *argv[])
+ fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
+ target_signal_to_host (signal),
+ target_signal_to_name (signal));
++
++ kill_inferior();
+
+ if (extended_protocol)
+ goto restart;
+diff -urp gdb-6.8_orig/gdb/gdbserver/win32-low.c gdb-6.8/gdb/gdbserver/win32-low.c
+--- gdb-6.8_orig/gdb/gdbserver/win32-low.c 2008-02-14 14:41:39.000000000 -0800
++++ gdb-6.8/gdb/gdbserver/win32-low.c 2008-04-22 23:24:38.000000000 -0700
+@@ -38,7 +38,7 @@
+ #include <sys/cygwin.h>
+ #endif
+
+-#define LOG 0
++#define LOG 1
+
+ #define OUTMSG(X) do { printf X; fflush (stdout); } while (0)
+ #if LOG
+@@ -543,9 +543,9 @@ win32_create_inferior (char *program, ch
+ }
+ OUTMSG2 (("Command line is \"%s\"\n", args));
+
+-#ifdef CREATE_NEW_PROCESS_GROUP
++//#ifdef CREATE_NEW_PROCESS_GROUP
+ flags |= CREATE_NEW_PROCESS_GROUP;
+-#endif
++//#endif
+
+ ret = create_process (program, args, flags, &pi);
+ err = GetLastError ();
+@@ -684,8 +684,37 @@ win32_kill (void)
+ if (current_process_handle == NULL)
+ return;
+
+- TerminateProcess (current_process_handle, 0);
+- for (;;)
++ TerminateProcess (current_process_handle, 0);
++
++ // BKS - fix for terminating apps prior to their exit, lets go of execs.
++ winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL;
++ winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL;
++#ifdef _WIN32_WCE
++ HMODULE dll = GetModuleHandle (_T("COREDLL.DLL"));
++#else
++ HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL"));
++#endif
++ DebugActiveProcessStop = GETPROCADDRESS (dll, DebugActiveProcessStop);
++ DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit);
++
++ if (DebugSetProcessKillOnExit != NULL
++ && DebugActiveProcessStop != NULL)
++ {
++ {
++ struct thread_resume resume;
++ resume.thread = -1;
++ resume.step = 0;
++ resume.sig = 0;
++ resume.leave_stopped = 0;
++ win32_resume (&resume);
++ }
++
++ DebugActiveProcessStop (current_process_id);
++ DebugSetProcessKillOnExit (FALSE);
++ }
++ // end BKS
++
++ for (;;)
+ {
+ if (!child_continue (DBG_CONTINUE, -1))
+ break;
+@@ -1186,6 +1215,7 @@ handle_exception (struct target_waitstat
+
+ ourstatus->kind = TARGET_WAITKIND_STOPPED;
+
++ //printf("handle exception....................%X\n", (unsigned int)code);
+ switch (code)
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+@@ -1196,7 +1226,13 @@ handle_exception (struct target_waitstat
+ OUTMSG2 (("STATUS_STACK_OVERFLOW"));
+ ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+ break;
+- case STATUS_FLOAT_DENORMAL_OPERAND:
++ // BKS
++ case STATUS_INVALID_HANDLE:
++ OUTMSG2 (("STATUS_INVALID_HANDLE"));
++ ourstatus->value.sig = TARGET_SIGNAL_TRAP;
++ break;
++ // BKS
++ case STATUS_FLOAT_DENORMAL_OPERAND:
+ OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND"));
+ ourstatus->value.sig = TARGET_SIGNAL_FPE;
+ break;
+@@ -1453,7 +1489,8 @@ get_child_debug_event (struct target_wai
+ (unsigned) current_event.dwThreadId));
+ ourstatus->kind = TARGET_WAITKIND_EXITED;
+ ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode;
+- CloseHandle (current_process_handle);
++ win32_kill(); // fixed problem with exec's not being let go after completion.
++ //CloseHandle (current_process_handle); // let this get done by win32_kill().
+ current_process_handle = NULL;
+ break;
+
+diff -urp gdb-6.8_orig/gdb/linespec.c gdb-6.8/gdb/linespec.c
+--- gdb-6.8_orig/gdb/linespec.c 2008-01-01 14:53:11.000000000 -0800
++++ gdb-6.8/gdb/linespec.c 2008-04-23 11:15:58.000000000 -0700
+@@ -1534,11 +1534,11 @@ symtab_from_filename (char **argptr, cha
+ file_symtab = lookup_symtab (copy);
+ if (file_symtab == 0)
+ {
+- if (!have_full_symbols () && !have_partial_symbols ())
+- error (_("No symbol table is loaded. Use the \"file\" command."));
++// if (!have_full_symbols () && !have_partial_symbols ())
++// error (_("No symbol table is loaded. Use the \"file\" command."));
+ if (not_found_ptr)
+ *not_found_ptr = 1;
+- throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
++ throw_error (NOT_FOUND_ERROR, _("No source file named %s in loaded symbols."), copy);
+ }
+
+ /* Discard the file name from the arg. */
+@@ -1744,13 +1744,13 @@ decode_variable (char *copy, int funfirs
+ if (msymbol != NULL)
+ return minsym_found (funfirstline, msymbol);
+
+- if (!have_full_symbols () &&
++ /*if (!have_full_symbols () &&
+ !have_partial_symbols () && !have_minimal_symbols ())
+- error (_("No symbol table is loaded. Use the \"file\" command."));
++ error (_("No symbol table is loaded. Use the \"file\" command."));*/
+
+ if (not_found_ptr)
+ *not_found_ptr = 1;
+- throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
++ throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined in loaded symbols."), copy);
+ }
+
+
+diff -urp gdb-6.8_orig/gdb/win32-nat.c gdb-6.8/gdb/win32-nat.c
+--- gdb-6.8_orig/gdb/win32-nat.c 2008-01-29 13:11:24.000000000 -0800
++++ gdb-6.8/gdb/win32-nat.c 2008-04-18 17:45:52.000000000 -0700
+@@ -1031,6 +1031,10 @@ handle_exception (struct target_waitstat
+ DEBUG_EXCEPTION_SIMPLE ("STATUS_STACK_OVERFLOW");
+ ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+ break;
++ case STATUS_INVALID_HANDLE:
++ DEBUG_EXCEPTION_SIMPLE ("STATUS_INVALID_HANDLE");
++ ourstatus->value.sig = TARGET_SIGNAL_TRAP;
++ break;
+ case STATUS_FLOAT_DENORMAL_OPERAND:
+ DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DENORMAL_OPERAND");
+ ourstatus->value.sig = TARGET_SIGNAL_FPE;
diff --git a/recipes/gdb/gdb-6.8/gdb-6.8-mips-mingw-sim-fixup.patch b/recipes/gdb/gdb-6.8/gdb-6.8-mips-mingw-sim-fixup.patch
new file mode 100644
index 0000000000..2a31e29174
--- /dev/null
+++ b/recipes/gdb/gdb-6.8/gdb-6.8-mips-mingw-sim-fixup.patch
@@ -0,0 +1,17 @@
+---
+ sim/common/sim-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gdb-6.8/sim/common/sim-signal.c
+===================================================================
+--- gdb-6.8.orig/sim/common/sim-signal.c
++++ gdb-6.8/sim/common/sim-signal.c
+@@ -26,7 +26,7 @@ along with this program. If not, see <h
+ to not think the process has died (so it can be debugged at the point of
+ failure). */
+
+-#ifdef _MSC_VER
++#ifdef __WIN32
+ #ifndef SIGTRAP
+ #define SIGTRAP 5
+ #endif
diff --git a/recipes/gdb/gdb-6.8/gdb-6.8-pr9638-ppc-canadian-configh.patch b/recipes/gdb/gdb-6.8/gdb-6.8-pr9638-ppc-canadian-configh.patch
new file mode 100644
index 0000000000..83e85ba3cd
--- /dev/null
+++ b/recipes/gdb/gdb-6.8/gdb-6.8-pr9638-ppc-canadian-configh.patch
@@ -0,0 +1,179 @@
+diff -urN gdb-6.8-pl1/sim/ppc/Makefile.in gdb-6.8-pl2/sim/ppc/Makefile.in
+--- gdb-6.8-pl1/sim/ppc/Makefile.in 2006-05-31 17:14:45.000000000 +0200
++++ gdb-6.8-pl2/sim/ppc/Makefile.in 2008-09-30 15:56:33.000000000 +0200
+@@ -61,7 +61,7 @@
+ AR = @AR@
+ AR_FLAGS = rc
+ CC = @CC@
+-CFLAGS = @CFLAGS@
++CFLAGS = @CFLAGS@ -DHAVE_CONFIG_H
+ CC_FOR_BUILD = @CC_FOR_BUILD@
+ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+ BISON = bison
+@@ -115,8 +115,8 @@
+ $(DEVZERO_CFLAGS)
+ SIM_FPU_CFLAGS = @sim_fpu_cflags@
+
+-STD_CFLAGS = $(CFLAGS) $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(WARNING_CFLAGS) $(SIM_CFLAGS) $(HDEFINES) $(TDEFINES) $(INCLUDES) $(INTL_CFLAGS) $(SIM_FPU_CFLAGS)
+-NOWARN_CFLAGS = $(CFLAGS) $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(SIM_CFLAGS) $(HDEFINES) $(TDEFINES) $(INCLUDES) $(SIM_FPU_CFLAGS)
++STD_CFLAGS = $(CFLAGS) -DHAVE_CONFIG_H $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(WARNING_CFLAGS) $(SIM_CFLAGS) $(HDEFINES) $(TDEFINES) $(INCLUDES) $(INTL_CFLAGS) $(SIM_FPU_CFLAGS)
++NOWARN_CFLAGS = $(CFLAGS) -DHAVE_CONFIG_H $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(SIM_CFLAGS) $(HDEFINES) $(TDEFINES) $(INCLUDES) $(SIM_FPU_CFLAGS)
+ BUILD_CFLAGS = $(CFLAGS_FOR_BUILD) $(INCLUDES) $(WARNING_CFLAGS)
+
+ BUILD_LDFLAGS =
+diff -urN gdb-6.8-orig/sim/ppc/basics.h gdb-6.8-pl1/sim/ppc/basics.h
+--- gdb-6.8-orig/sim/ppc/basics.h 1999-04-16 03:35:08.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/basics.h 2008-09-30 15:12:32.000000000 +0200
+@@ -86,7 +86,9 @@
+
+ /* Basic configuration */
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "ppc-config.h"
+ #include "inline.h"
+
+diff -urN gdb-6.8-orig/sim/ppc/debug.c gdb-6.8-pl1/sim/ppc/debug.c
+--- gdb-6.8-orig/sim/ppc/debug.c 1999-04-16 03:35:08.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/debug.c 2008-09-30 15:12:27.000000000 +0200
+@@ -22,7 +22,9 @@
+ #ifndef _DEBUG_C_
+ #define _DEBUG_C_
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "basics.h"
+
+ #ifdef HAVE_STDLIB_H
+diff -urN gdb-6.8-orig/sim/ppc/dgen.c gdb-6.8-pl1/sim/ppc/dgen.c
+--- gdb-6.8-orig/sim/ppc/dgen.c 1999-04-16 03:35:08.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/dgen.c 2008-09-30 15:12:22.000000000 +0200
+@@ -27,7 +27,9 @@
+ #include <ctype.h>
+ #include <stdarg.h>
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "misc.h"
+ #include "lf.h"
+ #include "table.h"
+diff -urN gdb-6.8-orig/sim/ppc/filter.c gdb-6.8-pl1/sim/ppc/filter.c
+--- gdb-6.8-orig/sim/ppc/filter.c 1999-04-16 03:35:09.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/filter.c 2008-09-30 15:12:15.000000000 +0200
+@@ -21,7 +21,9 @@
+
+ #include <stdio.h>
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+diff -urN gdb-6.8-orig/sim/ppc/filter_filename.c gdb-6.8-pl1/sim/ppc/filter_filename.c
+--- gdb-6.8-orig/sim/ppc/filter_filename.c 1999-04-16 03:35:08.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/filter_filename.c 2008-09-30 15:12:11.000000000 +0200
+@@ -18,7 +18,9 @@
+
+ */
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "ppc-config.h"
+ #include "filter_filename.h"
+
+diff -urN gdb-6.8-orig/sim/ppc/igen.c gdb-6.8-pl1/sim/ppc/igen.c
+--- gdb-6.8-orig/sim/ppc/igen.c 2003-06-20 05:59:33.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/igen.c 2008-09-30 15:12:06.000000000 +0200
+@@ -25,7 +25,9 @@
+ #include "misc.h"
+ #include "lf.h"
+ #include "table.h"
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+
+ #include "filter.h"
+
+diff -urN gdb-6.8-orig/sim/ppc/inline.c gdb-6.8-pl1/sim/ppc/inline.c
+--- gdb-6.8-orig/sim/ppc/inline.c 1999-04-16 03:35:10.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/inline.c 2008-09-30 15:11:58.000000000 +0200
+@@ -22,7 +22,9 @@
+ #ifndef _INLINE_C_
+ #define _INLINE_C_
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "ppc-config.h"
+
+ #include "inline.h"
+diff -urN gdb-6.8-orig/sim/ppc/lf.c gdb-6.8-pl1/sim/ppc/lf.c
+--- gdb-6.8-orig/sim/ppc/lf.c 2002-05-30 17:07:06.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/lf.c 2008-09-30 15:33:35.000000000 +0200
+@@ -23,7 +23,9 @@
+ #include <stdarg.h>
+ #include <ctype.h>
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "misc.h"
+ #include "lf.h"
+
+diff -urN gdb-6.8-orig/sim/ppc/misc.c gdb-6.8-pl1/sim/ppc/misc.c
+--- gdb-6.8-orig/sim/ppc/misc.c 1999-04-16 03:35:11.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/misc.c 2008-09-30 15:11:54.000000000 +0200
+@@ -23,7 +23,9 @@
+ #include <stdarg.h>
+ #include <ctype.h>
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "misc.h"
+
+ #ifdef HAVE_STDLIB_H
+diff -urN gdb-6.8-orig/sim/ppc/misc.h gdb-6.8-pl1/sim/ppc/misc.h
+--- gdb-6.8-orig/sim/ppc/misc.h 2002-01-12 11:21:12.000000000 +0100
++++ gdb-6.8-pl1/sim/ppc/misc.h 2008-09-30 15:11:49.000000000 +0200
+@@ -21,7 +21,9 @@
+
+ /* Frustrating header junk */
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+
+ #include <stdio.h>
+ #include <ctype.h>
+diff -urN gdb-6.8-orig/sim/ppc/sim-endian.c gdb-6.8-pl1/sim/ppc/sim-endian.c
+--- gdb-6.8-orig/sim/ppc/sim-endian.c 1999-04-16 03:35:11.000000000 +0200
++++ gdb-6.8-pl1/sim/ppc/sim-endian.c 2008-09-30 15:11:44.000000000 +0200
+@@ -22,7 +22,9 @@
+ #ifndef _SIM_ENDIAN_C_
+ #define _SIM_ENDIAN_C_
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "basics.h"
+
+
+diff -urN gdb-6.8-orig/sim/ppc/table.c gdb-6.8-pl1/sim/ppc/table.c
+--- gdb-6.8-orig/sim/ppc/table.c 2002-01-12 11:21:12.000000000 +0100
++++ gdb-6.8-pl1/sim/ppc/table.c 2008-09-30 15:11:38.000000000 +0200
+@@ -25,7 +25,9 @@
+ #include <fcntl.h>
+ #include <ctype.h>
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ #include "misc.h"
+ #include "lf.h"
+ #include "table.h"
diff --git a/recipes/gdb/gdb-avr32.inc b/recipes/gdb/gdb-avr32.inc
new file mode 100644
index 0000000000..0c0255fdb2
--- /dev/null
+++ b/recipes/gdb/gdb-avr32.inc
@@ -0,0 +1,32 @@
+# Perform tasks required to use Atmel's AVR32 patches
+# See http://avr32linux.org/twiki/bin/view/Main/GDBPatches for more info
+
+
+do_avr32_reconf () {
+ if test ${TARGET_ARCH} == "avr32"; then
+ (cd ${S} && autoconf) || \
+ die "failure running autoconf in top-level gdb"
+
+ (cd ${S}/bfd && autoreconf) || \
+ die "failure running autoreconf in bfd/"
+
+ (cd ${S}/opcodes && autoreconf) || \
+ die "failure running autoreconf in opcodes/"
+ fi
+
+}
+
+
+
+do_avr32_configure_bfd () {
+ if test ${TARGET_ARCH} == "avr32"; then
+ (cd ${B} && make configure-bfd) || die "Error running configure-bfd"
+ (cd ${B}/bfd && make headers) || \
+ die "error running 'make headers' in bfd"
+ fi
+}
+
+
+addtask avr32_reconf after do_patch before do_configure
+addtask avr32_configure_bfd after do_configure before do_compile
+
diff --git a/recipes/gdb/gdb-canadian-cross.inc b/recipes/gdb/gdb-canadian-cross.inc
new file mode 100644
index 0000000000..f472b538b0
--- /dev/null
+++ b/recipes/gdb/gdb-canadian-cross.inc
@@ -0,0 +1,18 @@
+require gdb-common.inc
+
+inherit canadian-sdk
+
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+
+ # Fix for issues when system's texinfo version >= 4.10
+ # (See https://bugzilla.redhat.com/show_bug.cgi?id=345621)
+ sed -i -e "s@egrep 'texinfo.*'@egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|4.[1-9][0-9]+|[5-9])'@" '${S}/configure'
+
+
+ oe_runconf
+}
diff --git a/recipes/gdb/gdb-canadian-sdk_6.8.bb b/recipes/gdb/gdb-canadian-sdk_6.8.bb
new file mode 100644
index 0000000000..1eefddc917
--- /dev/null
+++ b/recipes/gdb/gdb-canadian-sdk_6.8.bb
@@ -0,0 +1,12 @@
+require gdb-canadian-cross.inc
+
+SRC_URI += "file://gcc-4.3-build-error.patch;patch=1;pnum=0 \
+ file://gdb-6.8-mingw-3.patch;patch=1 \
+ file://gdb-6.8-pr9638-ppc-canadian-configh.patch;patch=1 \
+ file://gdb-6.8-mips-mingw-sim-fixup.patch;patch=1"
+
+PR = "r1"
+
+do_stage() {
+ :
+}
diff --git a/recipes/gdb/gdb-common.inc b/recipes/gdb/gdb-common.inc
new file mode 100644
index 0000000000..0c236925dc
--- /dev/null
+++ b/recipes/gdb/gdb-common.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "gdb - GNU debugger"
+HOMEPAGE = "http://www.gnu.org/software/gdb/"
+LICENSE="GPL"
+SECTION = "devel"
+PRIORITY = "optional"
+
+inherit autotools
+
+SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gdb-${PV}"
+
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CXX_FOR_BUILD = "${BUILD_CXX}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
+export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
+
+S = "${WORKDIR}/gdb-${PV}"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
diff --git a/recipes/gdb/gdb-cross-sdk_6.6.bb b/recipes/gdb/gdb-cross-sdk_6.6.bb
new file mode 100644
index 0000000000..656119cf93
--- /dev/null
+++ b/recipes/gdb/gdb-cross-sdk_6.6.bb
@@ -0,0 +1,13 @@
+require gdb-cross.inc
+
+inherit sdk
+
+DEPENDS = "ncurses-sdk"
+
+PR = "r3"
+
+SRC_URI += "file://early_debug_in_nptl.patch;patch=1;pnum=0"
+
+do_stage() {
+ :
+}
diff --git a/recipes/gdb/gdb-cross-sdk_6.8.bb b/recipes/gdb/gdb-cross-sdk_6.8.bb
new file mode 100644
index 0000000000..6aed03d639
--- /dev/null
+++ b/recipes/gdb/gdb-cross-sdk_6.8.bb
@@ -0,0 +1,13 @@
+require gdb-cross.inc
+
+SRC_URI += "file://gcc-4.3-build-error.patch;patch=1;pnum=0"
+
+DEPENDS = "ncurses-sdk"
+
+inherit sdk
+
+PR = "r2"
+
+do_stage() {
+ :
+}
diff --git a/recipes/gdb/gdb-cross.inc b/recipes/gdb/gdb-cross.inc
new file mode 100644
index 0000000000..6d4c3d177e
--- /dev/null
+++ b/recipes/gdb/gdb-cross.inc
@@ -0,0 +1,24 @@
+require gdb-common.inc
+
+DEPENDS = "ncurses-native"
+
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
+
+EXTRA_OECONF = "--with-curses --with-readline"
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+
+ # Fix for issues when system's texinfo version >= 4.10
+ # (See https://bugzilla.redhat.com/show_bug.cgi?id=345621)
+ sed -i -e "s@egrep 'texinfo.*'@egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|4.[1-9][0-9]+|[5-9])'@" '${S}/configure'
+
+
+ oe_runconf
+}
+
+do_stage () {
+ oe_runmake install
+}
diff --git a/recipes/gdb/gdb-cross_6.3.bb b/recipes/gdb/gdb-cross_6.3.bb
new file mode 100644
index 0000000000..5b27e09959
--- /dev/null
+++ b/recipes/gdb/gdb-cross_6.3.bb
@@ -0,0 +1,8 @@
+require gdb-cross.inc
+
+inherit cross
+
+PR = "r3"
+
+SRC_URI += "file://sim-install-makefile.patch;patch=1 \
+ file://sim-install-makefile-common.patch;patch=1"
diff --git a/recipes/gdb/gdb-cross_6.4.bb b/recipes/gdb/gdb-cross_6.4.bb
new file mode 100644
index 0000000000..e4946b0fe1
--- /dev/null
+++ b/recipes/gdb/gdb-cross_6.4.bb
@@ -0,0 +1,5 @@
+require gdb-cross.inc
+
+inherit cross
+
+PR = "r1" \ No newline at end of file
diff --git a/recipes/gdb/gdb-cross_6.6.bb b/recipes/gdb/gdb-cross_6.6.bb
new file mode 100644
index 0000000000..570dd52859
--- /dev/null
+++ b/recipes/gdb/gdb-cross_6.6.bb
@@ -0,0 +1,7 @@
+require gdb-cross.inc
+inherit cross
+
+PR = "r3"
+
+SRC_URI += "file://early_debug_in_nptl.patch;patch=1;pnum=0"
+
diff --git a/recipes/gdb/gdb-cross_6.7.1.bb b/recipes/gdb/gdb-cross_6.7.1.bb
new file mode 100644
index 0000000000..adccebe115
--- /dev/null
+++ b/recipes/gdb/gdb-cross_6.7.1.bb
@@ -0,0 +1,19 @@
+require gdb-cross.inc
+inherit cross
+
+DEFAULT_PREFERENCE_avr32 = "99"
+SRC_URI_avr32 = " http://avr32linux.org/twiki/pub/Main/GDBPatches/gdb-6.7.1.atmel.1.0.3.tar.bz2"
+S_avr32 = "${WORKDIR}/gdb-6.7.1.atmel.1.0.3"
+
+do_configure_prepend() {
+ for i in $(find ${S} -name "warning*m4") ; do
+ sed -i -e s:-Werror::g $i
+ done
+ for i in $(find ${S} -name "configure.ac") ; do
+ sed -i -e s:-Werror::g $i
+ done
+ for i in $(find ${S} -name "configure") ; do
+ sed -i -e s:-Werror::g $i
+ done
+}
+
diff --git a/recipes/gdb/gdb-cross_6.8.bb b/recipes/gdb/gdb-cross_6.8.bb
new file mode 100644
index 0000000000..664ab5e323
--- /dev/null
+++ b/recipes/gdb/gdb-cross_6.8.bb
@@ -0,0 +1,7 @@
+require gdb-cross.inc
+
+SRC_URI += "file://gcc-4.3-build-error.patch;patch=1;pnum=0"
+
+inherit cross
+
+PR = "r3"
diff --git a/recipes/gdb/gdb.inc b/recipes/gdb/gdb.inc
new file mode 100644
index 0000000000..77a9ca6a3e
--- /dev/null
+++ b/recipes/gdb/gdb.inc
@@ -0,0 +1,47 @@
+require gdb-common.inc
+
+DEFAULT_PREFERENCE_avr32 = "-99"
+
+DEPENDS = "ncurses readline"
+
+PACKAGES =+ "gdbserver"
+FILES_gdbserver = "${bindir}/gdbserver"
+
+RRECOMMENDS_gdb_append_linux = " glibc-thread-db "
+RRECOMMENDS_gdb_append_linux-gnueabi = " glibc-thread-db "
+
+inherit gettext
+
+SRC_URI += "file://kill_arm_map_symbols.patch;patch=1 \
+ file://gdbserver-cflags-last.diff;patch=1;pnum=0"
+#FIXME file://uclibc.patch;patch=1 \
+
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
+
+EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
+ --with-curses --disable-multilib --with-readline --disable-sim \
+ --program-prefix=''"
+
+LDFLAGS_append = " -s"
+export CFLAGS_append=" -L${STAGING_LIBDIR}"
+
+do_configure () {
+ # override this function to avoid the autoconf/automake/aclocal/autoheader
+ # calls for now
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+
+ # Remove duplicate spaces to work around configure complaining about
+ # changed LDFLAGS.
+ LDFLAGS=$(echo "${LDFLAGS}" | sed "s/ / /")
+
+ CPPFLAGS="" oe_runconf
+}
+
+do_install () {
+ make -C bfd/doc chew LDFLAGS= CFLAGS=-O2
+ oe_runmake DESTDIR='${D}' install
+ install -d ${D}${bindir}
+ install -m 0755 gdb/gdbserver/gdbserver ${D}${bindir}
+}
+
+
diff --git a/recipes/gdb/gdb_6.3.bb b/recipes/gdb/gdb_6.3.bb
new file mode 100644
index 0000000000..988cfb4c44
--- /dev/null
+++ b/recipes/gdb/gdb_6.3.bb
@@ -0,0 +1,3 @@
+require gdb.inc
+
+PR = "r4"
diff --git a/recipes/gdb/gdb_6.4.bb b/recipes/gdb/gdb_6.4.bb
new file mode 100644
index 0000000000..be40f3f12b
--- /dev/null
+++ b/recipes/gdb/gdb_6.4.bb
@@ -0,0 +1,3 @@
+require gdb.inc
+
+PR = "r2"
diff --git a/recipes/gdb/gdb_6.6.bb b/recipes/gdb/gdb_6.6.bb
new file mode 100644
index 0000000000..e4502a648e
--- /dev/null
+++ b/recipes/gdb/gdb_6.6.bb
@@ -0,0 +1,5 @@
+require gdb.inc
+
+PR = "r5"
+
+SRC_URI += "file://early_debug_in_nptl.patch;patch=1;pnum=0"
diff --git a/recipes/gdb/gdb_6.7.1.bb b/recipes/gdb/gdb_6.7.1.bb
new file mode 100644
index 0000000000..fedf2bf1f1
--- /dev/null
+++ b/recipes/gdb/gdb_6.7.1.bb
@@ -0,0 +1,7 @@
+require gdb.inc
+
+PR = "r1"
+
+DEFAULT_PREFERENCE_avr32 = "99"
+SRC_URI_avr32 = " http://avr32linux.org/twiki/pub/Main/GDBPatches/gdb-6.7.1.atmel.1.0.3.tar.bz2"
+S_avr32 = "${WORKDIR}/gdb-6.7.1.atmel.1.0.3"
diff --git a/recipes/gdb/gdb_6.8.bb b/recipes/gdb/gdb_6.8.bb
new file mode 100644
index 0000000000..a969651c24
--- /dev/null
+++ b/recipes/gdb/gdb_6.8.bb
@@ -0,0 +1,5 @@
+require gdb.inc
+
+SRC_URI += "file://gcc-4.3-build-error.patch;patch=1;pnum=0"
+
+PR = "r3"
diff --git a/recipes/gdb/gdbserver.inc b/recipes/gdb/gdbserver.inc
new file mode 100644
index 0000000000..a1610daff8
--- /dev/null
+++ b/recipes/gdb/gdbserver.inc
@@ -0,0 +1,66 @@
+require gdb-common.inc
+
+DEFAULT_PREFERENCE_avr32 = "-99"
+
+DEPENDS = "ncurses readline"
+
+FILES_gdbserver = "${bindir}/gdbserver"
+
+RRECOMMENDS_gdb_append_linux = " glibc-thread-db "
+RRECOMMENDS_gdb_append_linux-gnueabi = " glibc-thread-db "
+
+inherit gettext
+
+SRC_URI += "file://kill_arm_map_symbols.patch;patch=1 \
+ file://gdbserver-cflags-last.diff;patch=1;pnum=0"
+#FIXME file://uclibc.patch;patch=1 \
+
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
+
+EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
+ --with-curses --disable-multilib --with-readline --disable-sim \
+ --program-prefix=''"
+
+LDFLAGS_append = " -s"
+export CFLAGS_append=" -L${STAGING_LIBDIR}"
+
+do_configure () {
+ # override this function to avoid the autoconf/automake/aclocal/autoheader
+ # calls for now
+ (cd ${S}/gdb/gdbserver && gnu-configize) || die "failure in running gnu-configize"
+ CPPFLAGS="" oe_rungdbserverconf
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/gdbserver ${D}${bindir}
+}
+
+oe_rungdbserverconf() {
+ if [ -x ${S}/gdb/gdbserver/configure ] ; then
+ cfgcmd="${S}/gdb/gdbserver/configure \
+ --build=${BUILD_SYS} \
+ --host=${HOST_SYS} \
+ --target=${TARGET_SYS} \
+ --prefix=${prefix} \
+ --exec_prefix=${exec_prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --oldincludedir=${oldincludedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF} \
+ $@"
+ oenote "Running $cfgcmd..."
+ $cfgcmd || oefatal "oe_runconf failed"
+ else
+ oefatal "no configure script found"
+ fi
+}
diff --git a/recipes/gdb/gdbserver_6.7.1.bb b/recipes/gdb/gdbserver_6.7.1.bb
new file mode 100644
index 0000000000..fb92ebc424
--- /dev/null
+++ b/recipes/gdb/gdbserver_6.7.1.bb
@@ -0,0 +1,6 @@
+require gdbserver.inc
+
+DEFAULT_PREFERENCE_avr32 = "99"
+SRC_URI_avr32 = " http://avr32linux.org/twiki/pub/Main/GDBPatches/gdb-6.7.1.atmel.1.0.3.tar.bz2"
+S_avr32 = "${WORKDIR}/gdb-6.7.1.atmel.1.0.3"
+
diff --git a/recipes/gdb/gdbserver_6.8.bb b/recipes/gdb/gdbserver_6.8.bb
new file mode 100644
index 0000000000..67fc280ea2
--- /dev/null
+++ b/recipes/gdb/gdbserver_6.8.bb
@@ -0,0 +1 @@
+require gdbserver.inc