summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Ludd <solar@gentoo.org>2004-11-28 02:47:45 +0000
committerNed Ludd <solar@gentoo.org>2004-11-28 02:47:45 +0000
commita9e146500fdcb264bb9786b810fd255288a1e698 (patch)
treeef6e5a30a6950038a82ef5896c147fe1e57834ad /sys-devel/gdb
parentMarked ppc stable. (Manifest recommit) (diff)
downloadgentoo-2-a9e146500fdcb264bb9786b810fd255288a1e698.tar.gz
gentoo-2-a9e146500fdcb264bb9786b810fd255288a1e698.tar.bz2
gentoo-2-a9e146500fdcb264bb9786b810fd255288a1e698.zip
initial commit gdb-6.3. - Adds new ~/.gdbinit file for x86 users. - Adds a forward port of antilove's scanmem gdb-6.1 patch. Forward ported every patch, minus the gdb-6.x-crash.patch
Diffstat (limited to 'sys-devel/gdb')
-rw-r--r--sys-devel/gdb/ChangeLog10
-rw-r--r--sys-devel/gdb/Manifest4
-rw-r--r--sys-devel/gdb/files/digest-gdb-6.32
-rw-r--r--sys-devel/gdb/files/gdb-6.3-relative-paths.patch90
-rw-r--r--sys-devel/gdb/files/gdb-6.3-scanmem.patch238
-rw-r--r--sys-devel/gdb/files/gdb-6.3-uclibc.patch175
-rw-r--r--sys-devel/gdb/gdb-6.3.ebuild86
7 files changed, 602 insertions, 3 deletions
diff --git a/sys-devel/gdb/ChangeLog b/sys-devel/gdb/ChangeLog
index ec18d9602bf1..47041d5e5918 100644
--- a/sys-devel/gdb/ChangeLog
+++ b/sys-devel/gdb/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for sys-devel/gdb
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gdb/ChangeLog,v 1.58 2004/11/10 02:19:13 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gdb/ChangeLog,v 1.59 2004/11/28 02:43:26 solar Exp $
+
+*gdb-6.3 (27 Nov 2004)
+
+ 27 Nov 2004; <solar@gentoo.org> +files/gdb-6.3-relative-paths.patch,
+ +files/gdb-6.3-scanmem.patch, +files/gdb-6.3-uclibc.patch, +gdb-6.3.ebuild:
+ initial commit gdb-6.3. - Adds new ~/.gdbinit file for x86 users. - Adds a
+ forward port of antilove's scanmem gdb-6.1 patch. Forward ported every patch,
+ minus the gdb-6.x-crash.patch
09 Nov 2004; Mike Frysinger <vapier@gentoo.org>
+files/gdb-6.2.1-pass-libdir.patch, +files/gdb-6.2.1-relative-paths.patch,
diff --git a/sys-devel/gdb/Manifest b/sys-devel/gdb/Manifest
index b40a320dcde7..eda7e1602659 100644
--- a/sys-devel/gdb/Manifest
+++ b/sys-devel/gdb/Manifest
@@ -1,11 +1,11 @@
-MD5 ffc6ae32accb7c8d8cebd454c02431d8 gdb-6.3.ebuild 2225
+MD5 49978f0016e350d3ebcf3457887389ad gdb-6.3.ebuild 2219
MD5 bf66af8920a2d77c619eb08b4420dc6d gdb-6.0-r1.ebuild 2052
MD5 5eaed703b34587f944badab53d12f0ae gdb-6.0.ebuild 1915
MD5 4027e0d69eb5f4c99ac5051db169895b gdb-6.2.1-r1.ebuild 1937
MD5 b32cba8ff5c1e04885d765e402656019 gdb-6.2.ebuild 1791
MD5 f6777eb146402a0c759300ac38be21c4 gdb-6.1.1.ebuild 1859
MD5 72273143c147c0351ce0e9ad517b3321 gdb-6.2.1.ebuild 1793
-MD5 ef9c938a3d79b18d306810fb66deca11 ChangeLog 8346
+MD5 64d444b729792211124a9642359e9248 ChangeLog 8708
MD5 d90b42475961a4f937752c0ae1615990 gdb-6.1.ebuild 1816
MD5 567094e03359ffc1c95af7356395228d metadata.xml 162
MD5 c6dfff1373e52fef5872c1bdca4cb706 files/gdb-6.0-info.patch 1108
diff --git a/sys-devel/gdb/files/digest-gdb-6.3 b/sys-devel/gdb/files/digest-gdb-6.3
new file mode 100644
index 000000000000..3d22e6917604
--- /dev/null
+++ b/sys-devel/gdb/files/digest-gdb-6.3
@@ -0,0 +1,2 @@
+MD5 05b928f41fa5b482e49ca2c24762a0ae gdb-6.3.tar.bz2 13446729
+MD5 35e70c29e393433b3847527d808f59c2 gdb_init.txt.bz2 6247
diff --git a/sys-devel/gdb/files/gdb-6.3-relative-paths.patch b/sys-devel/gdb/files/gdb-6.3-relative-paths.patch
new file mode 100644
index 000000000000..92c88209ef34
--- /dev/null
+++ b/sys-devel/gdb/files/gdb-6.3-relative-paths.patch
@@ -0,0 +1,90 @@
+diff -Nrup gdb-6.3.orig/gdb/dwarf2read.c gdb-6.3/gdb/dwarf2read.c
+--- gdb-6.3.orig/gdb/dwarf2read.c 2004-10-15 20:41:00.000000000 -0400
++++ gdb-6.3/gdb/dwarf2read.c 2004-11-27 20:35:38.000000000 -0500
+@@ -840,7 +840,7 @@ static struct line_header *(dwarf_decode
+ static void dwarf_decode_lines (struct line_header *, char *, bfd *,
+ struct dwarf2_cu *, struct partial_symtab *);
+
+-static void dwarf2_start_subfile (char *, char *);
++static void dwarf2_start_subfile (char *, char *, char *);
+
+ static struct symbol *new_symbol (struct die_info *, struct type *,
+ struct dwarf2_cu *);
+@@ -6456,12 +6456,10 @@ dwarf_decode_lines (struct line_header *
+ directory and file name numbers in the statement program
+ are 1-based. */
+ struct file_entry *fe = &lh->file_names[file - 1];
+- char *dir;
++ char *dir = NULL;
+ if (fe->dir_index)
+ dir = lh->include_dirs[fe->dir_index - 1];
+- else
+- dir = comp_dir;
+- dwarf2_start_subfile (fe->name, dir);
++ dwarf2_start_subfile (fe->name, dir, comp_dir);
+ }
+
+ /* Decode the table. */
+@@ -6561,7 +6559,7 @@ dwarf_decode_lines (struct line_header *
+ else
+ dir = comp_dir;
+ if (!decode_for_pst_p)
+- dwarf2_start_subfile (fe->name, dir);
++ dwarf2_start_subfile (fe->name, dir, comp_dir);
+ }
+ break;
+ case DW_LNS_set_column:
+@@ -6619,7 +6617,8 @@ dwarf_decode_lines (struct line_header *
+
+ /* Start a subfile for DWARF. FILENAME is the name of the file and
+ DIRNAME the name of the source directory which contains FILENAME
+- or NULL if not known.
++ or NULL if not known. COMP_DIR is the value of DW_AT_comp_dir. If
++ DIRNAME specifies a relative path, it is appended to COMP_DIR.
+ This routine tries to keep line numbers from identical absolute and
+ relative file names in a common subfile.
+
+@@ -6638,8 +6637,19 @@ dwarf_decode_lines (struct line_header *
+ subfile, so that `break /srcdir/list0.c:1' works as expected. */
+
+ static void
+-dwarf2_start_subfile (char *filename, char *dirname)
++dwarf2_start_subfile (char *filename, char *dirname, char *comp_dir)
+ {
++ struct cleanup *back_to = make_cleanup (null_cleanup, 0);
++
++ /* If we have a relative dirname, append it to comp_dir. */
++ if (dirname != NULL && !IS_ABSOLUTE_PATH (dirname) && comp_dir != NULL)
++ {
++ dirname = concat (comp_dir, "/", dirname, NULL);
++ make_cleanup (xfree, dirname);
++ }
++ else if (dirname == NULL)
++ dirname = comp_dir;
++
+ /* If the filename isn't absolute, try to match an existing subfile
+ with the full pathname. */
+
+@@ -6647,19 +6657,20 @@ dwarf2_start_subfile (char *filename, ch
+ {
+ struct subfile *subfile;
+ char *fullname = concat (dirname, "/", filename, NULL);
++ make_cleanup (xfree, fullname);
+
+ for (subfile = subfiles; subfile; subfile = subfile->next)
+ {
+ if (FILENAME_CMP (subfile->name, fullname) == 0)
+ {
+ current_subfile = subfile;
+- xfree (fullname);
++ do_cleanups (back_to);
+ return;
+ }
+ }
+- xfree (fullname);
+ }
+ start_subfile (filename, dirname);
++ do_cleanups (back_to);
+ }
+
+ static void
diff --git a/sys-devel/gdb/files/gdb-6.3-scanmem.patch b/sys-devel/gdb/files/gdb-6.3-scanmem.patch
new file mode 100644
index 000000000000..7770a2143628
--- /dev/null
+++ b/sys-devel/gdb/files/gdb-6.3-scanmem.patch
@@ -0,0 +1,238 @@
+diff -Nrup gdb-6.3.orig/gdb/printcmd.c gdb-6.3/gdb/printcmd.c
+--- gdb-6.3.orig/gdb/printcmd.c 2004-09-11 06:24:50.000000000 -0400
++++ gdb-6.3/gdb/printcmd.c 2004-11-27 19:48:18.000000000 -0500
+@@ -940,6 +940,195 @@ print_command (char *exp, int from_tty)
+ print_command_1 (exp, 0, 1);
+ }
+
++static void
++scanmem_command(char *exp, int from_tty)
++{
++ struct expression *expr;
++ struct value *val;
++ struct format_data fmt;
++ CORE_ADDR addr;
++ unsigned char *data;
++ unsigned char *size;
++ unsigned char *pattern;
++ unsigned char typ;
++ unsigned char typc;
++ unsigned char my_buf[4];
++ unsigned int nfetch;
++ unsigned int len = 10;
++ unsigned int memsize;
++ unsigned int i;
++ int typi;
++ int errcode;
++
++ if (exp && *exp) {
++ struct type *type;
++ char *str_num = NULL;
++ char *string_to_seek = NULL;
++ char *tmp = strdup(exp);
++ char *c;
++
++ c = tmp;
++ if (*c == ' ')
++ while (*c && *c == ' ')
++ c++;
++
++ while (*c && *c != ' ')
++ c++;
++
++ *c = '\0';
++ c++;
++
++ while (*c && *c == ' ')
++ c++;
++
++ size = c;
++
++ while (*c && *c != ' ')
++ c++;
++
++ *c = '\0';
++ c++;
++
++ while (*c && *c == ' ')
++ c++;
++
++ typ = *c;
++ c++;
++
++ *c = '\0';
++ c++;
++
++ while (*c && *c == ' ')
++ c++;
++ pattern = c;
++
++ printf_filtered(">>addr %s: size %s: type:%c pattern:%s<< \n",
++ tmp, size, typ, pattern);
++
++ expr = parse_expression(tmp);
++ val = evaluate_expression(expr);
++
++ if (TYPE_CODE(VALUE_TYPE(val)) == TYPE_CODE_REF)
++ val = value_ind(val);
++
++ if (TYPE_CODE(VALUE_TYPE(val)) == TYPE_CODE_FUNC
++ && VALUE_LVAL(val) == lval_memory)
++ addr = VALUE_ADDRESS(val);
++ else
++ addr = value_as_address(val);
++
++ len = atoi(size);
++ data = xmalloc(len);
++ nfetch = partial_memory_read(addr, data, len, &errcode);
++
++ if (nfetch != len)
++ printf_filtered("we can read only %i bytes\n", nfetch);
++
++ switch (typ) {
++ case 's':
++ memsize = strlen(pattern);
++ if (nfetch < memsize) {
++ printf_filtered
++ ("we read only %i bytes and we seek for a pattern of %i bytes\n",
++ nfetch, memsize);
++ free(data);
++ free(tmp);
++ return;
++ }
++ for (i = 0; i <= (nfetch - memsize); i++, addr++) {
++ if (memcmp(data + i, pattern, memsize) == 0) {
++ printf_filtered("pattern match at ");
++ print_address_numeric((addr), 1, gdb_stdout);
++ printf_filtered("\n");
++ }
++ }
++ break;
++ case 'i':
++ memsize = sizeof(int);
++ typi = atoi(pattern);
++
++ if (nfetch < memsize) {
++ printf_filtered
++ ("we read only %i bytes and we seek for a pattern of %i bytes\n",
++ nfetch, memsize);
++ free(data);
++ free(tmp);
++ return;
++ }
++ for (i = 0; i <= (nfetch - memsize); i++, addr++) {
++ int *pint;
++ (unsigned char *) pint = (unsigned char *) (data + i);
++ if (*pint == typi) {
++ printf_filtered("pattern match at ");
++ print_address_numeric((addr), 1, gdb_stdout);
++ printf_filtered("\n");
++ }
++ }
++ break;
++ case 'a':
++ memsize = sizeof(unsigned long);
++ if (sscanf(pattern, "0x%x", &i) == 0) {
++ printf_filtered("cant convert to hexa %s\n", pattern);
++ break;
++ }
++ my_buf[0] = (unsigned char) ((i & 0x000000FF));
++ my_buf[1] = (unsigned char) ((i & 0x0000FF00) >> 8);
++ my_buf[2] = (unsigned char) ((i & 0x00FF0000) >> 16);
++ my_buf[3] = (unsigned char) ((i & 0xFF000000) >> 24);
++ if (nfetch < memsize) {
++ printf_filtered
++ ("we read only %i bytes and we seek for a pattern of %i bytes\n",
++ nfetch, memsize);
++ free(data);
++ free(tmp);
++ return;
++ }
++ for (i = 0; i <= (nfetch - memsize); i++, addr++) {
++ if (memcmp((data + i), my_buf, memsize) == 0) {
++ printf_filtered("pattern match at ");
++ print_address_numeric((addr), 1, gdb_stdout);
++ printf_filtered("\n");
++ }
++ }
++ break;
++ case 'b':
++ case 'c':
++ memsize = sizeof(char);
++ if (typ == 'c')
++ typc = *pattern;
++ else {
++ if (strncmp("0x", pattern, 2) == 0) {
++ sscanf(pattern, "0x%02x", &typc);
++ } else
++ (int) typc = atoi(pattern);
++ }
++ printf_filtered(">>>%0x2\n", (int) typc);
++ if (nfetch < memsize) {
++ printf_filtered
++ ("we read only %i bytes and we seek for a pattern of %i bytes\n",
++ nfetch, memsize);
++ free(data);
++ free(tmp);
++ return;
++ }
++ for (i = 0; i <= (nfetch - memsize); i++, addr++) {
++ if (*(data + i) == typc) {
++ printf_filtered("pattern match at ");
++ print_address_numeric((addr), 1, gdb_stdout);
++ printf_filtered("\n");
++ }
++ }
++ break;
++ default:
++ printf_filtered("'%c' is not a valid type\n", typ);
++ break;
++ }
++ free(data);
++ free(tmp);
++ return;
++ }
++}
++
+ /* Same as print, except in epoch, it gets its own window */
+ static void
+ inspect_command (char *exp, int from_tty)
+@@ -2138,6 +2327,17 @@ EXP may be preceded with /FMT, where FMT
+ but no count or size letter (see \"x\" command).", NULL));
+ set_cmd_completer (c, location_completer);
+ add_com_alias ("p", "print", class_vars, 1);
++ c =
++ add_com ("scanmem", class_vars, scanmem_command,
++ "scanmem <addr> <num> <type> <string>\n"
++ "example: scanmem $esp 100 a 0x8048434\n"
++ " scan for this addr into the stack\n\n"
++ " scanmem 0x08048434 100 s fsck\n"
++ " seek for a string\n"
++ " scanmem 0x8048434 100 b 0x75\n"
++ " scan for the char 0x75\n"
++ " a = address c = char b = byte i = int s = string\n"
++ "\n"); /* antilove@zolo.freelsd.net */
+
+ c = add_com ("inspect", class_vars, inspect_command,
+ "Same as \"print\" command, except that if you are running in the epoch\n\
+diff -Nrup gdb-6.3.orig/gdb/valprint.c gdb-6.3/gdb/valprint.c
+--- gdb-6.3.orig/gdb/valprint.c 2004-09-12 12:13:04.000000000 -0400
++++ gdb-6.3/gdb/valprint.c 2004-11-27 19:23:54.000000000 -0500
+@@ -39,7 +39,7 @@
+
+ /* Prototypes for local functions */
+
+-static int partial_memory_read (CORE_ADDR memaddr, char *myaddr,
++int partial_memory_read (CORE_ADDR memaddr, char *myaddr,
+ int len, int *errnoptr);
+
+ static void show_print (char *, int);
+@@ -837,7 +837,7 @@ val_print_array_elements (struct type *t
+ /* FIXME: cagney/1999-10-14: Only used by val_print_string. Can this
+ function be eliminated. */
+
+-static int
++int
+ partial_memory_read (CORE_ADDR memaddr, char *myaddr, int len, int *errnoptr)
+ {
+ int nread; /* Number of bytes actually read. */
diff --git a/sys-devel/gdb/files/gdb-6.3-uclibc.patch b/sys-devel/gdb/files/gdb-6.3-uclibc.patch
new file mode 100644
index 000000000000..d292f6e23a89
--- /dev/null
+++ b/sys-devel/gdb/files/gdb-6.3-uclibc.patch
@@ -0,0 +1,175 @@
+diff -Nrup gdb-6.3.orig/bfd/config.bfd gdb-6.3/bfd/config.bfd
+--- gdb-6.3.orig/bfd/config.bfd 2004-10-15 01:47:11.000000000 -0400
++++ gdb-6.3/bfd/config.bfd 2004-11-27 20:15:57.000000000 -0500
+@@ -129,7 +129,7 @@ case "${targ}" in
+ 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 @@ case "${targ}" in
+ 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*-*-kfreebsd*-gnu | ia64*-*-linux-uclibc*)
+ targ_defvec=bfd_elf64_ia64_little_vec
+ targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+ ;;
+@@ -216,7 +216,7 @@ case "${targ}" in
+ 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
+ ;;
+@@ -225,7 +225,7 @@ case "${targ}" in
+ targ_selvecs=bfd_elf32_bigarm_vec
+ ;;
+ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+- arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
++ arm*-*-uclinux* | arm*-*-linux-uclibc* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+ arm*-*-eabi* )
+ targ_defvec=bfd_elf32_littlearm_vec
+ targ_selvecs=bfd_elf32_bigarm_vec
+@@ -378,7 +378,7 @@ case "${targ}" in
+ ;;
+
+ #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 @@ case "${targ}" in
+ ;;
+ #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 @@ case "${targ}" in
+ 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 @@ case "${targ}" in
+ 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"
+ ;;
+@@ -706,7 +706,7 @@ case "${targ}" in
+ targ_defvec=hp300hpux_vec
+ targ_underscore=yes
+ ;;
+- m68*-*-linux*aout*)
++ m68*-*-linux*aout* | m68*-*-linux-uclibc*)
+ targ_defvec=m68klinux_vec
+ targ_selvecs=bfd_elf32_m68k_vec
+ targ_underscore=yes
+@@ -987,8 +987,8 @@ case "${targ}" in
+ ;;
+ #endif
+ powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+- powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
+- powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
++ 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"
+ targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1024,8 +1024,8 @@ case "${targ}" in
+ 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 +1192,7 @@ case "${targ}" in
+ 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 +1239,7 @@ case "${targ}" in
+ 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"
+ ;;
+diff -Nrup gdb-6.3.orig/libtool.m4 gdb-6.3/libtool.m4
+--- gdb-6.3.orig/libtool.m4 2004-07-21 15:21:41.000000000 -0400
++++ gdb-6.3/libtool.m4 2004-11-27 20:12:48.000000000 -0500
+@@ -645,6 +645,10 @@ linux-gnu*)
+ 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]+$']
+diff -Nrup gdb-6.3.orig/ltconfig gdb-6.3/ltconfig
+--- gdb-6.3.orig/ltconfig 2004-10-05 09:34:42.000000000 -0400
++++ gdb-6.3/ltconfig 2004-11-27 20:01:13.000000000 -0500
+@@ -602,7 +602,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+
+@@ -1270,6 +1270,24 @@ linux-gnu*)
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
++linux-uclibc*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++ soname_spec='${libname}${release}.so$major'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ # This implies no fast_install, which is unacceptable.
++ # Some rework will be needed to allow for fast_install
++ # before this can be enabled.
++ # Note: copied from linux-gnu, and may not be appropriate.
++ hardcode_into_libs=yes
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ need_lib_prefix=no
+ need_version=no
diff --git a/sys-devel/gdb/gdb-6.3.ebuild b/sys-devel/gdb/gdb-6.3.ebuild
new file mode 100644
index 000000000000..6e1a3e3cd380
--- /dev/null
+++ b/sys-devel/gdb/gdb-6.3.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gdb/gdb-6.3.ebuild,v 1.1 2004/11/28 02:43:26 solar Exp $
+
+inherit flag-o-matic eutils
+
+DESCRIPTION="GNU debugger"
+HOMEPAGE="http://sources.redhat.com/gdb/"
+SRC_URI="http://mirrors.rcn.net/pub/sourceware/gdb/releases/${P}.tar.bz2
+ mirror://gentoo/gdb_init.txt.bz2"
+#SRC_URI="${SRC_URI} mirror://gentoo/gdb-6.1-hppa-01.patch.bz2"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0"
+#KEYWORDS="~alpha ~amd64 ~arm ~hppa ~mips ~ppc ~ppc64 -sparc ~x86"
+KEYWORDS="-*"
+IUSE="nls makecheck"
+
+RDEPEND=">=sys-libs/ncurses-5.2-r2"
+DEPEND="${RDEPEND}
+ maketest? ( dev-util/dejagnu )
+ nls? ( sys-devel/gettext )"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ epatch ${FILESDIR}/gdb-6.3-uclibc.patch
+ epatch ${FILESDIR}/gdb-6.3-relative-paths.patch
+ #epatch ${FILESDIR}/gdb-6.x-crash.patch
+ epatch ${FILESDIR}/gdb-6.2.1-pass-libdir.patch
+ epatch ${FILESDIR}/gdb-6.3-scanmem.patch
+
+ cp ${WORKDIR}/gdb_init.txt ${S}/ || die
+
+ strip-linguas -u bfd/po opcodes/po
+}
+
+src_compile() {
+ replace-flags -O? -O2
+ econf $(use_enable nls) || die
+ make || die
+}
+
+src_install() {
+ make \
+ prefix=${D}/usr \
+ mandir=${D}/usr/share/man \
+ libdir=${D}/usr/$(get_libdir) \
+ infodir=${D}/usr/share/info \
+ install || die "install"
+
+ dodoc README
+ docinto gdb
+ dodoc gdb/CONTRIBUTE gdb/README gdb/MAINTAINERS \
+ gdb/NEWS gdb/ChangeLog* gdb/TODO
+ docinto sim
+ dodoc sim/ChangeLog sim/MAINTAINERS sim/README-HACKING
+ docinto mmalloc
+ dodoc mmalloc/MAINTAINERS mmalloc/ChangeLog mmalloc/TODO
+
+ if use x86; then
+ dodir /etc/skel/
+ cp ${S}/gdb_init.txt ${D}/etc/skel/.gdbinit \
+ || die "install ${D}/etc/skel/.gdbinit"
+ fi
+
+ if ! has noinfo ${FEATURES} ; then
+ cd gdb/doc
+ make \
+ infodir=${D}/usr/share/info \
+ install-info || die "install doc info"
+
+ cd ${S}/bfd/doc
+ make \
+ infodir=${D}/usr/share/info \
+ install-info || die "install bfd info"
+ fi
+
+ # These includes and libs are in binutils already
+ rm -f ${D}/usr/lib/libbfd.*
+ rm -f ${D}/usr/lib/libiberty.*
+ rm -f ${D}/usr/lib/libopcodes.*
+ rm -f ${D}/usr/share/info/{bfd,configure,standards}.info*
+ rm -r ${D}/usr/share/locale
+ rm -r ${D}/usr/include
+}