summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/gdb/6.7.1/150-gdb-6.3-security-errata-20050610.patch205
-rw-r--r--patches/gdb/6.7.1/175-gdb-hppa-offsets.patch272
-rw-r--r--patches/gdb/6.7.1/200-gdb-deleted-children.patch26
-rw-r--r--patches/gdb/6.7.1/225-gdb-6.5-dwarf-stack-overflow.patch52
-rw-r--r--patches/gdb/6.7/100-gdb-6.3-security-errata-20050610.patch205
-rw-r--r--patches/gdb/6.7/125-gdb-hppa-offsets.patch272
-rw-r--r--patches/gdb/6.7/150-gdb-6.5-dwarf-stack-overflow.patch52
-rw-r--r--patches/gdb/6.8/100-gdb-6.5-dwarf-stack-overflow.patch52
-rw-r--r--patches/gdb/6.8/150-gdb-6.3-security-errata-20050610.patch205
-rw-r--r--patches/gdb/6.8/200-gdb-tdep-opcode-include-workaround.patch33
10 files changed, 1374 insertions, 0 deletions
diff --git a/patches/gdb/6.7.1/150-gdb-6.3-security-errata-20050610.patch b/patches/gdb/6.7.1/150-gdb-6.3-security-errata-20050610.patch
new file mode 100644
index 0000000..30c7f26
--- /dev/null
+++ b/patches/gdb/6.7.1/150-gdb-6.3-security-errata-20050610.patch
@@ -0,0 +1,205 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7.1/35_all_gdb-6.3-security-errata-20050610.patch
+-= BEGIN original header =-
+2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
+
+ * gdb.base/gdbinit.exp: New testcase.
+ * gdb.base/gdbinit.sample: Sample .gdbinit for gdbinit.exp.
+
+2005-06-08 Daniel Jacobowitz <dan@codesourcery.com>
+ Jeff Johnston <jjohnstn@redhat.com>
+
+ * Makefile.in (cli-cmds.o): Update.
+ * configure.in: Add check for getuid.
+ * configure: Regenerated.
+ * config.in: Ditto.
+ * main.c (captured_main): Pass -1 to source_command when loading
+ gdbinit files.
+ * cli/cli-cmds.c: Include "gdb_stat.h" and <fcntl.h>.
+ (source_command): Update documentation. Check permissions if
+ FROM_TTY is -1.
+
+-= END original header =-
+diff -durN gdb-6.7.1.orig/gdb/cli/cli-cmds.c gdb-6.7.1/gdb/cli/cli-cmds.c
+--- gdb-6.7.1.orig/gdb/cli/cli-cmds.c 2007-08-23 20:08:47.000000000 +0200
++++ gdb-6.7.1/gdb/cli/cli-cmds.c 2008-06-17 23:27:44.000000000 +0200
+@@ -36,6 +36,7 @@
+ #include "objfiles.h"
+ #include "source.h"
+ #include "disasm.h"
++#include "gdb_stat.h"
+
+ #include "ui-out.h"
+
+@@ -459,12 +460,31 @@
+
+ if (fd == -1)
+ {
+- if (from_tty)
++ if (from_tty > 0)
+ perror_with_name (file);
+ else
+ return;
+ }
+
++#ifdef HAVE_GETUID
++ if (from_tty == -1)
++ {
++ struct stat statbuf;
++ if (fstat (fd, &statbuf) < 0)
++ {
++ perror_with_name (file);
++ close (fd);
++ return;
++ }
++ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
++ {
++ warning (_("not using untrusted file \"%s\""), file);
++ close (fd);
++ return;
++ }
++ }
++#endif
++
+ stream = fdopen (fd, FOPEN_RT);
+ script_from_file (stream, file);
+
+diff -durN gdb-6.7.1.orig/gdb/main.c gdb-6.7.1/gdb/main.c
+--- gdb-6.7.1.orig/gdb/main.c 2007-08-23 20:08:36.000000000 +0200
++++ gdb-6.7.1/gdb/main.c 2008-06-17 23:27:44.000000000 +0200
+@@ -688,7 +688,7 @@
+
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, homeinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, homeinit, -1, RETURN_MASK_ALL);
+ }
+
+ /* Do stats; no need to do them elsewhere since we'll only
+@@ -766,7 +766,7 @@
+ || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, gdbinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, gdbinit, -1, RETURN_MASK_ALL);
+ }
+
+ for (i = 0; i < ncmd; i++)
+diff -durN gdb-6.7.1.orig/gdb/Makefile.in gdb-6.7.1/gdb/Makefile.in
+--- gdb-6.7.1.orig/gdb/Makefile.in 2008-06-17 23:27:44.000000000 +0200
++++ gdb-6.7.1/gdb/Makefile.in 2008-06-17 23:27:44.000000000 +0200
+@@ -2885,7 +2885,7 @@
+ $(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \
+ $(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \
+ $(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \
+- $(tui_h)
++ $(tui_h) $(gdb_stat_h)
+ $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-cmds.c
+ cli-decode.o: $(srcdir)/cli/cli-decode.c $(defs_h) $(symtab_h) \
+ $(gdb_regex_h) $(gdb_string_h) $(completer_h) $(ui_out_h) \
+diff -durN gdb-6.7.1.orig/gdb/testsuite/gdb.base/gdbinit.exp gdb-6.7.1/gdb/testsuite/gdb.base/gdbinit.exp
+--- gdb-6.7.1.orig/gdb/testsuite/gdb.base/gdbinit.exp 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7.1/gdb/testsuite/gdb.base/gdbinit.exp 2008-06-17 23:27:44.000000000 +0200
+@@ -0,0 +1,98 @@
++# Copyright 2005
++# Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++# are we on a target board
++if [is_remote target] {
++ return
++}
++
++
++global verbose
++global GDB
++global GDBFLAGS
++global gdb_prompt
++global timeout
++global gdb_spawn_id;
++
++gdb_stop_suppressing_tests;
++
++verbose "Spawning $GDB -nw"
++
++if [info exists gdb_spawn_id] {
++ return 0;
++}
++
++if ![is_remote host] {
++ if { [which $GDB] == 0 } then {
++ perror "$GDB does not exist."
++ exit 1
++ }
++}
++
++set env(HOME) [pwd]
++remote_exec build "rm .gdbinit"
++remote_exec build "cp ${srcdir}/${subdir}/gdbinit.sample .gdbinit"
++remote_exec build "chmod 646 .gdbinit"
++
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ pass "untrusted .gdbinit caught."
++ }
++ -re "$gdb_prompt $" {
++ fail "untrusted .gdbinit caught."
++ }
++ timeout {
++ fail "(timeout) untrusted .gdbinit caught."
++ }
++}
++
++remote_exec build "chmod 644 .gdbinit"
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ fail "trusted .gdbinit allowed."
++ }
++ -re "in gdbinit.*$gdb_prompt $" {
++ pass "trusted .gdbinit allowed."
++ }
++ timeout {
++ fail "(timeout) trusted .gdbinit allowed."
++ }
++}
++
++remote_exec build "rm .gdbinit"
+diff -durN gdb-6.7.1.orig/gdb/testsuite/gdb.base/gdbinit.sample gdb-6.7.1/gdb/testsuite/gdb.base/gdbinit.sample
+--- gdb-6.7.1.orig/gdb/testsuite/gdb.base/gdbinit.sample 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7.1/gdb/testsuite/gdb.base/gdbinit.sample 2008-06-17 23:27:44.000000000 +0200
+@@ -0,0 +1 @@
++echo "\nin gdbinit"
diff --git a/patches/gdb/6.7.1/175-gdb-hppa-offsets.patch b/patches/gdb/6.7.1/175-gdb-hppa-offsets.patch
new file mode 100644
index 0000000..06e1e74
--- /dev/null
+++ b/patches/gdb/6.7.1/175-gdb-hppa-offsets.patch
@@ -0,0 +1,272 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7.1/45_all_gdb-hppa-offsets.patch
+-= BEGIN original header =-
+sanitized headers dont include asm/offsets.h, so cache a local copy
+
+http://bugs.gentoo.org/180476
+http://lists.parisc-linux.org/pipermail/parisc-linux/2007-February/031162.html
+
+-= END original header =-
+diff -durN gdb-6.7.1.orig/gdb/hppa-linux-nat.c gdb-6.7.1/gdb/hppa-linux-nat.c
+--- gdb-6.7.1.orig/gdb/hppa-linux-nat.c 2007-08-23 20:08:33.000000000 +0200
++++ gdb-6.7.1/gdb/hppa-linux-nat.c 2008-06-17 23:27:45.000000000 +0200
+@@ -32,7 +32,7 @@
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,43)
+ #include <asm/offset.h>
+ #else
+-#include <asm/offsets.h>
++#include <hppa-offsets.h>
+ #endif
+
+ #include "hppa-tdep.h"
+diff -durN gdb-6.7.1.orig/gdb/hppa-offsets.h gdb-6.7.1/gdb/hppa-offsets.h
+--- gdb-6.7.1.orig/gdb/hppa-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7.1/gdb/hppa-offsets.h 2008-06-17 23:27:45.000000000 +0200
+@@ -0,0 +1,248 @@
++#ifndef __ASM_OFFSETS_H__
++#define __ASM_OFFSETS_H__
++/*
++ * DO NOT MODIFY.
++ *
++ * This file was generated by arch/parisc/Makefile
++ *
++ */
++
++#define TASK_THREAD_INFO 4 /* offsetof(struct task_struct, thread_info) */
++#define TASK_STATE 0 /* offsetof(struct task_struct, state) */
++#define TASK_FLAGS 12 /* offsetof(struct task_struct, flags) */
++#define TASK_SIGPENDING 1188 /* offsetof(struct task_struct, pending) */
++#define TASK_PTRACE 16 /* offsetof(struct task_struct, ptrace) */
++#define TASK_MM 108 /* offsetof(struct task_struct, mm) */
++#define TASK_PERSONALITY 132 /* offsetof(struct task_struct, personality) */
++#define TASK_PID 140 /* offsetof(struct task_struct, pid) */
++
++#define TASK_REGS 664 /* offsetof(struct task_struct, thread.regs) */
++#define TASK_PT_PSW 664 /* offsetof(struct task_struct, thread.regs.gr[ 0]) */
++#define TASK_PT_GR1 668 /* offsetof(struct task_struct, thread.regs.gr[ 1]) */
++#define TASK_PT_GR2 672 /* offsetof(struct task_struct, thread.regs.gr[ 2]) */
++#define TASK_PT_GR3 676 /* offsetof(struct task_struct, thread.regs.gr[ 3]) */
++#define TASK_PT_GR4 680 /* offsetof(struct task_struct, thread.regs.gr[ 4]) */
++#define TASK_PT_GR5 684 /* offsetof(struct task_struct, thread.regs.gr[ 5]) */
++#define TASK_PT_GR6 688 /* offsetof(struct task_struct, thread.regs.gr[ 6]) */
++#define TASK_PT_GR7 692 /* offsetof(struct task_struct, thread.regs.gr[ 7]) */
++#define TASK_PT_GR8 696 /* offsetof(struct task_struct, thread.regs.gr[ 8]) */
++#define TASK_PT_GR9 700 /* offsetof(struct task_struct, thread.regs.gr[ 9]) */
++#define TASK_PT_GR10 704 /* offsetof(struct task_struct, thread.regs.gr[10]) */
++#define TASK_PT_GR11 708 /* offsetof(struct task_struct, thread.regs.gr[11]) */
++#define TASK_PT_GR12 712 /* offsetof(struct task_struct, thread.regs.gr[12]) */
++#define TASK_PT_GR13 716 /* offsetof(struct task_struct, thread.regs.gr[13]) */
++#define TASK_PT_GR14 720 /* offsetof(struct task_struct, thread.regs.gr[14]) */
++#define TASK_PT_GR15 724 /* offsetof(struct task_struct, thread.regs.gr[15]) */
++#define TASK_PT_GR16 728 /* offsetof(struct task_struct, thread.regs.gr[16]) */
++#define TASK_PT_GR17 732 /* offsetof(struct task_struct, thread.regs.gr[17]) */
++#define TASK_PT_GR18 736 /* offsetof(struct task_struct, thread.regs.gr[18]) */
++#define TASK_PT_GR19 740 /* offsetof(struct task_struct, thread.regs.gr[19]) */
++#define TASK_PT_GR20 744 /* offsetof(struct task_struct, thread.regs.gr[20]) */
++#define TASK_PT_GR21 748 /* offsetof(struct task_struct, thread.regs.gr[21]) */
++#define TASK_PT_GR22 752 /* offsetof(struct task_struct, thread.regs.gr[22]) */
++#define TASK_PT_GR23 756 /* offsetof(struct task_struct, thread.regs.gr[23]) */
++#define TASK_PT_GR24 760 /* offsetof(struct task_struct, thread.regs.gr[24]) */
++#define TASK_PT_GR25 764 /* offsetof(struct task_struct, thread.regs.gr[25]) */
++#define TASK_PT_GR26 768 /* offsetof(struct task_struct, thread.regs.gr[26]) */
++#define TASK_PT_GR27 772 /* offsetof(struct task_struct, thread.regs.gr[27]) */
++#define TASK_PT_GR28 776 /* offsetof(struct task_struct, thread.regs.gr[28]) */
++#define TASK_PT_GR29 780 /* offsetof(struct task_struct, thread.regs.gr[29]) */
++#define TASK_PT_GR30 784 /* offsetof(struct task_struct, thread.regs.gr[30]) */
++#define TASK_PT_GR31 788 /* offsetof(struct task_struct, thread.regs.gr[31]) */
++#define TASK_PT_FR0 792 /* offsetof(struct task_struct, thread.regs.fr[ 0]) */
++#define TASK_PT_FR1 800 /* offsetof(struct task_struct, thread.regs.fr[ 1]) */
++#define TASK_PT_FR2 808 /* offsetof(struct task_struct, thread.regs.fr[ 2]) */
++#define TASK_PT_FR3 816 /* offsetof(struct task_struct, thread.regs.fr[ 3]) */
++#define TASK_PT_FR4 824 /* offsetof(struct task_struct, thread.regs.fr[ 4]) */
++#define TASK_PT_FR5 832 /* offsetof(struct task_struct, thread.regs.fr[ 5]) */
++#define TASK_PT_FR6 840 /* offsetof(struct task_struct, thread.regs.fr[ 6]) */
++#define TASK_PT_FR7 848 /* offsetof(struct task_struct, thread.regs.fr[ 7]) */
++#define TASK_PT_FR8 856 /* offsetof(struct task_struct, thread.regs.fr[ 8]) */
++#define TASK_PT_FR9 864 /* offsetof(struct task_struct, thread.regs.fr[ 9]) */
++#define TASK_PT_FR10 872 /* offsetof(struct task_struct, thread.regs.fr[10]) */
++#define TASK_PT_FR11 880 /* offsetof(struct task_struct, thread.regs.fr[11]) */
++#define TASK_PT_FR12 888 /* offsetof(struct task_struct, thread.regs.fr[12]) */
++#define TASK_PT_FR13 896 /* offsetof(struct task_struct, thread.regs.fr[13]) */
++#define TASK_PT_FR14 904 /* offsetof(struct task_struct, thread.regs.fr[14]) */
++#define TASK_PT_FR15 912 /* offsetof(struct task_struct, thread.regs.fr[15]) */
++#define TASK_PT_FR16 920 /* offsetof(struct task_struct, thread.regs.fr[16]) */
++#define TASK_PT_FR17 928 /* offsetof(struct task_struct, thread.regs.fr[17]) */
++#define TASK_PT_FR18 936 /* offsetof(struct task_struct, thread.regs.fr[18]) */
++#define TASK_PT_FR19 944 /* offsetof(struct task_struct, thread.regs.fr[19]) */
++#define TASK_PT_FR20 952 /* offsetof(struct task_struct, thread.regs.fr[20]) */
++#define TASK_PT_FR21 960 /* offsetof(struct task_struct, thread.regs.fr[21]) */
++#define TASK_PT_FR22 968 /* offsetof(struct task_struct, thread.regs.fr[22]) */
++#define TASK_PT_FR23 976 /* offsetof(struct task_struct, thread.regs.fr[23]) */
++#define TASK_PT_FR24 984 /* offsetof(struct task_struct, thread.regs.fr[24]) */
++#define TASK_PT_FR25 992 /* offsetof(struct task_struct, thread.regs.fr[25]) */
++#define TASK_PT_FR26 1000 /* offsetof(struct task_struct, thread.regs.fr[26]) */
++#define TASK_PT_FR27 1008 /* offsetof(struct task_struct, thread.regs.fr[27]) */
++#define TASK_PT_FR28 1016 /* offsetof(struct task_struct, thread.regs.fr[28]) */
++#define TASK_PT_FR29 1024 /* offsetof(struct task_struct, thread.regs.fr[29]) */
++#define TASK_PT_FR30 1032 /* offsetof(struct task_struct, thread.regs.fr[30]) */
++#define TASK_PT_FR31 1040 /* offsetof(struct task_struct, thread.regs.fr[31]) */
++#define TASK_PT_SR0 1048 /* offsetof(struct task_struct, thread.regs.sr[ 0]) */
++#define TASK_PT_SR1 1052 /* offsetof(struct task_struct, thread.regs.sr[ 1]) */
++#define TASK_PT_SR2 1056 /* offsetof(struct task_struct, thread.regs.sr[ 2]) */
++#define TASK_PT_SR3 1060 /* offsetof(struct task_struct, thread.regs.sr[ 3]) */
++#define TASK_PT_SR4 1064 /* offsetof(struct task_struct, thread.regs.sr[ 4]) */
++#define TASK_PT_SR5 1068 /* offsetof(struct task_struct, thread.regs.sr[ 5]) */
++#define TASK_PT_SR6 1072 /* offsetof(struct task_struct, thread.regs.sr[ 6]) */
++#define TASK_PT_SR7 1076 /* offsetof(struct task_struct, thread.regs.sr[ 7]) */
++#define TASK_PT_IASQ0 1080 /* offsetof(struct task_struct, thread.regs.iasq[0]) */
++#define TASK_PT_IASQ1 1084 /* offsetof(struct task_struct, thread.regs.iasq[1]) */
++#define TASK_PT_IAOQ0 1088 /* offsetof(struct task_struct, thread.regs.iaoq[0]) */
++#define TASK_PT_IAOQ1 1092 /* offsetof(struct task_struct, thread.regs.iaoq[1]) */
++#define TASK_PT_CR27 1096 /* offsetof(struct task_struct, thread.regs.cr27) */
++#define TASK_PT_ORIG_R28 1104 /* offsetof(struct task_struct, thread.regs.orig_r28) */
++#define TASK_PT_KSP 1108 /* offsetof(struct task_struct, thread.regs.ksp) */
++#define TASK_PT_KPC 1112 /* offsetof(struct task_struct, thread.regs.kpc) */
++#define TASK_PT_SAR 1116 /* offsetof(struct task_struct, thread.regs.sar) */
++#define TASK_PT_IIR 1120 /* offsetof(struct task_struct, thread.regs.iir) */
++#define TASK_PT_ISR 1124 /* offsetof(struct task_struct, thread.regs.isr) */
++#define TASK_PT_IOR 1128 /* offsetof(struct task_struct, thread.regs.ior) */
++
++#define TASK_SZ 1272 /* sizeof(struct task_struct) */
++#define TASK_SZ_ALGN 1344 /* align(sizeof(struct task_struct), 64) */
++
++#define PT_PSW 0 /* offsetof(struct pt_regs, gr[ 0]) */
++#define PT_GR1 4 /* offsetof(struct pt_regs, gr[ 1]) */
++#define PT_GR2 8 /* offsetof(struct pt_regs, gr[ 2]) */
++#define PT_GR3 12 /* offsetof(struct pt_regs, gr[ 3]) */
++#define PT_GR4 16 /* offsetof(struct pt_regs, gr[ 4]) */
++#define PT_GR5 20 /* offsetof(struct pt_regs, gr[ 5]) */
++#define PT_GR6 24 /* offsetof(struct pt_regs, gr[ 6]) */
++#define PT_GR7 28 /* offsetof(struct pt_regs, gr[ 7]) */
++#define PT_GR8 32 /* offsetof(struct pt_regs, gr[ 8]) */
++#define PT_GR9 36 /* offsetof(struct pt_regs, gr[ 9]) */
++#define PT_GR10 40 /* offsetof(struct pt_regs, gr[10]) */
++#define PT_GR11 44 /* offsetof(struct pt_regs, gr[11]) */
++#define PT_GR12 48 /* offsetof(struct pt_regs, gr[12]) */
++#define PT_GR13 52 /* offsetof(struct pt_regs, gr[13]) */
++#define PT_GR14 56 /* offsetof(struct pt_regs, gr[14]) */
++#define PT_GR15 60 /* offsetof(struct pt_regs, gr[15]) */
++#define PT_GR16 64 /* offsetof(struct pt_regs, gr[16]) */
++#define PT_GR17 68 /* offsetof(struct pt_regs, gr[17]) */
++#define PT_GR18 72 /* offsetof(struct pt_regs, gr[18]) */
++#define PT_GR19 76 /* offsetof(struct pt_regs, gr[19]) */
++#define PT_GR20 80 /* offsetof(struct pt_regs, gr[20]) */
++#define PT_GR21 84 /* offsetof(struct pt_regs, gr[21]) */
++#define PT_GR22 88 /* offsetof(struct pt_regs, gr[22]) */
++#define PT_GR23 92 /* offsetof(struct pt_regs, gr[23]) */
++#define PT_GR24 96 /* offsetof(struct pt_regs, gr[24]) */
++#define PT_GR25 100 /* offsetof(struct pt_regs, gr[25]) */
++#define PT_GR26 104 /* offsetof(struct pt_regs, gr[26]) */
++#define PT_GR27 108 /* offsetof(struct pt_regs, gr[27]) */
++#define PT_GR28 112 /* offsetof(struct pt_regs, gr[28]) */
++#define PT_GR29 116 /* offsetof(struct pt_regs, gr[29]) */
++#define PT_GR30 120 /* offsetof(struct pt_regs, gr[30]) */
++#define PT_GR31 124 /* offsetof(struct pt_regs, gr[31]) */
++#define PT_FR0 128 /* offsetof(struct pt_regs, fr[ 0]) */
++#define PT_FR1 136 /* offsetof(struct pt_regs, fr[ 1]) */
++#define PT_FR2 144 /* offsetof(struct pt_regs, fr[ 2]) */
++#define PT_FR3 152 /* offsetof(struct pt_regs, fr[ 3]) */
++#define PT_FR4 160 /* offsetof(struct pt_regs, fr[ 4]) */
++#define PT_FR5 168 /* offsetof(struct pt_regs, fr[ 5]) */
++#define PT_FR6 176 /* offsetof(struct pt_regs, fr[ 6]) */
++#define PT_FR7 184 /* offsetof(struct pt_regs, fr[ 7]) */
++#define PT_FR8 192 /* offsetof(struct pt_regs, fr[ 8]) */
++#define PT_FR9 200 /* offsetof(struct pt_regs, fr[ 9]) */
++#define PT_FR10 208 /* offsetof(struct pt_regs, fr[10]) */
++#define PT_FR11 216 /* offsetof(struct pt_regs, fr[11]) */
++#define PT_FR12 224 /* offsetof(struct pt_regs, fr[12]) */
++#define PT_FR13 232 /* offsetof(struct pt_regs, fr[13]) */
++#define PT_FR14 240 /* offsetof(struct pt_regs, fr[14]) */
++#define PT_FR15 248 /* offsetof(struct pt_regs, fr[15]) */
++#define PT_FR16 256 /* offsetof(struct pt_regs, fr[16]) */
++#define PT_FR17 264 /* offsetof(struct pt_regs, fr[17]) */
++#define PT_FR18 272 /* offsetof(struct pt_regs, fr[18]) */
++#define PT_FR19 280 /* offsetof(struct pt_regs, fr[19]) */
++#define PT_FR20 288 /* offsetof(struct pt_regs, fr[20]) */
++#define PT_FR21 296 /* offsetof(struct pt_regs, fr[21]) */
++#define PT_FR22 304 /* offsetof(struct pt_regs, fr[22]) */
++#define PT_FR23 312 /* offsetof(struct pt_regs, fr[23]) */
++#define PT_FR24 320 /* offsetof(struct pt_regs, fr[24]) */
++#define PT_FR25 328 /* offsetof(struct pt_regs, fr[25]) */
++#define PT_FR26 336 /* offsetof(struct pt_regs, fr[26]) */
++#define PT_FR27 344 /* offsetof(struct pt_regs, fr[27]) */
++#define PT_FR28 352 /* offsetof(struct pt_regs, fr[28]) */
++#define PT_FR29 360 /* offsetof(struct pt_regs, fr[29]) */
++#define PT_FR30 368 /* offsetof(struct pt_regs, fr[30]) */
++#define PT_FR31 376 /* offsetof(struct pt_regs, fr[31]) */
++#define PT_SR0 384 /* offsetof(struct pt_regs, sr[ 0]) */
++#define PT_SR1 388 /* offsetof(struct pt_regs, sr[ 1]) */
++#define PT_SR2 392 /* offsetof(struct pt_regs, sr[ 2]) */
++#define PT_SR3 396 /* offsetof(struct pt_regs, sr[ 3]) */
++#define PT_SR4 400 /* offsetof(struct pt_regs, sr[ 4]) */
++#define PT_SR5 404 /* offsetof(struct pt_regs, sr[ 5]) */
++#define PT_SR6 408 /* offsetof(struct pt_regs, sr[ 6]) */
++#define PT_SR7 412 /* offsetof(struct pt_regs, sr[ 7]) */
++#define PT_IASQ0 416 /* offsetof(struct pt_regs, iasq[0]) */
++#define PT_IASQ1 420 /* offsetof(struct pt_regs, iasq[1]) */
++#define PT_IAOQ0 424 /* offsetof(struct pt_regs, iaoq[0]) */
++#define PT_IAOQ1 428 /* offsetof(struct pt_regs, iaoq[1]) */
++#define PT_CR27 432 /* offsetof(struct pt_regs, cr27) */
++#define PT_ORIG_R28 440 /* offsetof(struct pt_regs, orig_r28) */
++#define PT_KSP 444 /* offsetof(struct pt_regs, ksp) */
++#define PT_KPC 448 /* offsetof(struct pt_regs, kpc) */
++#define PT_SAR 452 /* offsetof(struct pt_regs, sar) */
++#define PT_IIR 456 /* offsetof(struct pt_regs, iir) */
++#define PT_ISR 460 /* offsetof(struct pt_regs, isr) */
++#define PT_IOR 464 /* offsetof(struct pt_regs, ior) */
++#define PT_SIZE 472 /* sizeof(struct pt_regs) */
++#define PT_SZ_ALGN 576 /* align(sizeof(struct pt_regs), 64) */
++
++#define TI_TASK 0 /* offsetof(struct thread_info, task) */
++#define TI_EXEC_DOMAIN 4 /* offsetof(struct thread_info, exec_domain) */
++#define TI_FLAGS 8 /* offsetof(struct thread_info, flags) */
++#define TI_CPU 16 /* offsetof(struct thread_info, cpu) */
++#define TI_SEGMENT 12 /* offsetof(struct thread_info, addr_limit) */
++#define TI_PRE_COUNT 20 /* offsetof(struct thread_info, preempt_count) */
++#define THREAD_SZ 44 /* sizeof(struct thread_info) */
++#define THREAD_SZ_ALGN 128 /* align(sizeof(struct thread_info), 64) */
++
++#define IRQSTAT_SIRQ_PEND 0 /* offsetof(irq_cpustat_t, __softirq_pending) */
++#define IRQSTAT_SZ 64 /* sizeof(irq_cpustat_t) */
++
++#define ICACHE_BASE 8 /* offsetof(struct pdc_cache_info, ic_base) */
++#define ICACHE_STRIDE 12 /* offsetof(struct pdc_cache_info, ic_stride) */
++#define ICACHE_COUNT 16 /* offsetof(struct pdc_cache_info, ic_count) */
++#define ICACHE_LOOP 20 /* offsetof(struct pdc_cache_info, ic_loop) */
++#define DCACHE_BASE 32 /* offsetof(struct pdc_cache_info, dc_base) */
++#define DCACHE_STRIDE 36 /* offsetof(struct pdc_cache_info, dc_stride) */
++#define DCACHE_COUNT 40 /* offsetof(struct pdc_cache_info, dc_count) */
++#define DCACHE_LOOP 44 /* offsetof(struct pdc_cache_info, dc_loop) */
++#define ITLB_SID_BASE 56 /* offsetof(struct pdc_cache_info, it_sp_base) */
++#define ITLB_SID_STRIDE 60 /* offsetof(struct pdc_cache_info, it_sp_stride) */
++#define ITLB_SID_COUNT 64 /* offsetof(struct pdc_cache_info, it_sp_count) */
++#define ITLB_OFF_BASE 68 /* offsetof(struct pdc_cache_info, it_off_base) */
++#define ITLB_OFF_STRIDE 72 /* offsetof(struct pdc_cache_info, it_off_stride) */
++#define ITLB_OFF_COUNT 76 /* offsetof(struct pdc_cache_info, it_off_count) */
++#define ITLB_LOOP 80 /* offsetof(struct pdc_cache_info, it_loop) */
++#define DTLB_SID_BASE 92 /* offsetof(struct pdc_cache_info, dt_sp_base) */
++#define DTLB_SID_STRIDE 96 /* offsetof(struct pdc_cache_info, dt_sp_stride) */
++#define DTLB_SID_COUNT 100 /* offsetof(struct pdc_cache_info, dt_sp_count) */
++#define DTLB_OFF_BASE 104 /* offsetof(struct pdc_cache_info, dt_off_base) */
++#define DTLB_OFF_STRIDE 108 /* offsetof(struct pdc_cache_info, dt_off_stride) */
++#define DTLB_OFF_COUNT 112 /* offsetof(struct pdc_cache_info, dt_off_count) */
++#define DTLB_LOOP 116 /* offsetof(struct pdc_cache_info, dt_loop) */
++
++#define PA_BLOCKSTEP_BIT 1 /* 31-PT_BLOCKSTEP_BIT */
++#define PA_SINGLESTEP_BIT 0 /* 31-PT_SINGLESTEP_BIT */
++
++#define ASM_PMD_SHIFT 21 /* PMD_SHIFT */
++#define ASM_PGDIR_SHIFT 21 /* PGDIR_SHIFT */
++#define ASM_BITS_PER_PGD 11 /* BITS_PER_PGD */
++#define ASM_BITS_PER_PMD 0 /* BITS_PER_PMD */
++#define ASM_BITS_PER_PTE 9 /* BITS_PER_PTE */
++#define ASM_PGD_PMD_OFFSET -8192 /* -(PAGE_SIZE << PGD_ORDER) */
++#define ASM_PMD_ENTRY 128 /* ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT) */
++#define ASM_PGD_ENTRY 128 /* PAGE_OFFSET >> PGDIR_SHIFT */
++#define ASM_PGD_ENTRY_SIZE 4 /* PGD_ENTRY_SIZE */
++#define ASM_PMD_ENTRY_SIZE 4 /* PMD_ENTRY_SIZE */
++#define ASM_PTE_ENTRY_SIZE 8 /* PTE_ENTRY_SIZE */
++#define ASM_PT_INITIAL 4 /* PT_INITIAL */
++#define ASM_PAGE_SIZE 4096 /* PAGE_SIZE */
++
++
++#endif
diff --git a/patches/gdb/6.7.1/200-gdb-deleted-children.patch b/patches/gdb/6.7.1/200-gdb-deleted-children.patch
new file mode 100644
index 0000000..08bbba9
--- /dev/null
+++ b/patches/gdb/6.7.1/200-gdb-deleted-children.patch
@@ -0,0 +1,26 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7.1/50_all_gdb-deleted-children.patch
+-= BEGIN original header =-
+http://bugs.gentoo.org/210636
+http://sourceware.org/ml/gdb-patches/2007-11/msg00136.html
+
+2007-11-07 Vladimir Prus <vladimir@codesourcery.com>
+
+ Fix crash when a variable object being deleted
+ has any of its children deleted previously.
+
+ * varobj.c (delete_variable_1): Don't recurse
+ into deleted children.
+
+-= END original header =-
+diff -durN gdb-6.7.1.orig/gdb/varobj.c gdb-6.7.1/gdb/varobj.c
+--- gdb-6.7.1.orig/gdb/varobj.c 2007-08-31 21:01:17.000000000 +0200
++++ gdb-6.7.1/gdb/varobj.c 2008-06-17 23:27:45.000000000 +0200
+@@ -1295,6 +1295,8 @@
+ for (i = 0; i < VEC_length (varobj_p, var->children); ++i)
+ {
+ varobj_p child = VEC_index (varobj_p, var->children, i);
++ if (!child)
++ continue;
+ if (!remove_from_parent_p)
+ child->parent = NULL;
+ delete_variable_1 (resultp, delcountp, child, 0, only_children_p);
diff --git a/patches/gdb/6.7.1/225-gdb-6.5-dwarf-stack-overflow.patch b/patches/gdb/6.7.1/225-gdb-6.5-dwarf-stack-overflow.patch
new file mode 100644
index 0000000..764ec65
--- /dev/null
+++ b/patches/gdb/6.7.1/225-gdb-6.5-dwarf-stack-overflow.patch
@@ -0,0 +1,52 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7.1/80_all_gdb-6.5-dwarf-stack-overflow.patch
+-= BEGIN original header =-
+http://bugs.gentoo.org/144833
+
+for gdb/ChangeLog:
+2006-08-22 Will Drewry <wad@google.com>
+ Tavis Ormandy <taviso@google.com>
+
+ * dwarf2read.c (decode_locdesc): Enforce location description stack
+ boundaries.
+ * dwarfread.c (locval): Likewise.
+
+-= END original header =-
+diff -durN gdb-6.7.1.orig/gdb/dwarf2read.c gdb-6.7.1/gdb/dwarf2read.c
+--- gdb-6.7.1.orig/gdb/dwarf2read.c 2007-09-05 02:51:48.000000000 +0200
++++ gdb-6.7.1/gdb/dwarf2read.c 2008-06-17 23:27:46.000000000 +0200
+@@ -9061,8 +9061,7 @@
+ callers will only want a very basic result and this can become a
+ complaint.
+
+- Note that stack[0] is unused except as a default error return.
+- Note that stack overflow is not yet handled. */
++ Note that stack[0] is unused except as a default error return. */
+
+ static CORE_ADDR
+ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
+@@ -9079,7 +9078,7 @@
+
+ i = 0;
+ stacki = 0;
+- stack[stacki] = 0;
++ stack[++stacki] = 0;
+
+ while (i < size)
+ {
+@@ -9261,6 +9260,16 @@
+ dwarf_stack_op_name (op));
+ return (stack[stacki]);
+ }
++ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
++ outside of the allocated space. Also enforce minimum > 0.
++ -- wad@google.com 14 Aug 2006 */
++ if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too deep: %d"),
++ stacki);
++ if (stacki <= 0)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too shallow"));
+ }
+ return (stack[stacki]);
+ }
diff --git a/patches/gdb/6.7/100-gdb-6.3-security-errata-20050610.patch b/patches/gdb/6.7/100-gdb-6.3-security-errata-20050610.patch
new file mode 100644
index 0000000..a0307ad
--- /dev/null
+++ b/patches/gdb/6.7/100-gdb-6.3-security-errata-20050610.patch
@@ -0,0 +1,205 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7/35_all_gdb-6.3-security-errata-20050610.patch
+-= BEGIN original header =-
+2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
+
+ * gdb.base/gdbinit.exp: New testcase.
+ * gdb.base/gdbinit.sample: Sample .gdbinit for gdbinit.exp.
+
+2005-06-08 Daniel Jacobowitz <dan@codesourcery.com>
+ Jeff Johnston <jjohnstn@redhat.com>
+
+ * Makefile.in (cli-cmds.o): Update.
+ * configure.in: Add check for getuid.
+ * configure: Regenerated.
+ * config.in: Ditto.
+ * main.c (captured_main): Pass -1 to source_command when loading
+ gdbinit files.
+ * cli/cli-cmds.c: Include "gdb_stat.h" and <fcntl.h>.
+ (source_command): Update documentation. Check permissions if
+ FROM_TTY is -1.
+
+-= END original header =-
+diff -durN gdb-6.7.orig/gdb/cli/cli-cmds.c gdb-6.7/gdb/cli/cli-cmds.c
+--- gdb-6.7.orig/gdb/cli/cli-cmds.c 2007-08-23 20:08:47.000000000 +0200
++++ gdb-6.7/gdb/cli/cli-cmds.c 2008-06-17 23:25:23.000000000 +0200
+@@ -36,6 +36,7 @@
+ #include "objfiles.h"
+ #include "source.h"
+ #include "disasm.h"
++#include "gdb_stat.h"
+
+ #include "ui-out.h"
+
+@@ -459,12 +460,31 @@
+
+ if (fd == -1)
+ {
+- if (from_tty)
++ if (from_tty > 0)
+ perror_with_name (file);
+ else
+ return;
+ }
+
++#ifdef HAVE_GETUID
++ if (from_tty == -1)
++ {
++ struct stat statbuf;
++ if (fstat (fd, &statbuf) < 0)
++ {
++ perror_with_name (file);
++ close (fd);
++ return;
++ }
++ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
++ {
++ warning (_("not using untrusted file \"%s\""), file);
++ close (fd);
++ return;
++ }
++ }
++#endif
++
+ stream = fdopen (fd, FOPEN_RT);
+ script_from_file (stream, file);
+
+diff -durN gdb-6.7.orig/gdb/main.c gdb-6.7/gdb/main.c
+--- gdb-6.7.orig/gdb/main.c 2007-08-23 20:08:36.000000000 +0200
++++ gdb-6.7/gdb/main.c 2008-06-17 23:25:23.000000000 +0200
+@@ -688,7 +688,7 @@
+
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, homeinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, homeinit, -1, RETURN_MASK_ALL);
+ }
+
+ /* Do stats; no need to do them elsewhere since we'll only
+@@ -766,7 +766,7 @@
+ || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, gdbinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, gdbinit, -1, RETURN_MASK_ALL);
+ }
+
+ for (i = 0; i < ncmd; i++)
+diff -durN gdb-6.7.orig/gdb/Makefile.in gdb-6.7/gdb/Makefile.in
+--- gdb-6.7.orig/gdb/Makefile.in 2007-09-05 02:14:02.000000000 +0200
++++ gdb-6.7/gdb/Makefile.in 2008-06-17 23:25:23.000000000 +0200
+@@ -2882,7 +2882,7 @@
+ $(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \
+ $(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \
+ $(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \
+- $(tui_h)
++ $(tui_h) $(gdb_stat_h)
+ $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-cmds.c
+ cli-decode.o: $(srcdir)/cli/cli-decode.c $(defs_h) $(symtab_h) \
+ $(gdb_regex_h) $(gdb_string_h) $(completer_h) $(ui_out_h) \
+diff -durN gdb-6.7.orig/gdb/testsuite/gdb.base/gdbinit.exp gdb-6.7/gdb/testsuite/gdb.base/gdbinit.exp
+--- gdb-6.7.orig/gdb/testsuite/gdb.base/gdbinit.exp 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7/gdb/testsuite/gdb.base/gdbinit.exp 2008-06-17 23:25:23.000000000 +0200
+@@ -0,0 +1,98 @@
++# Copyright 2005
++# Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++# are we on a target board
++if [is_remote target] {
++ return
++}
++
++
++global verbose
++global GDB
++global GDBFLAGS
++global gdb_prompt
++global timeout
++global gdb_spawn_id;
++
++gdb_stop_suppressing_tests;
++
++verbose "Spawning $GDB -nw"
++
++if [info exists gdb_spawn_id] {
++ return 0;
++}
++
++if ![is_remote host] {
++ if { [which $GDB] == 0 } then {
++ perror "$GDB does not exist."
++ exit 1
++ }
++}
++
++set env(HOME) [pwd]
++remote_exec build "rm .gdbinit"
++remote_exec build "cp ${srcdir}/${subdir}/gdbinit.sample .gdbinit"
++remote_exec build "chmod 646 .gdbinit"
++
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ pass "untrusted .gdbinit caught."
++ }
++ -re "$gdb_prompt $" {
++ fail "untrusted .gdbinit caught."
++ }
++ timeout {
++ fail "(timeout) untrusted .gdbinit caught."
++ }
++}
++
++remote_exec build "chmod 644 .gdbinit"
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ fail "trusted .gdbinit allowed."
++ }
++ -re "in gdbinit.*$gdb_prompt $" {
++ pass "trusted .gdbinit allowed."
++ }
++ timeout {
++ fail "(timeout) trusted .gdbinit allowed."
++ }
++}
++
++remote_exec build "rm .gdbinit"
+diff -durN gdb-6.7.orig/gdb/testsuite/gdb.base/gdbinit.sample gdb-6.7/gdb/testsuite/gdb.base/gdbinit.sample
+--- gdb-6.7.orig/gdb/testsuite/gdb.base/gdbinit.sample 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7/gdb/testsuite/gdb.base/gdbinit.sample 2008-06-17 23:25:23.000000000 +0200
+@@ -0,0 +1 @@
++echo "\nin gdbinit"
diff --git a/patches/gdb/6.7/125-gdb-hppa-offsets.patch b/patches/gdb/6.7/125-gdb-hppa-offsets.patch
new file mode 100644
index 0000000..9de831b
--- /dev/null
+++ b/patches/gdb/6.7/125-gdb-hppa-offsets.patch
@@ -0,0 +1,272 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7/45_all_gdb-hppa-offsets.patch
+-= BEGIN original header =-
+sanitized headers dont include asm/offsets.h, so cache a local copy
+
+http://bugs.gentoo.org/180476
+http://lists.parisc-linux.org/pipermail/parisc-linux/2007-February/031162.html
+
+-= END original header =-
+diff -durN gdb-6.7.orig/gdb/hppa-linux-nat.c gdb-6.7/gdb/hppa-linux-nat.c
+--- gdb-6.7.orig/gdb/hppa-linux-nat.c 2007-08-23 20:08:33.000000000 +0200
++++ gdb-6.7/gdb/hppa-linux-nat.c 2008-06-17 23:25:28.000000000 +0200
+@@ -32,7 +32,7 @@
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,43)
+ #include <asm/offset.h>
+ #else
+-#include <asm/offsets.h>
++#include <hppa-offsets.h>
+ #endif
+
+ #include "hppa-tdep.h"
+diff -durN gdb-6.7.orig/gdb/hppa-offsets.h gdb-6.7/gdb/hppa-offsets.h
+--- gdb-6.7.orig/gdb/hppa-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.7/gdb/hppa-offsets.h 2008-06-17 23:25:28.000000000 +0200
+@@ -0,0 +1,248 @@
++#ifndef __ASM_OFFSETS_H__
++#define __ASM_OFFSETS_H__
++/*
++ * DO NOT MODIFY.
++ *
++ * This file was generated by arch/parisc/Makefile
++ *
++ */
++
++#define TASK_THREAD_INFO 4 /* offsetof(struct task_struct, thread_info) */
++#define TASK_STATE 0 /* offsetof(struct task_struct, state) */
++#define TASK_FLAGS 12 /* offsetof(struct task_struct, flags) */
++#define TASK_SIGPENDING 1188 /* offsetof(struct task_struct, pending) */
++#define TASK_PTRACE 16 /* offsetof(struct task_struct, ptrace) */
++#define TASK_MM 108 /* offsetof(struct task_struct, mm) */
++#define TASK_PERSONALITY 132 /* offsetof(struct task_struct, personality) */
++#define TASK_PID 140 /* offsetof(struct task_struct, pid) */
++
++#define TASK_REGS 664 /* offsetof(struct task_struct, thread.regs) */
++#define TASK_PT_PSW 664 /* offsetof(struct task_struct, thread.regs.gr[ 0]) */
++#define TASK_PT_GR1 668 /* offsetof(struct task_struct, thread.regs.gr[ 1]) */
++#define TASK_PT_GR2 672 /* offsetof(struct task_struct, thread.regs.gr[ 2]) */
++#define TASK_PT_GR3 676 /* offsetof(struct task_struct, thread.regs.gr[ 3]) */
++#define TASK_PT_GR4 680 /* offsetof(struct task_struct, thread.regs.gr[ 4]) */
++#define TASK_PT_GR5 684 /* offsetof(struct task_struct, thread.regs.gr[ 5]) */
++#define TASK_PT_GR6 688 /* offsetof(struct task_struct, thread.regs.gr[ 6]) */
++#define TASK_PT_GR7 692 /* offsetof(struct task_struct, thread.regs.gr[ 7]) */
++#define TASK_PT_GR8 696 /* offsetof(struct task_struct, thread.regs.gr[ 8]) */
++#define TASK_PT_GR9 700 /* offsetof(struct task_struct, thread.regs.gr[ 9]) */
++#define TASK_PT_GR10 704 /* offsetof(struct task_struct, thread.regs.gr[10]) */
++#define TASK_PT_GR11 708 /* offsetof(struct task_struct, thread.regs.gr[11]) */
++#define TASK_PT_GR12 712 /* offsetof(struct task_struct, thread.regs.gr[12]) */
++#define TASK_PT_GR13 716 /* offsetof(struct task_struct, thread.regs.gr[13]) */
++#define TASK_PT_GR14 720 /* offsetof(struct task_struct, thread.regs.gr[14]) */
++#define TASK_PT_GR15 724 /* offsetof(struct task_struct, thread.regs.gr[15]) */
++#define TASK_PT_GR16 728 /* offsetof(struct task_struct, thread.regs.gr[16]) */
++#define TASK_PT_GR17 732 /* offsetof(struct task_struct, thread.regs.gr[17]) */
++#define TASK_PT_GR18 736 /* offsetof(struct task_struct, thread.regs.gr[18]) */
++#define TASK_PT_GR19 740 /* offsetof(struct task_struct, thread.regs.gr[19]) */
++#define TASK_PT_GR20 744 /* offsetof(struct task_struct, thread.regs.gr[20]) */
++#define TASK_PT_GR21 748 /* offsetof(struct task_struct, thread.regs.gr[21]) */
++#define TASK_PT_GR22 752 /* offsetof(struct task_struct, thread.regs.gr[22]) */
++#define TASK_PT_GR23 756 /* offsetof(struct task_struct, thread.regs.gr[23]) */
++#define TASK_PT_GR24 760 /* offsetof(struct task_struct, thread.regs.gr[24]) */
++#define TASK_PT_GR25 764 /* offsetof(struct task_struct, thread.regs.gr[25]) */
++#define TASK_PT_GR26 768 /* offsetof(struct task_struct, thread.regs.gr[26]) */
++#define TASK_PT_GR27 772 /* offsetof(struct task_struct, thread.regs.gr[27]) */
++#define TASK_PT_GR28 776 /* offsetof(struct task_struct, thread.regs.gr[28]) */
++#define TASK_PT_GR29 780 /* offsetof(struct task_struct, thread.regs.gr[29]) */
++#define TASK_PT_GR30 784 /* offsetof(struct task_struct, thread.regs.gr[30]) */
++#define TASK_PT_GR31 788 /* offsetof(struct task_struct, thread.regs.gr[31]) */
++#define TASK_PT_FR0 792 /* offsetof(struct task_struct, thread.regs.fr[ 0]) */
++#define TASK_PT_FR1 800 /* offsetof(struct task_struct, thread.regs.fr[ 1]) */
++#define TASK_PT_FR2 808 /* offsetof(struct task_struct, thread.regs.fr[ 2]) */
++#define TASK_PT_FR3 816 /* offsetof(struct task_struct, thread.regs.fr[ 3]) */
++#define TASK_PT_FR4 824 /* offsetof(struct task_struct, thread.regs.fr[ 4]) */
++#define TASK_PT_FR5 832 /* offsetof(struct task_struct, thread.regs.fr[ 5]) */
++#define TASK_PT_FR6 840 /* offsetof(struct task_struct, thread.regs.fr[ 6]) */
++#define TASK_PT_FR7 848 /* offsetof(struct task_struct, thread.regs.fr[ 7]) */
++#define TASK_PT_FR8 856 /* offsetof(struct task_struct, thread.regs.fr[ 8]) */
++#define TASK_PT_FR9 864 /* offsetof(struct task_struct, thread.regs.fr[ 9]) */
++#define TASK_PT_FR10 872 /* offsetof(struct task_struct, thread.regs.fr[10]) */
++#define TASK_PT_FR11 880 /* offsetof(struct task_struct, thread.regs.fr[11]) */
++#define TASK_PT_FR12 888 /* offsetof(struct task_struct, thread.regs.fr[12]) */
++#define TASK_PT_FR13 896 /* offsetof(struct task_struct, thread.regs.fr[13]) */
++#define TASK_PT_FR14 904 /* offsetof(struct task_struct, thread.regs.fr[14]) */
++#define TASK_PT_FR15 912 /* offsetof(struct task_struct, thread.regs.fr[15]) */
++#define TASK_PT_FR16 920 /* offsetof(struct task_struct, thread.regs.fr[16]) */
++#define TASK_PT_FR17 928 /* offsetof(struct task_struct, thread.regs.fr[17]) */
++#define TASK_PT_FR18 936 /* offsetof(struct task_struct, thread.regs.fr[18]) */
++#define TASK_PT_FR19 944 /* offsetof(struct task_struct, thread.regs.fr[19]) */
++#define TASK_PT_FR20 952 /* offsetof(struct task_struct, thread.regs.fr[20]) */
++#define TASK_PT_FR21 960 /* offsetof(struct task_struct, thread.regs.fr[21]) */
++#define TASK_PT_FR22 968 /* offsetof(struct task_struct, thread.regs.fr[22]) */
++#define TASK_PT_FR23 976 /* offsetof(struct task_struct, thread.regs.fr[23]) */
++#define TASK_PT_FR24 984 /* offsetof(struct task_struct, thread.regs.fr[24]) */
++#define TASK_PT_FR25 992 /* offsetof(struct task_struct, thread.regs.fr[25]) */
++#define TASK_PT_FR26 1000 /* offsetof(struct task_struct, thread.regs.fr[26]) */
++#define TASK_PT_FR27 1008 /* offsetof(struct task_struct, thread.regs.fr[27]) */
++#define TASK_PT_FR28 1016 /* offsetof(struct task_struct, thread.regs.fr[28]) */
++#define TASK_PT_FR29 1024 /* offsetof(struct task_struct, thread.regs.fr[29]) */
++#define TASK_PT_FR30 1032 /* offsetof(struct task_struct, thread.regs.fr[30]) */
++#define TASK_PT_FR31 1040 /* offsetof(struct task_struct, thread.regs.fr[31]) */
++#define TASK_PT_SR0 1048 /* offsetof(struct task_struct, thread.regs.sr[ 0]) */
++#define TASK_PT_SR1 1052 /* offsetof(struct task_struct, thread.regs.sr[ 1]) */
++#define TASK_PT_SR2 1056 /* offsetof(struct task_struct, thread.regs.sr[ 2]) */
++#define TASK_PT_SR3 1060 /* offsetof(struct task_struct, thread.regs.sr[ 3]) */
++#define TASK_PT_SR4 1064 /* offsetof(struct task_struct, thread.regs.sr[ 4]) */
++#define TASK_PT_SR5 1068 /* offsetof(struct task_struct, thread.regs.sr[ 5]) */
++#define TASK_PT_SR6 1072 /* offsetof(struct task_struct, thread.regs.sr[ 6]) */
++#define TASK_PT_SR7 1076 /* offsetof(struct task_struct, thread.regs.sr[ 7]) */
++#define TASK_PT_IASQ0 1080 /* offsetof(struct task_struct, thread.regs.iasq[0]) */
++#define TASK_PT_IASQ1 1084 /* offsetof(struct task_struct, thread.regs.iasq[1]) */
++#define TASK_PT_IAOQ0 1088 /* offsetof(struct task_struct, thread.regs.iaoq[0]) */
++#define TASK_PT_IAOQ1 1092 /* offsetof(struct task_struct, thread.regs.iaoq[1]) */
++#define TASK_PT_CR27 1096 /* offsetof(struct task_struct, thread.regs.cr27) */
++#define TASK_PT_ORIG_R28 1104 /* offsetof(struct task_struct, thread.regs.orig_r28) */
++#define TASK_PT_KSP 1108 /* offsetof(struct task_struct, thread.regs.ksp) */
++#define TASK_PT_KPC 1112 /* offsetof(struct task_struct, thread.regs.kpc) */
++#define TASK_PT_SAR 1116 /* offsetof(struct task_struct, thread.regs.sar) */
++#define TASK_PT_IIR 1120 /* offsetof(struct task_struct, thread.regs.iir) */
++#define TASK_PT_ISR 1124 /* offsetof(struct task_struct, thread.regs.isr) */
++#define TASK_PT_IOR 1128 /* offsetof(struct task_struct, thread.regs.ior) */
++
++#define TASK_SZ 1272 /* sizeof(struct task_struct) */
++#define TASK_SZ_ALGN 1344 /* align(sizeof(struct task_struct), 64) */
++
++#define PT_PSW 0 /* offsetof(struct pt_regs, gr[ 0]) */
++#define PT_GR1 4 /* offsetof(struct pt_regs, gr[ 1]) */
++#define PT_GR2 8 /* offsetof(struct pt_regs, gr[ 2]) */
++#define PT_GR3 12 /* offsetof(struct pt_regs, gr[ 3]) */
++#define PT_GR4 16 /* offsetof(struct pt_regs, gr[ 4]) */
++#define PT_GR5 20 /* offsetof(struct pt_regs, gr[ 5]) */
++#define PT_GR6 24 /* offsetof(struct pt_regs, gr[ 6]) */
++#define PT_GR7 28 /* offsetof(struct pt_regs, gr[ 7]) */
++#define PT_GR8 32 /* offsetof(struct pt_regs, gr[ 8]) */
++#define PT_GR9 36 /* offsetof(struct pt_regs, gr[ 9]) */
++#define PT_GR10 40 /* offsetof(struct pt_regs, gr[10]) */
++#define PT_GR11 44 /* offsetof(struct pt_regs, gr[11]) */
++#define PT_GR12 48 /* offsetof(struct pt_regs, gr[12]) */
++#define PT_GR13 52 /* offsetof(struct pt_regs, gr[13]) */
++#define PT_GR14 56 /* offsetof(struct pt_regs, gr[14]) */
++#define PT_GR15 60 /* offsetof(struct pt_regs, gr[15]) */
++#define PT_GR16 64 /* offsetof(struct pt_regs, gr[16]) */
++#define PT_GR17 68 /* offsetof(struct pt_regs, gr[17]) */
++#define PT_GR18 72 /* offsetof(struct pt_regs, gr[18]) */
++#define PT_GR19 76 /* offsetof(struct pt_regs, gr[19]) */
++#define PT_GR20 80 /* offsetof(struct pt_regs, gr[20]) */
++#define PT_GR21 84 /* offsetof(struct pt_regs, gr[21]) */
++#define PT_GR22 88 /* offsetof(struct pt_regs, gr[22]) */
++#define PT_GR23 92 /* offsetof(struct pt_regs, gr[23]) */
++#define PT_GR24 96 /* offsetof(struct pt_regs, gr[24]) */
++#define PT_GR25 100 /* offsetof(struct pt_regs, gr[25]) */
++#define PT_GR26 104 /* offsetof(struct pt_regs, gr[26]) */
++#define PT_GR27 108 /* offsetof(struct pt_regs, gr[27]) */
++#define PT_GR28 112 /* offsetof(struct pt_regs, gr[28]) */
++#define PT_GR29 116 /* offsetof(struct pt_regs, gr[29]) */
++#define PT_GR30 120 /* offsetof(struct pt_regs, gr[30]) */
++#define PT_GR31 124 /* offsetof(struct pt_regs, gr[31]) */
++#define PT_FR0 128 /* offsetof(struct pt_regs, fr[ 0]) */
++#define PT_FR1 136 /* offsetof(struct pt_regs, fr[ 1]) */
++#define PT_FR2 144 /* offsetof(struct pt_regs, fr[ 2]) */
++#define PT_FR3 152 /* offsetof(struct pt_regs, fr[ 3]) */
++#define PT_FR4 160 /* offsetof(struct pt_regs, fr[ 4]) */
++#define PT_FR5 168 /* offsetof(struct pt_regs, fr[ 5]) */
++#define PT_FR6 176 /* offsetof(struct pt_regs, fr[ 6]) */
++#define PT_FR7 184 /* offsetof(struct pt_regs, fr[ 7]) */
++#define PT_FR8 192 /* offsetof(struct pt_regs, fr[ 8]) */
++#define PT_FR9 200 /* offsetof(struct pt_regs, fr[ 9]) */
++#define PT_FR10 208 /* offsetof(struct pt_regs, fr[10]) */
++#define PT_FR11 216 /* offsetof(struct pt_regs, fr[11]) */
++#define PT_FR12 224 /* offsetof(struct pt_regs, fr[12]) */
++#define PT_FR13 232 /* offsetof(struct pt_regs, fr[13]) */
++#define PT_FR14 240 /* offsetof(struct pt_regs, fr[14]) */
++#define PT_FR15 248 /* offsetof(struct pt_regs, fr[15]) */
++#define PT_FR16 256 /* offsetof(struct pt_regs, fr[16]) */
++#define PT_FR17 264 /* offsetof(struct pt_regs, fr[17]) */
++#define PT_FR18 272 /* offsetof(struct pt_regs, fr[18]) */
++#define PT_FR19 280 /* offsetof(struct pt_regs, fr[19]) */
++#define PT_FR20 288 /* offsetof(struct pt_regs, fr[20]) */
++#define PT_FR21 296 /* offsetof(struct pt_regs, fr[21]) */
++#define PT_FR22 304 /* offsetof(struct pt_regs, fr[22]) */
++#define PT_FR23 312 /* offsetof(struct pt_regs, fr[23]) */
++#define PT_FR24 320 /* offsetof(struct pt_regs, fr[24]) */
++#define PT_FR25 328 /* offsetof(struct pt_regs, fr[25]) */
++#define PT_FR26 336 /* offsetof(struct pt_regs, fr[26]) */
++#define PT_FR27 344 /* offsetof(struct pt_regs, fr[27]) */
++#define PT_FR28 352 /* offsetof(struct pt_regs, fr[28]) */
++#define PT_FR29 360 /* offsetof(struct pt_regs, fr[29]) */
++#define PT_FR30 368 /* offsetof(struct pt_regs, fr[30]) */
++#define PT_FR31 376 /* offsetof(struct pt_regs, fr[31]) */
++#define PT_SR0 384 /* offsetof(struct pt_regs, sr[ 0]) */
++#define PT_SR1 388 /* offsetof(struct pt_regs, sr[ 1]) */
++#define PT_SR2 392 /* offsetof(struct pt_regs, sr[ 2]) */
++#define PT_SR3 396 /* offsetof(struct pt_regs, sr[ 3]) */
++#define PT_SR4 400 /* offsetof(struct pt_regs, sr[ 4]) */
++#define PT_SR5 404 /* offsetof(struct pt_regs, sr[ 5]) */
++#define PT_SR6 408 /* offsetof(struct pt_regs, sr[ 6]) */
++#define PT_SR7 412 /* offsetof(struct pt_regs, sr[ 7]) */
++#define PT_IASQ0 416 /* offsetof(struct pt_regs, iasq[0]) */
++#define PT_IASQ1 420 /* offsetof(struct pt_regs, iasq[1]) */
++#define PT_IAOQ0 424 /* offsetof(struct pt_regs, iaoq[0]) */
++#define PT_IAOQ1 428 /* offsetof(struct pt_regs, iaoq[1]) */
++#define PT_CR27 432 /* offsetof(struct pt_regs, cr27) */
++#define PT_ORIG_R28 440 /* offsetof(struct pt_regs, orig_r28) */
++#define PT_KSP 444 /* offsetof(struct pt_regs, ksp) */
++#define PT_KPC 448 /* offsetof(struct pt_regs, kpc) */
++#define PT_SAR 452 /* offsetof(struct pt_regs, sar) */
++#define PT_IIR 456 /* offsetof(struct pt_regs, iir) */
++#define PT_ISR 460 /* offsetof(struct pt_regs, isr) */
++#define PT_IOR 464 /* offsetof(struct pt_regs, ior) */
++#define PT_SIZE 472 /* sizeof(struct pt_regs) */
++#define PT_SZ_ALGN 576 /* align(sizeof(struct pt_regs), 64) */
++
++#define TI_TASK 0 /* offsetof(struct thread_info, task) */
++#define TI_EXEC_DOMAIN 4 /* offsetof(struct thread_info, exec_domain) */
++#define TI_FLAGS 8 /* offsetof(struct thread_info, flags) */
++#define TI_CPU 16 /* offsetof(struct thread_info, cpu) */
++#define TI_SEGMENT 12 /* offsetof(struct thread_info, addr_limit) */
++#define TI_PRE_COUNT 20 /* offsetof(struct thread_info, preempt_count) */
++#define THREAD_SZ 44 /* sizeof(struct thread_info) */
++#define THREAD_SZ_ALGN 128 /* align(sizeof(struct thread_info), 64) */
++
++#define IRQSTAT_SIRQ_PEND 0 /* offsetof(irq_cpustat_t, __softirq_pending) */
++#define IRQSTAT_SZ 64 /* sizeof(irq_cpustat_t) */
++
++#define ICACHE_BASE 8 /* offsetof(struct pdc_cache_info, ic_base) */
++#define ICACHE_STRIDE 12 /* offsetof(struct pdc_cache_info, ic_stride) */
++#define ICACHE_COUNT 16 /* offsetof(struct pdc_cache_info, ic_count) */
++#define ICACHE_LOOP 20 /* offsetof(struct pdc_cache_info, ic_loop) */
++#define DCACHE_BASE 32 /* offsetof(struct pdc_cache_info, dc_base) */
++#define DCACHE_STRIDE 36 /* offsetof(struct pdc_cache_info, dc_stride) */
++#define DCACHE_COUNT 40 /* offsetof(struct pdc_cache_info, dc_count) */
++#define DCACHE_LOOP 44 /* offsetof(struct pdc_cache_info, dc_loop) */
++#define ITLB_SID_BASE 56 /* offsetof(struct pdc_cache_info, it_sp_base) */
++#define ITLB_SID_STRIDE 60 /* offsetof(struct pdc_cache_info, it_sp_stride) */
++#define ITLB_SID_COUNT 64 /* offsetof(struct pdc_cache_info, it_sp_count) */
++#define ITLB_OFF_BASE 68 /* offsetof(struct pdc_cache_info, it_off_base) */
++#define ITLB_OFF_STRIDE 72 /* offsetof(struct pdc_cache_info, it_off_stride) */
++#define ITLB_OFF_COUNT 76 /* offsetof(struct pdc_cache_info, it_off_count) */
++#define ITLB_LOOP 80 /* offsetof(struct pdc_cache_info, it_loop) */
++#define DTLB_SID_BASE 92 /* offsetof(struct pdc_cache_info, dt_sp_base) */
++#define DTLB_SID_STRIDE 96 /* offsetof(struct pdc_cache_info, dt_sp_stride) */
++#define DTLB_SID_COUNT 100 /* offsetof(struct pdc_cache_info, dt_sp_count) */
++#define DTLB_OFF_BASE 104 /* offsetof(struct pdc_cache_info, dt_off_base) */
++#define DTLB_OFF_STRIDE 108 /* offsetof(struct pdc_cache_info, dt_off_stride) */
++#define DTLB_OFF_COUNT 112 /* offsetof(struct pdc_cache_info, dt_off_count) */
++#define DTLB_LOOP 116 /* offsetof(struct pdc_cache_info, dt_loop) */
++
++#define PA_BLOCKSTEP_BIT 1 /* 31-PT_BLOCKSTEP_BIT */
++#define PA_SINGLESTEP_BIT 0 /* 31-PT_SINGLESTEP_BIT */
++
++#define ASM_PMD_SHIFT 21 /* PMD_SHIFT */
++#define ASM_PGDIR_SHIFT 21 /* PGDIR_SHIFT */
++#define ASM_BITS_PER_PGD 11 /* BITS_PER_PGD */
++#define ASM_BITS_PER_PMD 0 /* BITS_PER_PMD */
++#define ASM_BITS_PER_PTE 9 /* BITS_PER_PTE */
++#define ASM_PGD_PMD_OFFSET -8192 /* -(PAGE_SIZE << PGD_ORDER) */
++#define ASM_PMD_ENTRY 128 /* ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT) */
++#define ASM_PGD_ENTRY 128 /* PAGE_OFFSET >> PGDIR_SHIFT */
++#define ASM_PGD_ENTRY_SIZE 4 /* PGD_ENTRY_SIZE */
++#define ASM_PMD_ENTRY_SIZE 4 /* PMD_ENTRY_SIZE */
++#define ASM_PTE_ENTRY_SIZE 8 /* PTE_ENTRY_SIZE */
++#define ASM_PT_INITIAL 4 /* PT_INITIAL */
++#define ASM_PAGE_SIZE 4096 /* PAGE_SIZE */
++
++
++#endif
diff --git a/patches/gdb/6.7/150-gdb-6.5-dwarf-stack-overflow.patch b/patches/gdb/6.7/150-gdb-6.5-dwarf-stack-overflow.patch
new file mode 100644
index 0000000..171e64e
--- /dev/null
+++ b/patches/gdb/6.7/150-gdb-6.5-dwarf-stack-overflow.patch
@@ -0,0 +1,52 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.7/80_all_gdb-6.5-dwarf-stack-overflow.patch
+-= BEGIN original header =-
+http://bugs.gentoo.org/144833
+
+for gdb/ChangeLog:
+2006-08-22 Will Drewry <wad@google.com>
+ Tavis Ormandy <taviso@google.com>
+
+ * dwarf2read.c (decode_locdesc): Enforce location description stack
+ boundaries.
+ * dwarfread.c (locval): Likewise.
+
+-= END original header =-
+diff -durN gdb-6.7.orig/gdb/dwarf2read.c gdb-6.7/gdb/dwarf2read.c
+--- gdb-6.7.orig/gdb/dwarf2read.c 2007-09-05 02:51:48.000000000 +0200
++++ gdb-6.7/gdb/dwarf2read.c 2008-06-17 23:25:38.000000000 +0200
+@@ -9061,8 +9061,7 @@
+ callers will only want a very basic result and this can become a
+ complaint.
+
+- Note that stack[0] is unused except as a default error return.
+- Note that stack overflow is not yet handled. */
++ Note that stack[0] is unused except as a default error return. */
+
+ static CORE_ADDR
+ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
+@@ -9079,7 +9078,7 @@
+
+ i = 0;
+ stacki = 0;
+- stack[stacki] = 0;
++ stack[++stacki] = 0;
+
+ while (i < size)
+ {
+@@ -9261,6 +9260,16 @@
+ dwarf_stack_op_name (op));
+ return (stack[stacki]);
+ }
++ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
++ outside of the allocated space. Also enforce minimum > 0.
++ -- wad@google.com 14 Aug 2006 */
++ if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too deep: %d"),
++ stacki);
++ if (stacki <= 0)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too shallow"));
+ }
+ return (stack[stacki]);
+ }
diff --git a/patches/gdb/6.8/100-gdb-6.5-dwarf-stack-overflow.patch b/patches/gdb/6.8/100-gdb-6.5-dwarf-stack-overflow.patch
new file mode 100644
index 0000000..344d5a3
--- /dev/null
+++ b/patches/gdb/6.8/100-gdb-6.5-dwarf-stack-overflow.patch
@@ -0,0 +1,52 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.8/80_all_gdb-6.5-dwarf-stack-overflow.patch
+-= BEGIN original header =-
+http://bugs.gentoo.org/144833
+
+for gdb/ChangeLog:
+2006-08-22 Will Drewry <wad@google.com>
+ Tavis Ormandy <taviso@google.com>
+
+ * dwarf2read.c (decode_locdesc): Enforce location description stack
+ boundaries.
+ * dwarfread.c (locval): Likewise.
+
+-= END original header =-
+diff -durN gdb-6.8.orig/gdb/dwarf2read.c gdb-6.8/gdb/dwarf2read.c
+--- gdb-6.8.orig/gdb/dwarf2read.c 2008-03-10 15:18:10.000000000 +0100
++++ gdb-6.8/gdb/dwarf2read.c 2008-06-17 16:07:31.000000000 +0200
+@@ -9124,8 +9124,7 @@
+ callers will only want a very basic result and this can become a
+ complaint.
+
+- Note that stack[0] is unused except as a default error return.
+- Note that stack overflow is not yet handled. */
++ Note that stack[0] is unused except as a default error return. */
+
+ static CORE_ADDR
+ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
+@@ -9142,7 +9141,7 @@
+
+ i = 0;
+ stacki = 0;
+- stack[stacki] = 0;
++ stack[++stacki] = 0;
+
+ while (i < size)
+ {
+@@ -9324,6 +9323,16 @@
+ dwarf_stack_op_name (op));
+ return (stack[stacki]);
+ }
++ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
++ outside of the allocated space. Also enforce minimum > 0.
++ -- wad@google.com 14 Aug 2006 */
++ if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too deep: %d"),
++ stacki);
++ if (stacki <= 0)
++ internal_error (__FILE__, __LINE__,
++ _("location description stack too shallow"));
+ }
+ return (stack[stacki]);
+ }
diff --git a/patches/gdb/6.8/150-gdb-6.3-security-errata-20050610.patch b/patches/gdb/6.8/150-gdb-6.3-security-errata-20050610.patch
new file mode 100644
index 0000000..27e8174
--- /dev/null
+++ b/patches/gdb/6.8/150-gdb-6.3-security-errata-20050610.patch
@@ -0,0 +1,205 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.8/35_all_gdb-6.3-security-errata-20050610.patch
+-= BEGIN original header =-
+2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
+
+ * gdb.base/gdbinit.exp: New testcase.
+ * gdb.base/gdbinit.sample: Sample .gdbinit for gdbinit.exp.
+
+2005-06-08 Daniel Jacobowitz <dan@codesourcery.com>
+ Jeff Johnston <jjohnstn@redhat.com>
+
+ * Makefile.in (cli-cmds.o): Update.
+ * configure.in: Add check for getuid.
+ * configure: Regenerated.
+ * config.in: Ditto.
+ * main.c (captured_main): Pass -1 to source_command when loading
+ gdbinit files.
+ * cli/cli-cmds.c: Include "gdb_stat.h" and <fcntl.h>.
+ (source_command): Update documentation. Check permissions if
+ FROM_TTY is -1.
+
+-= END original header =-
+diff -durN gdb-6.8.orig/gdb/Makefile.in gdb-6.8/gdb/Makefile.in
+--- gdb-6.8.orig/gdb/Makefile.in 2008-03-17 13:15:08.000000000 +0100
++++ gdb-6.8/gdb/Makefile.in 2008-06-17 16:07:33.000000000 +0200
+@@ -3004,7 +3004,7 @@
+ $(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \
+ $(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \
+ $(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \
+- $(tui_h)
++ $(tui_h) $(gdb_stat_h)
+ $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-cmds.c
+ cli-decode.o: $(srcdir)/cli/cli-decode.c $(defs_h) $(symtab_h) \
+ $(gdb_regex_h) $(gdb_string_h) $(completer_h) $(ui_out_h) \
+diff -durN gdb-6.8.orig/gdb/cli/cli-cmds.c gdb-6.8/gdb/cli/cli-cmds.c
+--- gdb-6.8.orig/gdb/cli/cli-cmds.c 2008-01-01 23:53:14.000000000 +0100
++++ gdb-6.8/gdb/cli/cli-cmds.c 2008-06-17 16:07:33.000000000 +0200
+@@ -36,6 +36,7 @@
+ #include "objfiles.h"
+ #include "source.h"
+ #include "disasm.h"
++#include "gdb_stat.h"
+
+ #include "ui-out.h"
+
+@@ -459,12 +460,31 @@
+
+ if (fd == -1)
+ {
+- if (from_tty)
++ if (from_tty > 0)
+ perror_with_name (file);
+ else
+ return;
+ }
+
++#ifdef HAVE_GETUID
++ if (from_tty == -1)
++ {
++ struct stat statbuf;
++ if (fstat (fd, &statbuf) < 0)
++ {
++ perror_with_name (file);
++ close (fd);
++ return;
++ }
++ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
++ {
++ warning (_("not using untrusted file \"%s\""), file);
++ close (fd);
++ return;
++ }
++ }
++#endif
++
+ stream = fdopen (fd, FOPEN_RT);
+ script_from_file (stream, file);
+
+diff -durN gdb-6.8.orig/gdb/main.c gdb-6.8/gdb/main.c
+--- gdb-6.8.orig/gdb/main.c 2008-01-05 17:49:53.000000000 +0100
++++ gdb-6.8/gdb/main.c 2008-06-17 16:07:33.000000000 +0200
+@@ -690,7 +690,7 @@
+
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, homeinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, homeinit, -1, RETURN_MASK_ALL);
+ }
+
+ /* Do stats; no need to do them elsewhere since we'll only
+@@ -778,7 +778,7 @@
+ || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
+ if (!inhibit_gdbinit)
+ {
+- catch_command_errors (source_script, gdbinit, 0, RETURN_MASK_ALL);
++ catch_command_errors (source_script, gdbinit, -1, RETURN_MASK_ALL);
+ }
+
+ for (i = 0; i < ncmd; i++)
+diff -durN gdb-6.8.orig/gdb/testsuite/gdb.base/gdbinit.exp gdb-6.8/gdb/testsuite/gdb.base/gdbinit.exp
+--- gdb-6.8.orig/gdb/testsuite/gdb.base/gdbinit.exp 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.8/gdb/testsuite/gdb.base/gdbinit.exp 2008-06-17 16:07:33.000000000 +0200
+@@ -0,0 +1,98 @@
++# Copyright 2005
++# Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++# are we on a target board
++if [is_remote target] {
++ return
++}
++
++
++global verbose
++global GDB
++global GDBFLAGS
++global gdb_prompt
++global timeout
++global gdb_spawn_id;
++
++gdb_stop_suppressing_tests;
++
++verbose "Spawning $GDB -nw"
++
++if [info exists gdb_spawn_id] {
++ return 0;
++}
++
++if ![is_remote host] {
++ if { [which $GDB] == 0 } then {
++ perror "$GDB does not exist."
++ exit 1
++ }
++}
++
++set env(HOME) [pwd]
++remote_exec build "rm .gdbinit"
++remote_exec build "cp ${srcdir}/${subdir}/gdbinit.sample .gdbinit"
++remote_exec build "chmod 646 .gdbinit"
++
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ pass "untrusted .gdbinit caught."
++ }
++ -re "$gdb_prompt $" {
++ fail "untrusted .gdbinit caught."
++ }
++ timeout {
++ fail "(timeout) untrusted .gdbinit caught."
++ }
++}
++
++remote_exec build "chmod 644 .gdbinit"
++set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $GDB failed."
++ return 1;
++}
++gdb_expect 360 {
++ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" {
++ fail "trusted .gdbinit allowed."
++ }
++ -re "in gdbinit.*$gdb_prompt $" {
++ pass "trusted .gdbinit allowed."
++ }
++ timeout {
++ fail "(timeout) trusted .gdbinit allowed."
++ }
++}
++
++remote_exec build "rm .gdbinit"
+diff -durN gdb-6.8.orig/gdb/testsuite/gdb.base/gdbinit.sample gdb-6.8/gdb/testsuite/gdb.base/gdbinit.sample
+--- gdb-6.8.orig/gdb/testsuite/gdb.base/gdbinit.sample 1970-01-01 01:00:00.000000000 +0100
++++ gdb-6.8/gdb/testsuite/gdb.base/gdbinit.sample 2008-06-17 16:07:33.000000000 +0200
+@@ -0,0 +1 @@
++echo "\nin gdbinit"
diff --git a/patches/gdb/6.8/200-gdb-tdep-opcode-include-workaround.patch b/patches/gdb/6.8/200-gdb-tdep-opcode-include-workaround.patch
new file mode 100644
index 0000000..61fdef4
--- /dev/null
+++ b/patches/gdb/6.8/200-gdb-tdep-opcode-include-workaround.patch
@@ -0,0 +1,33 @@
+Original patch from gentoo: gentoo/src/patchsets/gdb/6.8/20_all_gdb-tdep-opcode-include-workaround.patch
+-= BEGIN original header =-
+workaround build failure
+
+http://bugs.gentoo.org/216368
+
+-= END original header =-
+diff -durN gdb-6.8.orig/gdb/frv-tdep.c gdb-6.8/gdb/frv-tdep.c
+--- gdb-6.8.orig/gdb/frv-tdep.c 2008-01-11 14:19:59.000000000 +0100
++++ gdb-6.8/gdb/frv-tdep.c 2008-06-17 16:07:34.000000000 +0200
+@@ -32,7 +32,7 @@
+ #include "gdb_assert.h"
+ #include "sim-regno.h"
+ #include "gdb/sim-frv.h"
+-#include "opcodes/frv-desc.h" /* for the H_SPR_... enums */
++#include "../opcodes/frv-desc.h" /* for the H_SPR_... enums */
+ #include "symtab.h"
+ #include "elf-bfd.h"
+ #include "elf/frv.h"
+diff -durN gdb-6.8.orig/gdb/mep-tdep.c gdb-6.8/gdb/mep-tdep.c
+--- gdb-6.8.orig/gdb/mep-tdep.c 2008-01-11 14:20:02.000000000 +0100
++++ gdb-6.8/gdb/mep-tdep.c 2008-06-17 16:07:34.000000000 +0200
+@@ -53,8 +53,8 @@
+
+ /* Get the user's customized MeP coprocessor register names from
+ libopcodes. */
+-#include "opcodes/mep-desc.h"
+-#include "opcodes/mep-opc.h"
++#include "../opcodes/mep-desc.h"
++#include "../opcodes/mep-opc.h"
+
+
+ /* The gdbarch_tdep structure. */