gps/GPSResources/tcpmpVerOld/cross-compile/binutils-2.14.palmos.diff

1732 lines
55 KiB
Diff
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -urN orig-binutils-2.14/ChangeLogs.palmos binutils-2.14/ChangeLogs.palmos
--- orig-binutils-2.14/ChangeLogs.palmos 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/ChangeLogs.palmos 2005-05-31 16:30:00.343750000 +0200
@@ -0,0 +1,81 @@
+Collect all the changelog entries here for use on the eventual submission
+to the FSF:
+
+(Many of these log entries no longer relate to the current form of the
+patches. But at the moment they are still of historical interest to us.)
+
+bfd/ChangeLog
+=============
+
+2002-01-09 John Marshall <johnm@falch.net>
+
+ * cofflink.c (_bfd_coff_generic_relocate_section): Removed handling
+ of R_RELENDWORD from here...
+ * coff-m68k.c (m68kcoff_rtype_to_howto): ...handling it here instead.
+ (m68kcoff_global_data_size): New helper function.
+
+Tue Feb 1 21:54:44 2000 John Marshall <john_w_marshall@palm.com>
+
+ * coff-m68k.c (_bfd_m68kcoff_create_embedded_relocs,
+ coff_m68k_bfd_print_private_bfd_data), emultempl/m68kcoff.em:
+ Pad the .reloc records to 12 bytes.
+ * coffcode.h (coff_new_section_hook): Don't try to change .reloc's
+ alignment.
+
+Thu Sep 24 14:24:36 1998 John Marshall <jmarshall@acm.org>
+
+ * coff-m68k.c (m68k_rtype2howto, m68k_howto2rtype,
+ m68k_reloc_type_lookup): New reloc type R_RELENDWORD.
+ * cofflink.c (_bfd_coff_generic_relocate_section): Likewise.
+
+Sat Sep 5 14:10:23 1998 John Marshall <jmarshall@acm.org>
+
+ * cofflink.c (_bfd_coff_generic_relocate_section): Fill in .dreloc
+ section, somewhat similarly to base file.
+
+
+gas/ChangeLog
+=============
+
+2002-01-09 John Marshall <johnm@falch.net>
+
+ * config/obj-elf.h, config/tc-m68k.h: Reorganised the setting of
+ NEED_FX_R_TYPE and SPECIAL_PIC_RELOC (now renamed COFF_RELEND_RELOC)
+ so as to avoid touching these two files.
+
+Tue Oct 13 01:30:47 1998 John Marshall <jmarshall@acm.org>
+
+ * config/m68k-parse.h, config/m68k-parse.y, config/tc-m68k.c: Use
+ SPECIAL_PIC_RELOC instead of OBJ_ELF to activate special PIC
+ relocation code.
+ * config/obj-elf.h, config/obj-coff.h: Define SPECIAL_PIC_RELOC.
+ * config/tc-m68k.h [SPECIAL_PIC_RELOC]: Define NEED_FX_R_TYPE.
+
+ * config/m68k-parse.h: New pic_relocation type pic_endrel.
+ * config/m68k-parse.y: Encode `symbol@END' as pic_endrel.
+
+ * config/tc-m68k.c (get_reloc_code) [SPECIAL_PIC_RELOC]: Set
+ fx_r_type if the reloc has a special pic type.
+ (tc_coff_fix2rtype) [SPECIAL_PIC_RELOC]: Use fx_r_type if set.
+
+
+include/coff/ChangeLog
+======================
+
+Sat Sep 5 21:38:15 1998 John Marshall <jmarshall@acm.org>
+
+ * internal.h (R_RELENDWORD): Define.
+
+
+ld/ChangeLog
+============
+
+Sat Sep 5 14:10:23 1998 John Marshall <jmarshall@acm.org>
+
+ * emultempl/m68kcoff.em: New file, based on generic.em, with a
+ custom gld${EMULATION_NAME}_after_open that creates a .dreloc
+ section for input bfds which need it, if --embedded-relocs is used.
+ * emulparams/m68kcoff.sh (TEMPLATE_NAME): Set to m68kcoff.
+ * Makefile.am (em68kcoff.c): Depend upon m68kcoff.em rather than
+ generic.em.
+ * Makefile.in (em68kcoff.c): Likewise.
diff -urN orig-binutils-2.14/Makefile.in binutils-2.14/Makefile.in
--- orig-binutils-2.14/Makefile.in 2005-05-31 16:27:00.953125000 +0200
+++ binutils-2.14/Makefile.in 2005-05-31 16:30:00.343750000 +0200
@@ -1089,7 +1089,7 @@
.PHONY: info installcheck dvi install-info
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
-info: do-info
+info: configure-host do-info
installcheck: do-installcheck
dvi: do-dvi
diff -urN orig-binutils-2.14/bfd/Makefile.am binutils-2.14/bfd/Makefile.am
--- orig-binutils-2.14/bfd/Makefile.am 2005-05-31 16:25:55.234375000 +0200
+++ binutils-2.14/bfd/Makefile.am 2005-05-31 16:30:00.375000000 +0200
@@ -305,6 +305,9 @@
pei-mips.lo \
peigen.lo \
ppcboot.lo \
+ prc-arm.lo \
+ prc-m68k.lo \
+ prc.lo \
reloc16.lo \
riscix.lo \
sparclinux.lo \
@@ -467,6 +470,9 @@
pe-mips.c \
pei-mips.c \
ppcboot.c \
+ prc-arm.c \
+ prc-m68k.c \
+ prc.c \
reloc16.c \
riscix.c \
sparclinux.c \
@@ -1465,6 +1471,9 @@
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
peicode.h libpei.h
ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h
+prc-arm.lo: prc-arm.c prc.h
+prc-m68k.lo: prc-m68k.c prc.h
+prc.lo: prc.c prc.h $(INCDIR)/safe-ctype.h
reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
genlink.h $(INCDIR)/coff/internal.h libcoff.h
riscix.lo: riscix.c $(INCDIR)/filenames.h libaout.h \
diff -urN orig-binutils-2.14/bfd/Makefile.in binutils-2.14/bfd/Makefile.in
--- orig-binutils-2.14/bfd/Makefile.in 2005-05-31 16:25:55.234375000 +0200
+++ binutils-2.14/bfd/Makefile.in 2005-05-31 16:30:00.406250000 +0200
@@ -432,6 +432,9 @@
pei-mips.lo \
peigen.lo \
ppcboot.lo \
+ prc-arm.lo \
+ prc-m68k.lo \
+ prc.lo \
reloc16.lo \
riscix.lo \
sparclinux.lo \
@@ -595,6 +598,9 @@
pe-mips.c \
pei-mips.c \
ppcboot.c \
+ prc-arm.c \
+ prc-m68k.c \
+ prc.c \
reloc16.c \
riscix.c \
sparclinux.c \
@@ -1998,6 +2004,9 @@
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
peicode.h libpei.h
ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h
+prc-arm.lo: prc-arm.c prc.h
+prc-m68k.lo: prc-m68k.c prc.h
+prc.lo: prc.c prc.h $(INCDIR)/safe-ctype.h
reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
genlink.h $(INCDIR)/coff/internal.h libcoff.h
riscix.lo: riscix.c $(INCDIR)/filenames.h libaout.h \
diff -urN orig-binutils-2.14/bfd/coff-m68k.c binutils-2.14/bfd/coff-m68k.c
--- orig-binutils-2.14/bfd/coff-m68k.c 2005-05-31 16:25:51.546875000 +0200
+++ binutils-2.14/bfd/coff-m68k.c 2005-05-31 16:30:00.421875000 +0200
@@ -67,6 +67,8 @@
#define RELOC_SPECIAL_FN m68kcoff_common_addend_special_fn
#endif
+static bfd_boolean coff_m68k_bfd_print_private_bfd_data
+ PARAMS ((bfd *, PTR));
static bfd_boolean m68k_coff_is_local_label_name
PARAMS ((bfd *, const char *));
@@ -108,6 +110,7 @@
HOWTO (R_PCRWORD, 0, 1, 16, TRUE, 0, complain_overflow_signed, RELOC_SPECIAL_FN, "DISP16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
HOWTO (R_PCRLONG, 0, 2, 32, TRUE, 0, complain_overflow_signed, RELOC_SPECIAL_FN, "DISP32", TRUE, 0xffffffff,0xffffffff, FALSE),
HOWTO (R_RELLONG_NEG, 0, -2, 32, FALSE, 0, complain_overflow_bitfield, RELOC_SPECIAL_FN, "-32", TRUE, 0xffffffff,0xffffffff, FALSE),
+ HOWTO (R_RELENDWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, RELOC_SPECIAL_FN, "END16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
};
#endif /* not ONLY_DECLARE_RELOCS */
@@ -150,6 +153,7 @@
case R_PCRWORD: internal->howto = m68kcoff_howto_table + 4; break;
case R_PCRLONG: internal->howto = m68kcoff_howto_table + 5; break;
case R_RELLONG_NEG: internal->howto = m68kcoff_howto_table + 6; break;
+ case R_RELENDWORD: internal->howto = m68kcoff_howto_table + 7; break;
}
}
@@ -157,6 +161,9 @@
m68k_howto2rtype (internal)
reloc_howto_type *internal;
{
+ if (internal->type == R_RELENDWORD)
+ return R_RELENDWORD;
+
if (internal->pc_relative)
{
switch (internal->bitsize)
@@ -194,6 +201,7 @@
case BFD_RELOC_16_PCREL: return m68kcoff_howto_table + 4;
case BFD_RELOC_32_PCREL: return m68kcoff_howto_table + 5;
/* FIXME: There doesn't seem to be a code for R_RELLONG_NEG. */
+ /* FIXME: Nor for R_RELENDWORD. */
}
/*NOTREACHED*/
}
@@ -208,6 +216,46 @@
#define coff_bfd_reloc_type_lookup m68k_reloc_type_lookup
+#ifndef coff_rtype_to_howto
+/* If this is not yet defined, one of the following definitions will be
+ used. Both need this helper function. */
+
+static bfd_vma m68kcoff_global_data_size
+ PARAMS ((bfd *, asection *, struct internal_reloc *,
+ struct coff_link_hash_entry *));
+
+static bfd_vma
+m68kcoff_global_data_size (abfd, sec, rel, h)
+ bfd *abfd;
+ asection *sec;
+ struct internal_reloc *rel;
+ struct coff_link_hash_entry *h;
+{
+ struct bfd_link_info *info;
+ struct coff_link_hash_entry *edata;
+
+ info = coff_data (sec->output_section->owner)->link_info;
+
+ edata = coff_link_hash_lookup (coff_hash_table (info), "edata",
+ FALSE, FALSE, TRUE);
+
+ if (edata && (edata->root.type == bfd_link_hash_defined
+ || edata->root.type == bfd_link_hash_defweak))
+ {
+ return edata->root.u.def.value;
+ }
+ else
+ {
+ (*info->callbacks->warning) (info,
+ "END16 relocation failed without `edata'",
+ h? h->root.root.string : NULL, abfd, sec,
+ rel->r_vaddr - sec->vma);
+ return 0;
+ }
+}
+
+#endif
+
#ifndef COFF_COMMON_ADDEND
#ifndef coff_rtype_to_howto
@@ -220,10 +268,10 @@
static reloc_howto_type *
m68kcoff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
- bfd *abfd ATTRIBUTE_UNUSED;
+ bfd *abfd;
asection *sec;
struct internal_reloc *rel;
- struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
+ struct coff_link_hash_entry *h;
struct internal_syment *sym ATTRIBUTE_UNUSED;
bfd_vma *addendp;
{
@@ -237,6 +285,9 @@
if (howto->pc_relative)
*addendp += sec->vma;
+ if (rel->r_type == R_RELENDWORD)
+ *addendp -= m68kcoff_global_data_size (abfd, sec, rel, h);
+
return howto;
}
@@ -380,7 +431,7 @@
static reloc_howto_type *
m68kcoff_common_addend_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
- bfd *abfd ATTRIBUTE_UNUSED;
+ bfd *abfd;
asection *sec;
struct internal_reloc *rel;
struct coff_link_hash_entry *h;
@@ -397,6 +448,9 @@
if (howto->pc_relative)
*addendp += sec->vma;
+ if (rel->r_type == R_RELENDWORD)
+ *addendp -= m68kcoff_global_data_size (abfd, sec, rel, h);
+
if (sym != NULL && sym->n_scnum == 0 && sym->n_value != 0)
{
/* This is a common symbol. The section contents include the
@@ -506,21 +560,194 @@
targetsec = NULL;
}
+ bfd_put_16 (abfd, 1, p);
+ bfd_put_16 (abfd, datasec->output_section->index, p + 2);
bfd_put_32 (abfd,
- (irel->r_vaddr - datasec->vma + datasec->output_offset), p);
- memset (p + 4, 0, 8);
+ (irel->r_vaddr - datasec->vma + datasec->output_offset),
+ p + 4);
if (targetsec != NULL)
- strncpy (p + 4, targetsec->output_section->name, 8);
+ bfd_put_16 (abfd, targetsec->output_section->index, p + 8);
+ else
+ {
+ /* Probably can't happen, but let's try to be compatible with the
+ previous version. */
+ p -= 12;
+ }
+ bfd_put_16 (abfd, 0, p + 10);
}
return TRUE;
}
#endif /* neither ONLY_DECLARE_RELOCS not STATIC_RELOCS */
+/* Print the contents of ABFD's `.reloc' section to the file PTR. */
+static bfd_boolean
+coff_m68k_bfd_print_private_bfd_data (abfd, ptr)
+ bfd *abfd;
+ PTR ptr;
+{
+ FILE *f = (FILE *) ptr;
+ asection *relocs_sec, *held_relsec;
+ bfd_byte *relocs, *rel, *relsec_contents;
+ bfd_size_type relocs_size, relsec_size = 0;
+
+ relocs_sec = bfd_get_section_by_name (abfd, ".reloc");
+ if (relocs_sec == NULL)
+ return TRUE;
+
+ fprintf (f, "\nEMBEDDED RELOCATION RECORDS:");
+
+ relocs_size = bfd_section_size (abfd, relocs_sec);
+ if (relocs_size == 0)
+ {
+ fprintf (f, " (none)\n\n");
+ return TRUE;
+ }
+ else
+ fprintf (f, "\n");
+
+ relocs = (bfd_byte *) bfd_malloc ((size_t) relocs_size);
+ bfd_get_section_contents (abfd, relocs_sec, (PTR) relocs, 0, relocs_size);
+
+ /* Get column headers lined up reasonably. */
+ {
+ static int width;
+ if (width == 0)
+ {
+ char buf[30];
+ sprintf_vma (buf, (bfd_vma) -1);
+ width = strlen (buf) - 7;
+ }
+ fprintf (f, "SECTION+OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
+ }
+
+ held_relsec = NULL;
+ relsec_contents = NULL;
+
+ for (rel = relocs; rel < relocs + relocs_size; rel += 12)
+ {
+ bfd_vma type, reloffset, value;
+ int relsecndx, symsecndx;
+ reloc_howto_type *howto;
+ asection *sec, *relsec, *symsec;
+ CONST char *relsecname, *symsecname;
+ char relbuffer[32], symbuffer[32];
+
+ type = bfd_get_16 (abfd, rel);
+ relsecndx = bfd_get_16 (abfd, rel+2);
+ reloffset = bfd_get_32 (abfd, rel+4);
+ symsecndx = bfd_get_16 (abfd, rel+8);
+
+ /* Decode the embedded relocation type. See also the corresponding
+ encoding table in _bfd_m68kcoff_create_embedded_relocs(). */
+ switch (type)
+ {
+ case 1:
+ type = BFD_RELOC_32;
+ break;
+
+ default:
+ type = BFD_RELOC_UNUSED; /* Something definitely unknown. */
+ break;
+ }
+
+ relsec = symsec = NULL;
+ for (sec = abfd->sections; sec; sec = sec->next)
+ {
+ if (sec->index == relsecndx)
+ relsec = sec;
+ if (sec->index == symsecndx)
+ symsec = sec;
+ }
+
+ sprintf (relbuffer, "[%d?]", (int) relsecndx);
+ relsecname = (relsec)? bfd_section_name (abfd, relsec) : relbuffer;
+
+ sprintf (symbuffer, "[%d?]", (int) symsecndx);
+ symsecname = (symsec)? bfd_section_name (abfd, symsec) : symbuffer;
+
+ fprintf (f, "%s+0x", relsecname);
+ fprintf_vma (f, reloffset);
+ fprintf (f, "%*s", (int) (9 - strlen (relsecname)), "");
+
+ howto = (relsec)? bfd_reloc_type_lookup (abfd, type) : NULL;
+ if (howto == NULL)
+ {
+ char buf[32];
+ sprintf (buf, "[0x%x]", (unsigned int) type);
+ fprintf (f, "%-18.18s%s+?? (%s unknown)\n", buf, symsecname,
+ (relsec)? "type" : "relocation section");
+ continue;
+ }
+
+ fprintf (f, "%-18.18s", howto->name);
+
+ if (relsec == NULL)
+ {
+ fprintf (f, "%s+?? (relocation section unknown)\n", symsecname);
+ continue;
+ }
+
+ if (held_relsec != relsec)
+ {
+ free (relsec_contents);
+ held_relsec = relsec;
+ relsec_size = bfd_section_size (abfd, relsec);
+ relsec_contents = (bfd_byte *) bfd_malloc ((size_t) relsec_size);
+ bfd_get_section_contents (abfd, relsec, (PTR) relsec_contents,
+ 0, relsec_size);
+ }
+
+ if (reloffset > relsec_size - bfd_get_reloc_size (howto))
+ {
+ fprintf (f, "%s+?? (offset out of range)\n", symsecname);
+ continue;
+ }
+
+ switch (bfd_get_reloc_size (howto))
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ value = bfd_get_8 (abfd, &relsec_contents[reloffset]);
+ break;
+ case 2:
+ value = bfd_get_16 (abfd, &relsec_contents[reloffset]);
+ break;
+ case 4:
+ value = bfd_get_32 (abfd, &relsec_contents[reloffset]);
+ break;
+ case 8:
+#ifdef BFD64
+ value = bfd_get_64 (abfd, &relsec_contents[reloffset]);
+#else
+ abort ();
+#endif
+ break;
+ }
+
+ value &= howto->dst_mask;
+ value >>= howto->bitpos;
+ value <<= howto->rightshift;
+
+ fprintf (f, "%s+0x", symsecname);
+ fprintf_vma (f, value - bfd_section_vma (abfd, symsec));
+ fprintf (f, "\n");
+ }
+
+ free (relocs);
+ free (relsec_contents);
+
+ return TRUE;
+}
+
#define coff_bfd_is_local_label_name m68k_coff_is_local_label_name
#define coff_relocate_section _bfd_coff_generic_relocate_section
+#define coff_bfd_print_private_bfd_data coff_m68k_bfd_print_private_bfd_data
+
#include "coffcode.h"
#ifndef TARGET_SYM
diff -urN orig-binutils-2.14/bfd/config.bfd binutils-2.14/bfd/config.bfd
--- orig-binutils-2.14/bfd/config.bfd 2005-05-31 16:25:52.281250000 +0200
+++ binutils-2.14/bfd/config.bfd 2005-05-31 16:30:00.437500000 +0200
@@ -219,6 +219,10 @@
targ_defvec=bfd_elf32_littlearm_oabi_vec
targ_selvecs=bfd_elf32_bigarm_oabi_vec
;;
+ arm-*-palmos*)
+ targ_defvec=bfd_elf32_littlearm_vec
+ targ_selvecs="bfd_elf32_bigarm_vec prc_littlearm_vec"
+ ;;
thumb-*-coff)
targ_defvec=armcoff_little_vec
@@ -696,6 +700,10 @@
targ_selvecs=ieee_vec
targ_underscore=yes
;;
+ m68*-*-palmos*)
+ targ_defvec=m68kcoff_vec
+ targ_selvecs=prc_m68k_vec
+ ;;
m88*-harris-cxux* | m88*-*-dgux* | m88*-*-sysv4*)
targ_defvec=bfd_elf32_m88k_vec
diff -urN orig-binutils-2.14/bfd/configure binutils-2.14/bfd/configure
--- orig-binutils-2.14/bfd/configure 2005-05-31 16:25:52.312500000 +0200
+++ binutils-2.14/bfd/configure 2005-05-31 16:30:00.484375000 +0200
@@ -6275,6 +6275,8 @@
pdp11_aout_vec) tb="$tb pdp11.lo" ;;
pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
ppcboot_vec) tb="$tb ppcboot.lo" ;;
+ prc_littlearm_vec) tb="$tb prc-arm.lo prc.lo" ;;
+ prc_m68k_vec) tb="$tb prc-m68k.lo prc.lo" ;;
riscix_vec) tb="$tb aout32.lo riscix.lo" ;;
rs6000coff64_vec) tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
diff -urN orig-binutils-2.14/bfd/configure.in binutils-2.14/bfd/configure.in
--- orig-binutils-2.14/bfd/configure.in 2005-05-31 16:25:52.312500000 +0200
+++ binutils-2.14/bfd/configure.in 2005-05-31 16:30:00.453125000 +0200
@@ -737,6 +737,8 @@
pdp11_aout_vec) tb="$tb pdp11.lo" ;;
pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
ppcboot_vec) tb="$tb ppcboot.lo" ;;
+ prc_littlearm_vec) tb="$tb prc-arm.lo prc.lo" ;;
+ prc_m68k_vec) tb="$tb prc-m68k.lo prc.lo" ;;
riscix_vec) tb="$tb aout32.lo riscix.lo" ;;
rs6000coff64_vec) tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
diff -urN orig-binutils-2.14/bfd/prc-arm.c binutils-2.14/bfd/prc-arm.c
--- orig-binutils-2.14/bfd/prc-arm.c 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/bfd/prc-arm.c 2005-05-31 16:30:00.484375000 +0200
@@ -0,0 +1,50 @@
+/* BFD back-end for the Palm OS PRC resource database format.
+ Copyright 2002 John Marshall. (For now.)
+ Contributed by Falch.net as.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "prc.h"
+
+static flagword secflags
+ PARAMS ((const struct palmos_prc_header *header, const char *secname));
+
+static flagword
+secflags (header, secname)
+ const struct palmos_prc_header *header ATTRIBUTE_UNUSED;
+ const char *secname;
+{
+ flagword flags = 0;
+
+ if (strncmp (secname, "armc", 4) == 0)
+ flags |= SEC_CODE;
+
+ return flags;
+}
+
+static const struct palmos_prc_backend_data arm_backend_data =
+{
+ bfd_arch_arm, bfd_mach_arm_4T, secflags
+};
+
+const bfd_target prc_littlearm_vec =
+ PRC_TARGET_VECTOR ("prc-littlearm", BFD_ENDIAN_LITTLE,
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16,
+ &arm_backend_data);
diff -urN orig-binutils-2.14/bfd/prc-m68k.c binutils-2.14/bfd/prc-m68k.c
--- orig-binutils-2.14/bfd/prc-m68k.c 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/bfd/prc-m68k.c 2005-05-31 16:30:00.500000000 +0200
@@ -0,0 +1,64 @@
+/* BFD back-end for the Palm OS PRC resource database format.
+ Copyright 2002 John Marshall. (For now.)
+ Contributed by Falch.net as.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "prc.h"
+
+static flagword secflags
+ PARAMS ((const struct palmos_prc_header *header, const char *secname));
+
+static flagword
+secflags (header, secname)
+ const struct palmos_prc_header *header;
+ const char *secname;
+{
+ flagword flags = 0;
+
+ if (strncmp (secname, "libr", 4) == 0
+ || strncmp (secname, "GLib", 4) == 0
+ || strncmp (secname, "HACK", 4) == 0
+ || (strncmp (secname, "code", 4) == 0
+ && (strcmp (secname, "code.0") != 0
+ || strcmp (header->type, "appl") != 0)))
+ flags |= SEC_CODE;
+
+ if (strncmp (secname, "data", 4) == 0)
+ flags |= SEC_DATA;
+
+ if (strncmp (secname, "gdbS", 4) == 0)
+ flags |= SEC_DEBUGGING;
+
+ return flags;
+}
+
+/* FIXME Crazy scheme: we could synthesize symbols from MacsBug symbols
+ in the code resources. */
+
+static const struct palmos_prc_backend_data m68k_backend_data =
+{
+ bfd_arch_m68k, bfd_mach_m68000, secflags
+};
+
+const bfd_target prc_m68k_vec =
+ PRC_TARGET_VECTOR ("prc-m68k", BFD_ENDIAN_BIG,
+ bfd_getb64, bfd_getb_signed_64, bfd_putb64,
+ bfd_getb32, bfd_getb_signed_32, bfd_putb32,
+ bfd_getb16, bfd_getb_signed_16, bfd_putb16,
+ &m68k_backend_data);
diff -urN orig-binutils-2.14/bfd/prc.c binutils-2.14/bfd/prc.c
--- orig-binutils-2.14/bfd/prc.c 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/bfd/prc.c 2005-05-31 16:30:00.515625000 +0200
@@ -0,0 +1,407 @@
+/* BFD back-end for the Palm OS PRC resource database format.
+ Copyright 2002 John Marshall. (For now.)
+ Contributed by Falch.net as.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "safe-ctype.h"
+#include "libbfd.h"
+#include "prc.h"
+
+static bfd_boolean swap_in_header
+ PARAMS ((bfd *abfd, asection *sec, struct palmos_prc_header *header));
+static bfd_boolean swap_in_resource_headers
+ PARAMS ((bfd *abfd, unsigned int n,
+ struct palmos_prc_resource_header *headers));
+
+static void add_section
+ PARAMS ((bfd *abfd, struct palmos_prc_header *header, const char *secname,
+ flagword basic_flags, unsigned long offset,
+ unsigned long lim_offset));
+static file_ptr tie_down_section
+ PARAMS ((bfd *abfd, asection *sec, file_ptr offset));
+static void compute_section_file_positions
+ PARAMS ((bfd *abfd, file_ptr offset));
+
+/* The PRC file format is documented in the "Palm File Format Specification",
+ available from <URL:http://www.palmos.com/dev/support/docs/>. */
+
+#define HEADER_SIZE 0x4e
+#define RSRCENTRY_SIZE 10
+
+/* Read from SEC if non-NULL, otherwise directly from the start of ABFD. */
+static bfd_boolean
+swap_in_header (abfd, sec, header)
+ bfd *abfd;
+ asection *sec;
+ struct palmos_prc_header *header;
+{
+ char raw[HEADER_SIZE];
+
+ if (sec)
+ {
+ if (! bfd_get_section_contents (abfd, sec, raw, 0, sizeof raw))
+ return FALSE;
+ }
+ else
+ {
+ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
+ || bfd_bread (raw, sizeof raw, abfd) != sizeof raw)
+ return FALSE;
+ }
+
+ memcpy (header->name, &raw[0], 32);
+ header->name[32] = '\0';
+
+ header->flags = bfd_h_get_16 (abfd, &raw[0x20]);
+ header->version = bfd_h_get_16 (abfd, &raw[0x22]);
+ header->create_time = bfd_h_get_32 (abfd, &raw[0x24]);
+ header->mod_time = bfd_h_get_32 (abfd, &raw[0x28]);
+ header->backup_time = bfd_h_get_32 (abfd, &raw[0x2c]);
+
+ header->appinfo_offset = bfd_h_get_32 (abfd, &raw[0x34]);
+ header->sortinfo_offset = bfd_h_get_32 (abfd, &raw[0x38]);
+
+ memcpy (header->type, &raw[0x3c], 4);
+ header->type[4] = '\0';
+
+ memcpy (header->creator, &raw[0x40], 4);
+ header->creator[4] = '\0';
+
+ header->nextlist_offset = bfd_h_get_32 (abfd, &raw[0x48]);
+ header->nresources = bfd_h_get_16 (abfd, &raw[0x4c]);
+
+ return TRUE;
+}
+
+static bfd_boolean
+swap_in_resource_headers (abfd, n, headers)
+ bfd *abfd;
+ unsigned int n;
+ struct palmos_prc_resource_header *headers;
+{
+ unsigned int i;
+
+ if (bfd_seek (abfd, (file_ptr) HEADER_SIZE, SEEK_SET) != 0)
+ return FALSE;
+
+ for (i = 0; i < n; i++)
+ {
+ char raw[RSRCENTRY_SIZE];
+ if (bfd_bread (raw, sizeof raw, abfd) != sizeof raw)
+ return FALSE;
+
+ memcpy (headers[i].type, &raw[0], 4);
+ headers[i].type[4] = '\0';
+ headers[i].id = bfd_h_get_16 (abfd, &raw[4]);
+ headers[i].offset = bfd_h_get_32 (abfd, &raw[6]);
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+printable_string_p (const char *s)
+{
+ while (*s)
+ if (! ISPRINT (*s++))
+ return FALSE;
+ return TRUE;
+}
+
+/* We use SEC_LINKER_CREATED to signify arcane processing; namely a section,
+ such as header information or appinfo, which does not correspond to a
+ real resource. */
+
+static void
+add_section (abfd, header, secname, basic_flags, offset, lim_offset)
+ bfd *abfd;
+ struct palmos_prc_header *header;
+ const char *secname;
+ flagword basic_flags;
+ unsigned long offset, lim_offset;
+{
+ asection *sec = bfd_make_section (abfd, secname);
+ if (sec == NULL)
+ return;
+
+ sec->vma = sec->lma = 0;
+ sec->filepos = offset;
+ bfd_set_section_size (abfd, sec, lim_offset - offset);
+ /* FIXME?? sec->_raw_size = lim_offset - offset; */
+
+ sec->flags = (SEC_HAS_CONTENTS | basic_flags
+ | (*(backend_data (abfd)->secflags)) (header, secname));
+
+ if (header->flags & 0x0002)
+ sec->flags |= SEC_READONLY;
+}
+
+bfd_boolean
+_bfd_prc_mkobject (abfd)
+ bfd *abfd ATTRIBUTE_UNUSED;
+{
+ return TRUE;
+}
+
+const bfd_target *
+_bfd_prc_object_p (abfd)
+ bfd *abfd;
+{
+ struct palmos_prc_header h;
+ struct palmos_prc_resource_header *resource = NULL;
+ unsigned int i;
+ struct stat statbuf;
+
+ if (! swap_in_header (abfd, NULL, &h))
+ goto invalid_prc;
+
+ resource = bfd_malloc ((h.nresources + 1)
+ * sizeof (struct palmos_prc_resource_header));
+ if (resource == NULL)
+ goto failed;
+
+ if (! swap_in_resource_headers (abfd, h.nresources, resource))
+ goto invalid_prc;
+
+ if (bfd_stat (abfd, &statbuf) < 0)
+ goto failed;
+
+ resource[h.nresources].offset = statbuf.st_size;
+
+ /* The PRC format has no useful magic numbers, so checking that a file
+ is a valid .prc is a black art. We check that:
+ - name, type, creator, and resource types are all printable ASCII;
+ - flags includes 0x1;
+ - next_record_list is 0;
+ - app_info, sort_info (when they are non-zero), section pointers are
+ strictly ascending. */
+
+ if (! (printable_string_p (h.name)
+ && (h.flags & 0x0001)
+ && printable_string_p (h.type)
+ && printable_string_p (h.creator)
+ && h.nextlist_offset == 0
+ && (h.appinfo_offset == 0 || h.sortinfo_offset == 0
+ || h.appinfo_offset < h.sortinfo_offset)
+ && (h.sortinfo_offset == 0 || h.sortinfo_offset < resource[0].offset)))
+ goto invalid_prc;
+
+ for (i = 0; i < h.nresources; i++)
+ if (! (printable_string_p (resource[i].type)
+ && resource[i].offset < resource[i + 1].offset))
+ goto invalid_prc;
+
+ add_section (abfd, &h, ".header", SEC_LINKER_CREATED, 0, HEADER_SIZE);
+
+ if (h.appinfo_offset)
+ add_section (abfd, &h, ".appinfo",
+ SEC_LINKER_CREATED | SEC_ALLOC | SEC_LOAD, h.appinfo_offset,
+ h.sortinfo_offset? h.sortinfo_offset : resource[0].offset);
+
+ if (h.sortinfo_offset)
+ add_section (abfd, &h, ".sortinfo",
+ SEC_LINKER_CREATED | SEC_ALLOC | SEC_LOAD, h.sortinfo_offset,
+ resource[0].offset);
+
+ for (i = 0; i < h.nresources; i++)
+ {
+ char secnamebuf[32];
+ char *secname;
+
+ sprintf (secnamebuf, "%s.%u", resource[i].type, resource[i].id);
+
+ /* FIXME: If this ever fails, it'll leak the previous names. */
+ secname = bfd_alloc (abfd, strlen (secnamebuf) + 1);
+ if (secname == NULL)
+ goto failed;
+
+ strcpy (secname, secnamebuf);
+ add_section (abfd, &h, secname, SEC_ALLOC | SEC_LOAD,
+ resource[i].offset, resource[i + 1].offset);
+ }
+
+ if (strcmp (h.type, "appl") == 0)
+ abfd->flags |= EXEC_P;
+ else if (strcmp (h.type, "libr") == 0 || strcmp (h.type, "GLib") == 0)
+ abfd->flags |= DYNAMIC;
+
+ bfd_default_set_arch_mach (abfd,
+ backend_data (abfd)->arch,
+ backend_data (abfd)->mach);
+
+ /* FIXME */
+ abfd->symcount = 0;
+
+ return abfd->xvec;
+
+ /* Otherwise ABFD was not recognized as being in PRC format. Jumps to
+ <invalid_prc> are asking for a wrong_format error; jumps to <failed>
+ imply that something major has just failed and has already set a
+ suitable error code. */
+
+invalid_prc:
+ bfd_set_error (bfd_error_wrong_format);
+
+failed:
+ if (resource)
+ free (resource);
+
+ return NULL;
+}
+
+static file_ptr
+tie_down_section (abfd, sec, offset)
+ bfd *abfd ATTRIBUTE_UNUSED;
+ asection *sec;
+ file_ptr offset;
+{
+ sec->filepos = offset;
+ return offset + bfd_section_size (abfd, sec);
+}
+
+static void
+compute_section_file_positions (abfd, offset)
+ bfd *abfd;
+ file_ptr offset;
+{
+ asection *sec;
+
+ sec = bfd_get_section_by_name (abfd, ".appinfo");
+ if (sec)
+ offset = tie_down_section (abfd, sec, offset);
+
+ sec = bfd_get_section_by_name (abfd, ".sortinfo");
+ if (sec)
+ offset = tie_down_section (abfd, sec, offset);
+
+ for (sec = abfd->sections; sec != NULL; sec = sec->next)
+ if (! (sec->flags & SEC_LINKER_CREATED))
+ offset = tie_down_section (abfd, sec, offset);
+}
+
+bfd_boolean
+_bfd_prc_write_object_contents (abfd)
+ bfd *abfd;
+{
+ /* FIXME This is not yet implemented. */
+ compute_section_file_positions (abfd, HEADER_SIZE);
+ return TRUE;
+}
+
+asymbol *
+_bfd_prc_make_empty_symbol (abfd)
+ bfd *abfd;
+{
+ asymbol *sym = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol));
+ if (sym)
+ sym->the_bfd = abfd;
+ return sym;
+}
+
+long
+_bfd_prc_get_symtab_upper_bound (abfd)
+ bfd *abfd;
+{
+ return (bfd_get_symcount (abfd) + 1) * sizeof (asymbol *);
+}
+
+long
+_bfd_prc_get_symtab (abfd, alocation)
+ bfd *abfd ATTRIBUTE_UNUSED;
+ asymbol **alocation ATTRIBUTE_UNUSED;
+{
+ return 0;
+}
+
+void
+_bfd_prc_get_symbol_info (abfd, symbol, ret)
+ bfd *abfd ATTRIBUTE_UNUSED;
+ asymbol *symbol;
+ symbol_info *ret;
+{
+ bfd_symbol_info (symbol, ret);
+}
+
+struct flag_meaning
+{
+ unsigned int mask;
+ const char *name;
+};
+
+/* xgettext: These names should not be translated, because they correspond
+ to constants defined in Palm OS SDKs. */
+
+static const struct flag_meaning meanings[] =
+{
+ { 0x0001, "RESOURCE" },
+ { 0x0002, "READONLY" },
+ { 0x0004, "APPINFO-DIRTY" },
+ { 0x0008, "BACKUP" },
+ { 0x0010, "OK-TO-INSTALL-NEWER" },
+ { 0x0020, "RESET-AFTER-INSTALL" },
+ { 0x0040, "COPY-PREVENTION" },
+ { 0x0080, "STREAM" },
+ { 0x0100, "HIDDEN" },
+ { 0x0200, "LAUNCHABLE-DATA" },
+ { 0x0400, "RECYCLABLE" },
+ { 0x0800, "BUNDLE" },
+ { 0x8000, "OPEN" },
+ { 0, NULL }
+};
+
+/* FIXME: internationalise me! */
+
+bfd_boolean
+_bfd_prc_bfd_print_private_bfd_data (abfd, ptr)
+ bfd *abfd;
+ PTR ptr;
+{
+ FILE *f = (FILE *) ptr;
+ struct palmos_prc_header header;
+ unsigned int flags;
+ const struct flag_meaning *meaning;
+
+ swap_in_header (abfd, bfd_get_section_by_name (abfd, ".header"), &header);
+ flags = header.flags;
+
+ fprintf (f, "\nDatabase Header:\n");
+
+ fprintf (f, " Name: %s\n", header.name);
+ fprintf (f, " Flags: ");
+
+ for (meaning = meanings; meaning->name; meaning++)
+ if (flags & meaning->mask)
+ {
+ fprintf (f, " %s", meaning->name);
+ flags &= ~meaning->mask;
+ }
+
+ if (flags != 0)
+ fprintf (f, " 0x%x", flags);
+
+ fprintf (f, "\n");
+
+ fprintf (f, " Type: %s\n", header.type);
+ fprintf (f, " Creator: %s\n", header.creator);
+ fprintf (f, " Version: %u\n", header.version);
+
+ /* FIXME: Output the dates too, if we can be bothered converting from
+ Palm OS's seconds-since-1904-01-01T00:00:00 format. */
+
+ return TRUE;
+}
diff -urN orig-binutils-2.14/bfd/prc.h binutils-2.14/bfd/prc.h
--- orig-binutils-2.14/bfd/prc.h 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/bfd/prc.h 2005-05-31 16:30:00.531250000 +0200
@@ -0,0 +1,134 @@
+/* BFD back-end for the Palm OS PRC resource database format.
+ Copyright 2002 John Marshall. (For now.)
+ Contributed by Falch.net as.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+
+struct palmos_prc_header
+{
+ char name[33];
+ unsigned int flags, version;
+ unsigned long create_time, mod_time, backup_time;
+ char type[5], creator[5];
+ unsigned long appinfo_offset, sortinfo_offset, nextlist_offset;
+ unsigned int nresources;
+};
+
+struct palmos_prc_resource_header
+{
+ char type[5];
+ unsigned int id;
+ unsigned long offset;
+};
+
+#define backend_data(abfd) \
+ ((const struct palmos_prc_backend_data *) (abfd)->xvec->backend_data)
+
+struct palmos_prc_backend_data
+{
+ enum bfd_architecture arch;
+ unsigned long mach;
+ flagword (*secflags)
+ PARAMS ((const struct palmos_prc_header *, const char *));
+};
+
+extern bfd_boolean _bfd_prc_mkobject PARAMS ((bfd *));
+extern const bfd_target *_bfd_prc_object_p PARAMS ((bfd *));
+extern bfd_boolean _bfd_prc_write_object_contents PARAMS ((bfd *));
+
+#define _bfd_prc_bfd_copy_private_bfd_data \
+ _bfd_generic_bfd_copy_private_bfd_data
+#define _bfd_prc_bfd_merge_private_bfd_data \
+ _bfd_generic_bfd_merge_private_bfd_data
+#define _bfd_prc_bfd_copy_private_section_data \
+ _bfd_generic_bfd_copy_private_section_data
+#define _bfd_prc_bfd_copy_private_symbol_data \
+ _bfd_generic_bfd_copy_private_symbol_data
+#define _bfd_prc_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
+extern bfd_boolean _bfd_prc_bfd_print_private_bfd_data PARAMS ((bfd *, PTR));
+
+extern long _bfd_prc_get_symtab_upper_bound PARAMS ((bfd *));
+extern long _bfd_prc_get_symtab PARAMS ((bfd *, asymbol **));
+extern asymbol *_bfd_prc_make_empty_symbol PARAMS ((bfd *));
+#define _bfd_prc_print_symbol _bfd_nosymbols_print_symbol
+extern void _bfd_prc_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
+#define _bfd_prc_bfd_is_local_label_name bfd_generic_is_local_label_name
+#define _bfd_prc_get_lineno _bfd_nosymbols_get_lineno
+#define _bfd_prc_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define _bfd_prc_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
+#define _bfd_prc_read_minisymbols _bfd_generic_read_minisymbols
+#define _bfd_prc_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
+
+#define PRC_TARGET_VECTOR(name, body_endianness, \
+ getu64, gets64, put64, \
+ getu32, gets32, put32, \
+ getu16, gets16, put16, \
+ backend_data) \
+ { \
+ (name), \
+ bfd_target_unknown_flavour, \
+ (body_endianness), \
+ BFD_ENDIAN_BIG, /* All PRC headers are big endian. */ \
+ EXEC_P | DYNAMIC, /* plausible BFD flags */ \
+ (SEC_HAS_CONTENTS | SEC_LINKER_CREATED | SEC_ALLOC \
+ | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA \
+ | SEC_DEBUGGING), /* plausible section flags */ \
+ 0, /* symbol prefix */ \
+ ' ', /* archive pad character */ \
+ 16, /* archive member name length */ \
+ /* Body swapping. */ \
+ (getu64), (gets64), (put64), \
+ (getu32), (gets32), (put32), \
+ (getu16), (gets16), (put16), \
+ /* Header swapping. */ \
+ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \
+ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \
+ bfd_getb16, bfd_getb_signed_16, bfd_putb16, \
+ /* bfd_check_format */ \
+ { \
+ _bfd_dummy_target, \
+ _bfd_prc_object_p, \
+ _bfd_dummy_target, \
+ _bfd_dummy_target \
+ }, \
+ /* bfd_set_format */ \
+ { \
+ bfd_false, \
+ _bfd_prc_mkobject, \
+ bfd_false, \
+ bfd_false \
+ }, \
+ /* bfd_write_contents */ \
+ { \
+ bfd_false, \
+ _bfd_prc_write_object_contents, \
+ bfd_false, \
+ bfd_false \
+ }, \
+ BFD_JUMP_TABLE_GENERIC (_bfd_generic), \
+ BFD_JUMP_TABLE_COPY (_bfd_prc), \
+ BFD_JUMP_TABLE_CORE (_bfd_nocore), \
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive), \
+ BFD_JUMP_TABLE_SYMBOLS (_bfd_prc), \
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), \
+ BFD_JUMP_TABLE_WRITE (_bfd_generic), \
+ BFD_JUMP_TABLE_LINK (_bfd_nolink), \
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), \
+ NULL, /* No alternative endianness backend. */ \
+ (PTR) (backend_data) \
+ }
diff -urN orig-binutils-2.14/bfd/targets.c binutils-2.14/bfd/targets.c
--- orig-binutils-2.14/bfd/targets.c 2005-05-31 16:25:57.953125000 +0200
+++ binutils-2.14/bfd/targets.c 2005-05-31 16:30:00.562500000 +0200
@@ -678,6 +678,8 @@
extern const bfd_target pef_xlib_vec;
extern const bfd_target pmac_xcoff_vec;
extern const bfd_target ppcboot_vec;
+extern const bfd_target prc_littlearm_vec;
+extern const bfd_target prc_m68k_vec;
extern const bfd_target riscix_vec;
extern const bfd_target rs6000coff64_vec;
extern const bfd_target rs6000coff_vec;
@@ -1015,6 +1017,11 @@
#endif
&ppcboot_vec,
#if 0
+ /* Palm OS PRC format has no useful magic numbers. */
+ &prc_littlearm_vec,
+ &prc_m68k_vec,
+#endif
+#if 0
/* We have no way of distinguishing these from other a.out variants. */
&riscix_vec,
#endif
diff -urN orig-binutils-2.14/config.sub binutils-2.14/config.sub
--- orig-binutils-2.14/config.sub 2005-05-31 16:26:02.828125000 +0200
+++ binutils-2.14/config.sub 2005-05-31 16:30:00.562500000 +0200
@@ -287,6 +287,10 @@
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
+ m68k-palmos)
+ basic_machine=m68k-unknown
+ os=-palmos
+ ;;
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
diff -urN orig-binutils-2.14/gas/config/m68k-parse.h binutils-2.14/gas/config/m68k-parse.h
--- orig-binutils-2.14/gas/config/m68k-parse.h 2005-05-31 16:26:04.015625000 +0200
+++ binutils-2.14/gas/config/m68k-parse.h 2005-05-31 16:30:00.593750000 +0200
@@ -240,12 +240,13 @@
int scale;
};
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
/* The type of a PIC expression. */
enum pic_relocation
{
pic_none, /* not pic */
+ pic_endrel, /* @END (for COFF_RELEND_RELOC) */
pic_plt_pcrel, /* @PLTPC */
pic_got_pcrel, /* @GOTPC */
pic_plt_off, /* @PLT */
@@ -260,7 +261,7 @@
/* The size to use. */
enum m68k_size size;
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
/* The type of pic relocation if any. */
enum pic_relocation pic_reloc;
#endif
diff -urN orig-binutils-2.14/gas/config/m68k-parse.y binutils-2.14/gas/config/m68k-parse.y
--- orig-binutils-2.14/gas/config/m68k-parse.y 2005-05-31 16:26:04.031250000 +0200
+++ binutils-2.14/gas/config/m68k-parse.y 2005-05-31 16:30:00.609375000 +0200
@@ -974,7 +974,7 @@
tail = 2;
}
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
{
/* Look for @PLTPC, etc. */
char *cp;
@@ -1006,6 +1006,11 @@
yylval.exp.pic_reloc = pic_got_off;
tail += 4;
}
+ else if (strncmp (cp - 4, "@END", 4) == 0)
+ {
+ yylval.exp.pic_reloc = pic_endrel;
+ tail += 4;
+ }
}
}
#endif
diff -urN orig-binutils-2.14/gas/config/obj-coff.h binutils-2.14/gas/config/obj-coff.h
--- orig-binutils-2.14/gas/config/obj-coff.h 2005-05-31 16:26:04.140625000 +0200
+++ binutils-2.14/gas/config/obj-coff.h 2005-05-31 16:30:00.640625000 +0200
@@ -25,6 +25,9 @@
#define OBJ_COFF 1
+#define COFF_RELEND_RELOC
+#define NEED_FX_R_TYPE
+
#ifndef BFD_ASSEMBLER
#define WORKING_DOT_WORD
diff -urN orig-binutils-2.14/gas/config/tc-arm.c binutils-2.14/gas/config/tc-arm.c
--- orig-binutils-2.14/gas/config/tc-arm.c 2005-05-31 16:26:05.031250000 +0200
+++ binutils-2.14/gas/config/tc-arm.c 2005-05-31 16:35:39.828125000 +0200
@@ -10219,7 +10219,7 @@
|| (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only. */
flags |= F_SOFT_FLOAT;
/* Using VFP conventions (even if soft-float). */
- if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;
+ /*if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;*/
#if defined OBJ_ELF
if (cpu_variant & ARM_CEXT_MAVERICK)
diff -urN orig-binutils-2.14/gas/config/tc-m68k.c binutils-2.14/gas/config/tc-m68k.c
--- orig-binutils-2.14/gas/config/tc-m68k.c 2005-05-31 16:26:06.390625000 +0200
+++ binutils-2.14/gas/config/tc-m68k.c 2005-05-31 16:30:00.671875000 +0200
@@ -216,7 +216,7 @@
significance of some values (in the branch instruction, for
example). */
int pcrel_fix;
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
/* Whether this expression needs special pic relocation, and if
so, which. */
enum pic_relocation pic_reloc;
@@ -284,7 +284,7 @@
the_ins.reloc[the_ins.nrel].exp = exp->exp;
the_ins.reloc[the_ins.nrel].wid = width;
the_ins.reloc[the_ins.nrel].pcrel_fix = pc_fix;
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
the_ins.reloc[the_ins.nrel].pic_reloc = exp->pic_reloc;
#endif
the_ins.reloc[the_ins.nrel++].pcrel = pc_rel;
@@ -692,6 +692,11 @@
tc_coff_fix2rtype (fixP)
fixS *fixP;
{
+#ifdef COFF_RELEND_RELOC
+ if (fixP->fx_r_type != NO_RELOC)
+ return fixP->fx_r_type;
+#endif
+
if (fixP->fx_tcbit && fixP->fx_size == 4)
return R_RELLONG_NEG;
#ifdef NO_PCREL_RELOCS
@@ -871,8 +876,12 @@
}
#else /* !OBJ_ELF */
-
+#ifdef COFF_RELEND_RELOC
+#define get_reloc_code(SIZE,PCREL,PIC) \
+ (((PIC) == pic_endrel && (SIZE) == 2)? R_RELENDWORD : NO_RELOC)
+#else
#define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
+#endif /* COFF_RELEND_RELOC */
#define relaxable_symbol(symbol) 1
diff -urN orig-binutils-2.14/gas/configure binutils-2.14/gas/configure
--- orig-binutils-2.14/gas/configure 2005-05-31 16:26:08.062500000 +0200
+++ binutils-2.14/gas/configure 2005-05-31 16:30:00.718750000 +0200
@@ -2411,6 +2411,7 @@
arm-*-pe | thumb-*-pe) fmt=coff em=pe ;;
arm-*-riscix*) fmt=aout em=riscix ;;
arm-*-vxworks) fmt=coff ;;
+ arm-*-palmos*) fmt=elf ;;
avr-*-*) fmt=elf ;;
@@ -2557,6 +2558,7 @@
m68k-*-openbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
m68k-apple-aux*) fmt=coff em=aux ;;
m68k-*-psos*) fmt=elf em=psos;;
+ m68k-*-palmos*) fmt=coff ;;
m88k-motorola-sysv3*) fmt=coff em=delt88 ;;
m88k-*-coff*) fmt=coff ;;
diff -urN orig-binutils-2.14/gas/configure.in binutils-2.14/gas/configure.in
--- orig-binutils-2.14/gas/configure.in 2005-05-31 16:26:08.078125000 +0200
+++ binutils-2.14/gas/configure.in 2005-05-31 16:30:00.687500000 +0200
@@ -205,6 +205,7 @@
arm-*-pe | thumb-*-pe) fmt=coff em=pe ;;
arm-*-riscix*) fmt=aout em=riscix ;;
arm-*-vxworks) fmt=coff ;;
+ arm-*-palmos*) fmt=elf ;;
avr-*-*) fmt=elf ;;
@@ -347,6 +348,7 @@
m68k-*-openbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
m68k-apple-aux*) fmt=coff em=aux ;;
m68k-*-psos*) fmt=elf em=psos;;
+ m68k-*-palmos*) fmt=coff ;;
m88k-motorola-sysv3*) fmt=coff em=delt88 ;;
m88k-*-coff*) fmt=coff ;;
diff -urN orig-binutils-2.14/gas/m68k-parse.c binutils-2.14/gas/m68k-parse.c
--- orig-binutils-2.14/gas/m68k-parse.c 2005-05-31 16:26:09.921875000 +0200
+++ binutils-2.14/gas/m68k-parse.c 2005-05-31 16:30:00.734375000 +0200
@@ -2175,7 +2175,7 @@
tail = 2;
}
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined COFF_RELEND_RELOC
{
/* Look for @PLTPC, etc. */
char *cp;
@@ -2207,6 +2207,11 @@
yylval.exp.pic_reloc = pic_got_off;
tail += 4;
}
+ else if (strncmp (cp - 4, "@END", 4) == 0)
+ {
+ yylval.exp.pic_reloc = pic_endrel;
+ tail += 4;
+ }
}
}
#endif
diff -urN orig-binutils-2.14/include/coff/internal.h binutils-2.14/include/coff/internal.h
--- orig-binutils-2.14/include/coff/internal.h 2005-05-31 16:26:51.875000000 +0200
+++ binutils-2.14/include/coff/internal.h 2005-05-31 16:30:00.734375000 +0200
@@ -626,6 +626,10 @@
#define R_LVRT16 132
#define R_VRT32 133
+/* This (m68k) reloc evaluates to a 16bit offset, just like R_RELWORD, but
+ also implicitly subtracts the value of `edata', so that effectively the
+ origin is at the end of the memory region intead of the start. */
+#define R_RELENDWORD 21
/* This reloc identifies mov.b instructions with a 16bit absolute
address. The linker tries to turn insns with this reloc into
diff -urN orig-binutils-2.14/ld/Makefile.am binutils-2.14/ld/Makefile.am
--- orig-binutils-2.14/ld/Makefile.am 2005-05-31 16:26:54.515625000 +0200
+++ binutils-2.14/ld/Makefile.am 2005-05-31 16:30:00.750000000 +0200
@@ -125,6 +125,7 @@
earmelf_oabi.o \
earmnto.o \
earmnbsd.o \
+ earmpalmos.o \
earmpe.o \
eavr1200.o \
eavr23xx.o \
@@ -242,6 +243,7 @@
em68klinux.o \
em68klynx.o \
em68knbsd.o \
+ em68kpalmos.o \
em68kpsos.o \
em88kbcs.o \
emcorepe.o \
@@ -502,6 +504,9 @@
earmpe.c: $(srcdir)/emulparams/armpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} armpe "$(tdir_armpe)"
+earmpalmos.c: $(srcdir)/emulparams/armpalmos.sh $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/armpalmos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armpalmos "$(tdir_armpalmos)"
eavr85xx.c: $(srcdir)/emulparams/avr85xx.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32avr.sc \
${GEN_DEPENDS}
@@ -981,6 +986,9 @@
em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
+em68kpalmos.c: $(srcdir)/emulparams/m68kpalmos.sh \
+ $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kpalmos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kpalmos "$(tdir_m68kpalmos)"
em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
diff -urN orig-binutils-2.14/ld/Makefile.in binutils-2.14/ld/Makefile.in
--- orig-binutils-2.14/ld/Makefile.in 2005-05-31 16:26:54.515625000 +0200
+++ binutils-2.14/ld/Makefile.in 2005-05-31 16:30:00.765625000 +0200
@@ -239,6 +239,7 @@
earmelf_oabi.o \
earmnto.o \
earmnbsd.o \
+ earmpalmos.o \
earmpe.o \
eavr1200.o \
eavr23xx.o \
@@ -356,6 +357,7 @@
em68klinux.o \
em68klynx.o \
em68knbsd.o \
+ em68kpalmos.o \
em68kpsos.o \
em88kbcs.o \
emcorepe.o \
@@ -1228,6 +1230,9 @@
earmpe.c: $(srcdir)/emulparams/armpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} armpe "$(tdir_armpe)"
+earmpalmos.c: $(srcdir)/emulparams/armpalmos.sh $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/armpalmos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armpalmos "$(tdir_armpalmos)"
eavr85xx.c: $(srcdir)/emulparams/avr85xx.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32avr.sc \
${GEN_DEPENDS}
@@ -1707,6 +1712,9 @@
em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
+em68kpalmos.c: $(srcdir)/emulparams/m68kpalmos.sh \
+ $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kpalmos.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kpalmos "$(tdir_m68kpalmos)"
em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
diff -urN orig-binutils-2.14/ld/configure.tgt binutils-2.14/ld/configure.tgt
--- orig-binutils-2.14/ld/configure.tgt 2005-05-31 16:26:53.312500000 +0200
+++ binutils-2.14/ld/configure.tgt 2005-05-31 16:30:00.765625000 +0200
@@ -247,6 +247,7 @@
arm*-*-linux-gnu*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
arm*-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
arm*-*-conix*) targ_emul=armelf ;;
+arm*-*-palmos*) targ_emul=armpalmos; targ_extra_emuls=armelf ;;
thumb-*-linux-gnu* | thumb-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
strongarm-*-coff) targ_emul=armcoff ;;
strongarm-*-elf) targ_emul=armelf ;;
@@ -364,6 +365,7 @@
m68*-*-psos*) targ_emul=m68kpsos ;;
m68*-*-rtemscoff*) targ_emul=m68kcoff ;;
m68*-*-rtems*) targ_emul=m68kelf ;;
+m68*-*-palmos*) targ_emul=m68kpalmos ;;
hppa*64*-*-linux-gnu*) targ_emul=hppa64linux ;;
hppa*64*-*) targ_emul=elf64hppa ;;
hppa*-*-linux-gnu*) targ_emul=hppalinux ;;
diff -urN orig-binutils-2.14/ld/emulparams/armpalmos.sh binutils-2.14/ld/emulparams/armpalmos.sh
--- orig-binutils-2.14/ld/emulparams/armpalmos.sh 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/ld/emulparams/armpalmos.sh 2005-05-31 16:30:00.765625000 +0200
@@ -0,0 +1,6 @@
+. ${srcdir}/emulparams/armelf.sh
+SCRIPT_NAME=armpalmos
+
+GENERATE_COMBRELOC_SCRIPT=yes
+unset GENERATE_SHLIB_SCRIPT
+unset ENTRY
diff -urN orig-binutils-2.14/ld/emulparams/m68kpalmos.sh binutils-2.14/ld/emulparams/m68kpalmos.sh
--- orig-binutils-2.14/ld/emulparams/m68kpalmos.sh 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/ld/emulparams/m68kpalmos.sh 2005-05-31 16:30:00.781250000 +0200
@@ -0,0 +1,4 @@
+SCRIPT_NAME=m68kpalmos
+OUTPUT_FORMAT="coff-m68k"
+ARCH=m68k
+TEMPLATE_NAME=m68kcoff
diff -urN orig-binutils-2.14/ld/emultempl/m68kcoff.em binutils-2.14/ld/emultempl/m68kcoff.em
--- orig-binutils-2.14/ld/emultempl/m68kcoff.em 2005-05-31 16:26:53.718750000 +0200
+++ binutils-2.14/ld/emultempl/m68kcoff.em 2005-05-31 16:30:00.796875000 +0200
@@ -88,22 +88,25 @@
{
asection *relsec;
- relsec = bfd_make_section (abfd, ".emreloc");
+ relsec = bfd_make_section (abfd, ".reloc");
if (relsec == NULL
|| ! bfd_set_section_flags (abfd, relsec,
- (SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS
+ (SEC_HAS_CONTENTS
| SEC_IN_MEMORY))
|| ! bfd_set_section_alignment (abfd, relsec, 2)
|| ! bfd_set_section_size (abfd, relsec,
datasec->reloc_count * 12))
- einfo ("%F%B: can not create .emreloc section: %E\n");
+ einfo ("%F%B: can not create .reloc section: %E\n");
}
/* Double check that all other data sections are empty, as is
required for embedded PIC code. */
+#if 0
+ /* This is NOT required for embedded PIC. In fact, since we have
+ sections like [be]hook which can be data sections on input but
+ are output in the .text section, this is wrong wrong wrong. */
bfd_map_over_sections (abfd, check_sections, (PTR) datasec);
+#endif
}
}
@@ -146,7 +149,7 @@
if (datasec == NULL || datasec->reloc_count == 0)
continue;
- relsec = bfd_get_section_by_name (abfd, ".emreloc");
+ relsec = bfd_get_section_by_name (abfd, ".reloc");
ASSERT (relsec != NULL);
if (! bfd_m68k_coff_create_embedded_relocs (abfd, &link_info,
diff -urN orig-binutils-2.14/ld/scripttempl/armpalmos.sc binutils-2.14/ld/scripttempl/armpalmos.sc
--- orig-binutils-2.14/ld/scripttempl/armpalmos.sc 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/ld/scripttempl/armpalmos.sc 2005-05-31 16:30:00.796875000 +0200
@@ -0,0 +1,22 @@
+cat <<EOF
+OUTPUT_FORMAT ("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH ("${ARCH}")
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+
+/* This is a pathetically simple linker script that is only of use for
+ building Palm OS 5 armlets, namely stand-alone code that has no global
+ data or other complications. */
+
+SECTIONS
+{
+ .text :
+ {
+ *(.text .rodata)
+ ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+ }
+
+ .disposn : { *(.disposn) }
+}
+EOF
diff -urN orig-binutils-2.14/ld/scripttempl/m68kpalmos.sc binutils-2.14/ld/scripttempl/m68kpalmos.sc
--- orig-binutils-2.14/ld/scripttempl/m68kpalmos.sc 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.14/ld/scripttempl/m68kpalmos.sc 2005-05-31 16:30:00.812500000 +0200
@@ -0,0 +1,76 @@
+# Note that genscripts.sh strips blank lines, but converts lines
+# matching ^\t$ into blank lines on output. So we use the latter here.
+
+cat <<EOF
+OUTPUT_FORMAT ("${OUTPUT_FORMAT}")
+
+${LIB_SEARCH_DIRS}
+
+/* The LENGTH of coderes determines how large the .text section (which winds
+ up as the final database's main 'code' resource) may be before producing
+ linker errors. Typical values on Palm OS are "about 32K" and "about 64K":
+
+ 32770 is the largest .text section whose start and end can be reached from
+ each other via a 16 bit signed m68k jump (although only the first 32K can
+ be called from other sections, that's enough because no function can start
+ beyond there because it must end in rts);
+
+ 64720 is the largest resource allowable all the way back to Palm OS 1.0;
+
+ 65505 is the largest resource allowable on Palm OS 3.0 and higher. */
+
+MEMORY
+{
+ coderes : ORIGIN = 0x0, LENGTH = 32770
+ datares : ORIGIN = 0x0, LENGTH = 32767
+
+ trap_region : ORIGIN = 0x1000000, LENGTH = 2
+ disposition_region : ORIGIN = 0x1000010, LENGTH = 6
+}
+
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ . = ALIGN(4);
+ bhook_start = .;
+ *(bhook)
+ bhook_end = .;
+ . = ALIGN(4);
+ ehook_start = .;
+ *(ehook)
+ ehook_end = .;
+EOF
+if [ -n "${CONSTRUCTING}" ]; then cat <<EOF
+ . = ALIGN(4);
+ ctors_start = .;
+ *(.ctors)
+ ctors_end = .;
+ . = ALIGN(4);
+ dtors_start = .;
+ *(.dtors)
+ dtors_end = .;
+EOF
+fi
+cat <<EOF
+ } > coderes
+ .data :
+ {
+ data_start = .;
+ *(.data)
+ *(.gcc_exc)
+ } > datares
+ .bss :
+ {
+ bss_start = .;
+ *(.bss)
+ *(COMMON)
+ } > datares
+ end = ALIGN( 4 );
+ edata = ALIGN( 4 );
+
+ .trap : { *(.trap) } > trap_region
+ .disposn : { *(.disposn) } > disposition_region
+}
+EOF
diff -urN orig-binutils-2.14/libiberty/fnmatch.c binutils-2.14/libiberty/fnmatch.c
--- orig-binutils-2.14/libiberty/fnmatch.c 2005-05-31 16:27:00.562500000 +0200
+++ binutils-2.14/libiberty/fnmatch.c 2005-05-31 16:30:00.812500000 +0200
@@ -55,7 +55,9 @@
program understand `configure --with-gnu-libc' and omit the object files,
it is simpler to just do this in the source for each such file. */
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+/* [PRC-TOOLS-LOCAL] It's not a waste when you're trying to avoid the New!
+ Improved! glibc-2.2.4 fnmatch GLIBC@2.2.3 dependency. Hack on, dude. */
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__) || 1
#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)