summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/checksums.ini4
-rw-r--r--recipes/gdb/gdb-7.0/gdb-6.8-fix-compile-karmic.patch22
-rw-r--r--recipes/gdb/gdb-7.0/gdb-6.8-mingw-3.patch374
-rw-r--r--recipes/gdb/gdb-7.0/gdb-6.8-pr9638-ppc-canadian-configh.patch179
-rw-r--r--recipes/gdb/gdb-7.0/gdbserver-cflags-last.diff15
-rw-r--r--recipes/gdb/gdb-canadian-sdk_7.0.bb11
-rw-r--r--recipes/gdb/gdb-cross-sdk_7.0.bb13
-rw-r--r--recipes/gdb/gdb-cross_7.0.bb7
-rw-r--r--recipes/gdb/gdb_7.0.bb5
-rw-r--r--recipes/gdb/gdbserver.inc2
-rw-r--r--recipes/gdb/gdbserver_7.0.bb5
11 files changed, 637 insertions, 0 deletions
diff --git a/conf/checksums.ini b/conf/checksums.ini
index 35745403c4..ef0e7daad2 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -7818,6 +7818,10 @@ sha256=66e6ff871a7ed71ea433b8341ffebbe48590119e43a42953d392f5ce517c95e4
md5=925695333524108291dc4012c4c9cbb8
sha256=a3c5455f30ffb3e6eeafb9e54598b48f9fbf46e3e99f431120360c183ddcc889
+[ftp://ftp.gnu.org/gnu/gdb/gdb-7.0.tar.gz]
+md5=67b4144db385620d7b93f7b0c26800f7
+sha256=ccff6cab0e847c486d30b70bdddac4e6646bafcecaa3b63134d6e3d4d5a4b91d
+
[ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.8.3.tar.gz]
md5=1d1b1d5c0245b1c00aff92da751e9aa1
sha256=cc340338a2e28b40058ab9eb5354a21d53f88a1582ea21ba0bb185c37a281dc9
diff --git a/recipes/gdb/gdb-7.0/gdb-6.8-fix-compile-karmic.patch b/recipes/gdb/gdb-7.0/gdb-6.8-fix-compile-karmic.patch
new file mode 100644
index 0000000000..1080b162aa
--- /dev/null
+++ b/recipes/gdb/gdb-7.0/gdb-6.8-fix-compile-karmic.patch
@@ -0,0 +1,22 @@
+fix this on karmic
+
+cc1: warnings being treated as errors
+/home/ich/build/arm/armv5t/tmp/work/i686-armv5te-sdk-oe-linux-gnueabi/gdb-cross-sdk-6.8-r2/gdb-6.8/gdb/eval.c: In function 'evaluate_subexp_standard':
+/home/ich/build/arm/armv5t/tmp/work/i686-armv5te-sdk-oe-linux-gnueabi/gdb-cross-sdk-6.8-r2/gdb-6.8/gdb/eval.c:1705: error: 'subscript_array' may be used uninitialized in this function
+/home/ich/build/arm/armv5t/tmp/work/i686-armv5te-sdk-oe-linux-gnueabi/gdb-cross-sdk-6.8-r2/gdb-6.8/gdb/eval.c:1644: note: 'subscript_array' was declared here
+
+
+
+Index: gdb-6.8/gdb/eval.c
+===================================================================
+--- gdb-6.8.orig/gdb/eval.c 2009-08-02 03:25:20.000000000 +0200
++++ gdb-6.8/gdb/eval.c 2009-08-02 03:53:39.000000000 +0200
+@@ -1656,6 +1656,8 @@
+ if (nargs != ndimensions)
+ error (_("Wrong number of subscripts"));
+
++ memset(&subscript_array, 0, sizeof(subscript_array));
++
+ /* Now that we know we have a legal array subscript expression
+ let us actually find out where this element exists in the array. */
+
diff --git a/recipes/gdb/gdb-7.0/gdb-6.8-mingw-3.patch b/recipes/gdb/gdb-7.0/gdb-6.8-mingw-3.patch
new file mode 100644
index 0000000000..5bede42eb0
--- /dev/null
+++ b/recipes/gdb/gdb-7.0/gdb-6.8-mingw-3.patch
@@ -0,0 +1,374 @@
+Index: gdb-7.0/gdb/gdbserver/remote-utils.c
+===================================================================
+--- gdb-7.0.orig/gdb/gdbserver/remote-utils.c 2009-07-06 11:31:20.000000000 -0700
++++ gdb-7.0/gdb/gdbserver/remote-utils.c 2009-10-13 15:16:16.495396950 -0700
+@@ -778,7 +778,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);
+Index: gdb-7.0/gdb/gdbserver/server.c
+===================================================================
+--- gdb-7.0.orig/gdb/gdbserver/server.c 2009-06-30 09:35:25.000000000 -0700
++++ gdb-7.0/gdb/gdbserver/server.c 2009-10-13 15:18:08.065401029 -0700
+@@ -31,6 +31,9 @@
+ #if HAVE_MALLOC_H
+ #include <malloc.h>
+ #endif
++#ifdef _WIN32
++#include <windows.h>
++#endif
+
+ ptid_t cont_thread;
+ ptid_t general_thread;
+@@ -502,6 +505,20 @@ monitor_show_help (void)
+ monitor_output (" Enable h/w breakpoint/watchpoint 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");
+ }
+@@ -660,6 +677,47 @@ handle_search_memory (char *own_buf, int
+ 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)
+@@ -1216,6 +1274,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;
+@@ -1295,6 +1505,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)
+Index: gdb-7.0/gdb/gdbserver/win32-low.c
+===================================================================
+--- gdb-7.0.orig/gdb/gdbserver/win32-low.c 2009-07-04 11:13:28.000000000 -0700
++++ gdb-7.0/gdb/gdbserver/win32-low.c 2009-10-13 15:16:16.495396950 -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
+@@ -556,9 +556,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 ();
+@@ -699,8 +699,37 @@ win32_kill (int pid)
+ if (current_process_handle == NULL)
+ return -1;
+
+- 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;
+@@ -1207,6 +1236,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:
+@@ -1217,7 +1247,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;
+Index: gdb-7.0/gdb/windows-nat.c
+===================================================================
+--- gdb-7.0.orig/gdb/windows-nat.c 2009-09-30 00:40:10.000000000 -0700
++++ gdb-7.0/gdb/windows-nat.c 2009-10-13 15:16:16.505397243 -0700
+@@ -1035,6 +1035,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-7.0/gdb-6.8-pr9638-ppc-canadian-configh.patch b/recipes/gdb/gdb-7.0/gdb-6.8-pr9638-ppc-canadian-configh.patch
new file mode 100644
index 0000000000..83e85ba3cd
--- /dev/null
+++ b/recipes/gdb/gdb-7.0/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-7.0/gdbserver-cflags-last.diff b/recipes/gdb/gdb-7.0/gdbserver-cflags-last.diff
new file mode 100644
index 0000000000..57e78f6b3d
--- /dev/null
+++ b/recipes/gdb/gdb-7.0/gdbserver-cflags-last.diff
@@ -0,0 +1,15 @@
+Index: gdb/gdbserver/Makefile.in
+===================================================================
+--- gdb/gdbserver/Makefile.in.orig 2009-07-31 08:23:20.000000000 -0700
++++ gdb/gdbserver/Makefile.in 2009-10-13 14:47:21.365401025 -0700
+@@ -89,8 +89,8 @@ WARN_CFLAGS = -Wall
+ CFLAGS = @CFLAGS@
+
+ # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
+-INTERNAL_CFLAGS = $(WARN_CFLAGS) ${CFLAGS} ${GLOBAL_CFLAGS} \
+- ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS}
++INTERNAL_CFLAGS = $(WARN_CFLAGS) ${GLOBAL_CFLAGS} \
++ ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CFLAGS}
+
+ # LDFLAGS is specifically reserved for setting from the command line
+ # when running make.
diff --git a/recipes/gdb/gdb-canadian-sdk_7.0.bb b/recipes/gdb/gdb-canadian-sdk_7.0.bb
new file mode 100644
index 0000000000..3b6eb2b07f
--- /dev/null
+++ b/recipes/gdb/gdb-canadian-sdk_7.0.bb
@@ -0,0 +1,11 @@
+require gdb-canadian-cross.inc
+LICENSE = "GPLv3"
+
+SRC_URI += "\
+ file://gdb-6.8-mingw-3.patch;patch=1 \
+ file://gdb-6.8-pr9638-ppc-canadian-configh.patch;patch=1 \
+ file://gdb-6.8-fix-compile-karmic.patch;patch=1 \
+ "
+do_stage() {
+ :
+}
diff --git a/recipes/gdb/gdb-cross-sdk_7.0.bb b/recipes/gdb/gdb-cross-sdk_7.0.bb
new file mode 100644
index 0000000000..10e4b1462f
--- /dev/null
+++ b/recipes/gdb/gdb-cross-sdk_7.0.bb
@@ -0,0 +1,13 @@
+require gdb-cross.inc
+LICENSE = "GPLv3"
+
+SRC_URI += "\
+ file://gdb-6.8-fix-compile-karmic.patch;patch=1"
+
+DEPENDS = "ncurses-sdk"
+
+inherit sdk
+
+do_stage() {
+ :
+}
diff --git a/recipes/gdb/gdb-cross_7.0.bb b/recipes/gdb/gdb-cross_7.0.bb
new file mode 100644
index 0000000000..6883b7c2e8
--- /dev/null
+++ b/recipes/gdb/gdb-cross_7.0.bb
@@ -0,0 +1,7 @@
+require gdb-cross.inc
+LICENSE = "GPLv3"
+
+SRC_URI += " \
+ file://gdb-6.8-fix-compile-karmic.patch;patch=1"
+
+inherit cross
diff --git a/recipes/gdb/gdb_7.0.bb b/recipes/gdb/gdb_7.0.bb
new file mode 100644
index 0000000000..9a4684409b
--- /dev/null
+++ b/recipes/gdb/gdb_7.0.bb
@@ -0,0 +1,5 @@
+require gdb.inc
+LICENSE = "GPLv3"
+
+SRC_URI += "\
+ file://gdb-6.8-fix-compile-karmic.patch;patch=1"
diff --git a/recipes/gdb/gdbserver.inc b/recipes/gdb/gdbserver.inc
index e02f276cb6..b98058fe5d 100644
--- a/recipes/gdb/gdbserver.inc
+++ b/recipes/gdb/gdbserver.inc
@@ -11,6 +11,8 @@ RRECOMMENDS_gdb_append_linux-gnueabi = " glibc-thread-db "
inherit gettext
+FILESPATHPKG =. "gdb-${PV}:"
+
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 \
diff --git a/recipes/gdb/gdbserver_7.0.bb b/recipes/gdb/gdbserver_7.0.bb
new file mode 100644
index 0000000000..96de5e90e5
--- /dev/null
+++ b/recipes/gdb/gdbserver_7.0.bb
@@ -0,0 +1,5 @@
+require gdbserver.inc
+
+LICENSE = "GPLv3"
+
+PR = "${INC_PR}.0"