binutils-2.14.palmos.diff
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:55k
源码类别:

Windows CE

开发平台:

C/C++

  1. diff -urN orig-binutils-2.14/ChangeLogs.palmos binutils-2.14/ChangeLogs.palmos
  2. --- orig-binutils-2.14/ChangeLogs.palmos 1970-01-01 01:00:00.000000000 +0100
  3. +++ binutils-2.14/ChangeLogs.palmos 2005-05-31 16:30:00.343750000 +0200
  4. @@ -0,0 +1,81 @@
  5. +Collect all the changelog entries here for use on the eventual submission
  6. +to the FSF:
  7. +
  8. +(Many of these log entries no longer relate to the current form of the
  9. +patches.  But at the moment they are still of historical interest to us.)
  10. +
  11. +bfd/ChangeLog
  12. +=============
  13. +
  14. +2002-01-09  John Marshall  <johnm@falch.net>
  15. +
  16. + * cofflink.c (_bfd_coff_generic_relocate_section): Removed handling
  17. + of R_RELENDWORD from here...
  18. + * coff-m68k.c (m68kcoff_rtype_to_howto): ...handling it here instead.
  19. + (m68kcoff_global_data_size): New helper function.
  20. +
  21. +Tue Feb  1 21:54:44 2000  John Marshall  <john_w_marshall@palm.com>
  22. +
  23. + * coff-m68k.c (_bfd_m68kcoff_create_embedded_relocs,
  24. + coff_m68k_bfd_print_private_bfd_data), emultempl/m68kcoff.em:
  25. + Pad the .reloc records to 12 bytes.
  26. + * coffcode.h (coff_new_section_hook): Don't try to change .reloc's
  27. + alignment.
  28. +
  29. +Thu Sep 24 14:24:36 1998  John Marshall  <jmarshall@acm.org>
  30. +
  31. +      * coff-m68k.c (m68k_rtype2howto, m68k_howto2rtype,
  32. +      m68k_reloc_type_lookup): New reloc type R_RELENDWORD.
  33. +      * cofflink.c (_bfd_coff_generic_relocate_section): Likewise.
  34. +
  35. +Sat Sep  5 14:10:23 1998  John Marshall  <jmarshall@acm.org>
  36. +
  37. +      * cofflink.c (_bfd_coff_generic_relocate_section): Fill in .dreloc
  38. +      section, somewhat similarly to base file.
  39. +
  40. +
  41. +gas/ChangeLog
  42. +=============
  43. +
  44. +2002-01-09  John Marshall  <johnm@falch.net>
  45. +
  46. + * config/obj-elf.h, config/tc-m68k.h: Reorganised the setting of
  47. + NEED_FX_R_TYPE and SPECIAL_PIC_RELOC (now renamed COFF_RELEND_RELOC)
  48. + so as to avoid touching these two files.
  49. +
  50. +Tue Oct 13 01:30:47 1998  John Marshall  <jmarshall@acm.org>
  51. +
  52. +      * config/m68k-parse.h, config/m68k-parse.y, config/tc-m68k.c: Use
  53. +      SPECIAL_PIC_RELOC instead of OBJ_ELF to activate special PIC
  54. +      relocation code.
  55. +      * config/obj-elf.h, config/obj-coff.h: Define SPECIAL_PIC_RELOC.
  56. +      * config/tc-m68k.h [SPECIAL_PIC_RELOC]: Define NEED_FX_R_TYPE.
  57. +
  58. +      * config/m68k-parse.h: New pic_relocation type pic_endrel.
  59. +      * config/m68k-parse.y: Encode `symbol@END' as pic_endrel.
  60. +
  61. +      * config/tc-m68k.c (get_reloc_code) [SPECIAL_PIC_RELOC]: Set
  62. +      fx_r_type if the reloc has a special pic type.
  63. +      (tc_coff_fix2rtype) [SPECIAL_PIC_RELOC]: Use fx_r_type if set.
  64. +
  65. +
  66. +include/coff/ChangeLog
  67. +======================
  68. +
  69. +Sat Sep  5 21:38:15 1998  John Marshall  <jmarshall@acm.org>
  70. +
  71. +      * internal.h (R_RELENDWORD): Define.
  72. +
  73. +
  74. +ld/ChangeLog
  75. +============
  76. +
  77. +Sat Sep  5 14:10:23 1998  John Marshall  <jmarshall@acm.org>
  78. +
  79. +      * emultempl/m68kcoff.em: New file, based on generic.em, with a
  80. +      custom gld${EMULATION_NAME}_after_open that creates a .dreloc
  81. +      section for input bfds which need it, if --embedded-relocs is used.
  82. +      * emulparams/m68kcoff.sh (TEMPLATE_NAME): Set to m68kcoff.
  83. +      * Makefile.am (em68kcoff.c): Depend upon m68kcoff.em rather than
  84. +      generic.em.
  85. +      * Makefile.in (em68kcoff.c): Likewise.
  86. diff -urN orig-binutils-2.14/Makefile.in binutils-2.14/Makefile.in
  87. --- orig-binutils-2.14/Makefile.in 2005-05-31 16:27:00.953125000 +0200
  88. +++ binutils-2.14/Makefile.in 2005-05-31 16:30:00.343750000 +0200
  89. @@ -1089,7 +1089,7 @@
  90.  .PHONY: info installcheck dvi install-info
  91.  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  92.  .PHONY: local-clean local-distclean local-maintainer-clean
  93. -info: do-info
  94. +info: configure-host do-info
  95.  installcheck: do-installcheck
  96.  dvi: do-dvi
  97.  
  98. diff -urN orig-binutils-2.14/bfd/Makefile.am binutils-2.14/bfd/Makefile.am
  99. --- orig-binutils-2.14/bfd/Makefile.am 2005-05-31 16:25:55.234375000 +0200
  100. +++ binutils-2.14/bfd/Makefile.am 2005-05-31 16:30:00.375000000 +0200
  101. @@ -305,6 +305,9 @@
  102.   pei-mips.lo 
  103.   peigen.lo 
  104.   ppcboot.lo 
  105. + prc-arm.lo 
  106. + prc-m68k.lo 
  107. + prc.lo 
  108.   reloc16.lo 
  109.   riscix.lo 
  110.   sparclinux.lo 
  111. @@ -467,6 +470,9 @@
  112.   pe-mips.c 
  113.   pei-mips.c 
  114.   ppcboot.c 
  115. + prc-arm.c 
  116. + prc-m68k.c 
  117. + prc.c 
  118.   reloc16.c 
  119.   riscix.c 
  120.   sparclinux.c 
  121. @@ -1465,6 +1471,9 @@
  122.    $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h 
  123.    peicode.h libpei.h
  124.  ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h
  125. +prc-arm.lo: prc-arm.c prc.h
  126. +prc-m68k.lo: prc-m68k.c prc.h
  127. +prc.lo: prc.c prc.h $(INCDIR)/safe-ctype.h
  128.  reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h 
  129.    genlink.h $(INCDIR)/coff/internal.h libcoff.h
  130.  riscix.lo: riscix.c $(INCDIR)/filenames.h libaout.h 
  131. diff -urN orig-binutils-2.14/bfd/Makefile.in binutils-2.14/bfd/Makefile.in
  132. --- orig-binutils-2.14/bfd/Makefile.in 2005-05-31 16:25:55.234375000 +0200
  133. +++ binutils-2.14/bfd/Makefile.in 2005-05-31 16:30:00.406250000 +0200
  134. @@ -432,6 +432,9 @@
  135.   pei-mips.lo 
  136.   peigen.lo 
  137.   ppcboot.lo 
  138. + prc-arm.lo 
  139. + prc-m68k.lo 
  140. + prc.lo 
  141.   reloc16.lo 
  142.   riscix.lo 
  143.   sparclinux.lo 
  144. @@ -595,6 +598,9 @@
  145.   pe-mips.c 
  146.   pei-mips.c 
  147.   ppcboot.c 
  148. + prc-arm.c 
  149. + prc-m68k.c 
  150. + prc.c 
  151.   reloc16.c 
  152.   riscix.c 
  153.   sparclinux.c 
  154. @@ -1998,6 +2004,9 @@
  155.    $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h 
  156.    peicode.h libpei.h
  157.  ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h
  158. +prc-arm.lo: prc-arm.c prc.h
  159. +prc-m68k.lo: prc-m68k.c prc.h
  160. +prc.lo: prc.c prc.h $(INCDIR)/safe-ctype.h
  161.  reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h 
  162.    genlink.h $(INCDIR)/coff/internal.h libcoff.h
  163.  riscix.lo: riscix.c $(INCDIR)/filenames.h libaout.h 
  164. diff -urN orig-binutils-2.14/bfd/coff-m68k.c binutils-2.14/bfd/coff-m68k.c
  165. --- orig-binutils-2.14/bfd/coff-m68k.c 2005-05-31 16:25:51.546875000 +0200
  166. +++ binutils-2.14/bfd/coff-m68k.c 2005-05-31 16:30:00.421875000 +0200
  167. @@ -67,6 +67,8 @@
  168.  #define RELOC_SPECIAL_FN m68kcoff_common_addend_special_fn
  169.  #endif
  170.  
  171. +static bfd_boolean coff_m68k_bfd_print_private_bfd_data
  172. +  PARAMS ((bfd *, PTR));
  173.  static bfd_boolean m68k_coff_is_local_label_name
  174.    PARAMS ((bfd *, const char *));
  175.  
  176. @@ -108,6 +110,7 @@
  177.      HOWTO (R_PCRWORD,        0,  1,  16, TRUE,  0, complain_overflow_signed,   RELOC_SPECIAL_FN, "DISP16",   TRUE, 0x0000ffff,0x0000ffff, FALSE),
  178.      HOWTO (R_PCRLONG,        0,  2,  32, TRUE,  0, complain_overflow_signed,   RELOC_SPECIAL_FN, "DISP32",   TRUE, 0xffffffff,0xffffffff, FALSE),
  179.      HOWTO (R_RELLONG_NEG,      0, -2,  32, FALSE, 0, complain_overflow_bitfield, RELOC_SPECIAL_FN, "-32", TRUE, 0xffffffff,0xffffffff, FALSE),
  180. +    HOWTO (R_RELENDWORD,       0,  1,  16, FALSE, 0, complain_overflow_bitfield, RELOC_SPECIAL_FN, "END16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
  181.    };
  182.  #endif /* not ONLY_DECLARE_RELOCS */
  183.  
  184. @@ -150,6 +153,7 @@
  185.      case R_PCRWORD: internal->howto = m68kcoff_howto_table + 4; break;
  186.      case R_PCRLONG: internal->howto = m68kcoff_howto_table + 5; break;
  187.      case R_RELLONG_NEG: internal->howto = m68kcoff_howto_table + 6; break;
  188. +    case R_RELENDWORD: internal->howto = m68kcoff_howto_table + 7; break;
  189.      }
  190.  }
  191.  
  192. @@ -157,6 +161,9 @@
  193.  m68k_howto2rtype (internal)
  194.       reloc_howto_type *internal;
  195.  {
  196. +  if (internal->type == R_RELENDWORD)
  197. +    return R_RELENDWORD;
  198. +
  199.    if (internal->pc_relative)
  200.      {
  201.        switch (internal->bitsize)
  202. @@ -194,6 +201,7 @@
  203.      case BFD_RELOC_16_PCREL: return m68kcoff_howto_table + 4;
  204.      case BFD_RELOC_32_PCREL: return m68kcoff_howto_table + 5;
  205.        /* FIXME: There doesn't seem to be a code for R_RELLONG_NEG.  */
  206. +      /* FIXME: Nor for R_RELENDWORD.  */
  207.      }
  208.    /*NOTREACHED*/
  209.  }
  210. @@ -208,6 +216,46 @@
  211.  
  212.  #define coff_bfd_reloc_type_lookup m68k_reloc_type_lookup
  213.  
  214. +#ifndef coff_rtype_to_howto
  215. +/* If this is not yet defined, one of the following definitions will be
  216. +   used.  Both need this helper function.  */
  217. +
  218. +static bfd_vma m68kcoff_global_data_size
  219. +  PARAMS ((bfd *, asection *, struct internal_reloc *,
  220. +    struct coff_link_hash_entry *));
  221. +
  222. +static bfd_vma
  223. +m68kcoff_global_data_size (abfd, sec, rel, h)
  224. +     bfd *abfd;
  225. +     asection *sec;
  226. +     struct internal_reloc *rel;
  227. +     struct coff_link_hash_entry *h;
  228. +{
  229. +  struct bfd_link_info *info;
  230. +  struct coff_link_hash_entry *edata;
  231. +
  232. +  info = coff_data (sec->output_section->owner)->link_info;
  233. +
  234. +  edata = coff_link_hash_lookup (coff_hash_table (info), "edata",
  235. +  FALSE, FALSE, TRUE);
  236. +
  237. +  if (edata && (edata->root.type == bfd_link_hash_defined
  238. + || edata->root.type == bfd_link_hash_defweak))
  239. +    {
  240. +      return edata->root.u.def.value;
  241. +    }
  242. +  else
  243. +    {
  244. +      (*info->callbacks->warning) (info,
  245. +    "END16 relocation failed without `edata'",
  246. +    h? h->root.root.string : NULL, abfd, sec,
  247. +    rel->r_vaddr - sec->vma);
  248. +      return 0;
  249. +    }
  250. +}
  251. +
  252. +#endif
  253. +
  254.  #ifndef COFF_COMMON_ADDEND
  255.  #ifndef coff_rtype_to_howto
  256.  
  257. @@ -220,10 +268,10 @@
  258.  
  259.  static reloc_howto_type *
  260.  m68kcoff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
  261. -     bfd *abfd ATTRIBUTE_UNUSED;
  262. +     bfd *abfd;
  263.       asection *sec;
  264.       struct internal_reloc *rel;
  265. -     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
  266. +     struct coff_link_hash_entry *h;
  267.       struct internal_syment *sym ATTRIBUTE_UNUSED;
  268.       bfd_vma *addendp;
  269.  {
  270. @@ -237,6 +285,9 @@
  271.    if (howto->pc_relative)
  272.      *addendp += sec->vma;
  273.  
  274. +  if (rel->r_type == R_RELENDWORD)
  275. +    *addendp -= m68kcoff_global_data_size (abfd, sec, rel, h);
  276. +
  277.    return howto;
  278.  }
  279.  
  280. @@ -380,7 +431,7 @@
  281.  
  282.  static reloc_howto_type *
  283.  m68kcoff_common_addend_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
  284. -     bfd *abfd ATTRIBUTE_UNUSED;
  285. +     bfd *abfd;
  286.       asection *sec;
  287.       struct internal_reloc *rel;
  288.       struct coff_link_hash_entry *h;
  289. @@ -397,6 +448,9 @@
  290.    if (howto->pc_relative)
  291.      *addendp += sec->vma;
  292.  
  293. +  if (rel->r_type == R_RELENDWORD)
  294. +    *addendp -= m68kcoff_global_data_size (abfd, sec, rel, h);
  295. +
  296.    if (sym != NULL && sym->n_scnum == 0 && sym->n_value != 0)
  297.      {
  298.        /* This is a common symbol.  The section contents include the
  299. @@ -506,21 +560,194 @@
  300.       targetsec = NULL;
  301.   }
  302.  
  303. +      bfd_put_16 (abfd, 1, p);
  304. +      bfd_put_16 (abfd, datasec->output_section->index, p + 2);
  305.        bfd_put_32 (abfd,
  306. -   (irel->r_vaddr - datasec->vma + datasec->output_offset), p);
  307. -      memset (p + 4, 0, 8);
  308. +   (irel->r_vaddr - datasec->vma + datasec->output_offset),
  309. +   p + 4);
  310.        if (targetsec != NULL)
  311. - strncpy (p + 4, targetsec->output_section->name, 8);
  312. + bfd_put_16 (abfd, targetsec->output_section->index, p + 8);
  313. +      else
  314. + {
  315. +   /* Probably can't happen, but let's try to be compatible with the
  316. +      previous version.  */
  317. +   p -= 12;
  318. + }
  319. +      bfd_put_16 (abfd, 0, p + 10);
  320.      }
  321.  
  322.    return TRUE;
  323.  }
  324.  #endif /* neither ONLY_DECLARE_RELOCS not STATIC_RELOCS  */
  325.  
  326. +/* Print the contents of ABFD's `.reloc' section to the file PTR.  */
  327. +static bfd_boolean
  328. +coff_m68k_bfd_print_private_bfd_data (abfd, ptr)
  329. +     bfd *abfd;
  330. +     PTR ptr;
  331. +{
  332. +  FILE *f = (FILE *) ptr;
  333. +  asection *relocs_sec, *held_relsec;
  334. +  bfd_byte *relocs, *rel, *relsec_contents;
  335. +  bfd_size_type relocs_size, relsec_size = 0;
  336. +
  337. +  relocs_sec = bfd_get_section_by_name (abfd, ".reloc");
  338. +  if (relocs_sec == NULL)
  339. +    return TRUE;
  340. +
  341. +  fprintf (f, "nEMBEDDED RELOCATION RECORDS:");
  342. +
  343. +  relocs_size = bfd_section_size (abfd, relocs_sec);
  344. +  if (relocs_size == 0)
  345. +    {
  346. +      fprintf (f, " (none)nn");
  347. +      return TRUE;
  348. +    }
  349. +  else
  350. +    fprintf (f, "n");
  351. +  
  352. +  relocs = (bfd_byte *) bfd_malloc ((size_t) relocs_size);
  353. +  bfd_get_section_contents (abfd, relocs_sec, (PTR) relocs, 0, relocs_size);
  354. +
  355. +  /* Get column headers lined up reasonably.  */
  356. +  {
  357. +    static int width;
  358. +    if (width == 0)
  359. +      {
  360. + char buf[30];
  361. + sprintf_vma (buf, (bfd_vma) -1);
  362. + width = strlen (buf) - 7;
  363. +      }
  364. +    fprintf (f, "SECTION+OFFSET    %*s TYPE %*s VALUE n", width, "", 12, "");
  365. +  }
  366. +
  367. +  held_relsec = NULL;
  368. +  relsec_contents = NULL;
  369. +
  370. +  for (rel = relocs; rel < relocs + relocs_size; rel += 12)
  371. +    {
  372. +      bfd_vma type, reloffset, value;
  373. +      int relsecndx, symsecndx;
  374. +      reloc_howto_type *howto;
  375. +      asection *sec, *relsec, *symsec;
  376. +      CONST char *relsecname, *symsecname;
  377. +      char relbuffer[32], symbuffer[32];
  378. +
  379. +      type      = bfd_get_16 (abfd, rel);
  380. +      relsecndx = bfd_get_16 (abfd, rel+2);
  381. +      reloffset = bfd_get_32 (abfd, rel+4);
  382. +      symsecndx = bfd_get_16 (abfd, rel+8);
  383. +
  384. +      /* Decode the embedded relocation type.  See also the corresponding
  385. +         encoding table in _bfd_m68kcoff_create_embedded_relocs().  */
  386. +      switch (type)
  387. + {
  388. + case 1:
  389. +   type = BFD_RELOC_32;
  390. +   break;
  391. +
  392. + default:
  393. +   type = BFD_RELOC_UNUSED;  /* Something definitely unknown.  */
  394. +   break;
  395. + }
  396. +
  397. +      relsec = symsec = NULL;
  398. +      for (sec = abfd->sections; sec; sec = sec->next)
  399. + {
  400. +   if (sec->index == relsecndx)
  401. +     relsec = sec;
  402. +   if (sec->index == symsecndx)
  403. +     symsec = sec;
  404. + }
  405. +
  406. +      sprintf (relbuffer, "[%d?]", (int) relsecndx);
  407. +      relsecname = (relsec)? bfd_section_name (abfd, relsec) : relbuffer;
  408. +
  409. +      sprintf (symbuffer, "[%d?]", (int) symsecndx);
  410. +      symsecname = (symsec)? bfd_section_name (abfd, symsec) : symbuffer;
  411. +
  412. +      fprintf (f, "%s+0x", relsecname);
  413. +      fprintf_vma (f, reloffset);
  414. +      fprintf (f, "%*s", (int) (9 - strlen (relsecname)), "");
  415. +
  416. +      howto = (relsec)? bfd_reloc_type_lookup (abfd, type) : NULL;
  417. +      if (howto == NULL)
  418. + {
  419. +   char buf[32];
  420. +   sprintf (buf, "[0x%x]", (unsigned int) type);
  421. +   fprintf (f, "%-18.18s%s+?? (%s unknown)n", buf, symsecname,
  422. +    (relsec)? "type" : "relocation section");
  423. +   continue;
  424. + }
  425. +
  426. +      fprintf (f, "%-18.18s", howto->name);
  427. +
  428. +      if (relsec == NULL)
  429. + {
  430. +   fprintf (f, "%s+?? (relocation section unknown)n", symsecname);
  431. +   continue;
  432. + }
  433. +
  434. +      if (held_relsec != relsec)
  435. + {
  436. +   free (relsec_contents);
  437. +   held_relsec = relsec;
  438. +   relsec_size = bfd_section_size (abfd, relsec);
  439. +   relsec_contents = (bfd_byte *) bfd_malloc ((size_t) relsec_size);
  440. +   bfd_get_section_contents (abfd, relsec, (PTR) relsec_contents,
  441. +     0, relsec_size);
  442. + }
  443. +
  444. +      if (reloffset > relsec_size - bfd_get_reloc_size (howto))
  445. + {
  446. +   fprintf (f, "%s+?? (offset out of range)n", symsecname);
  447. +   continue;
  448. + }
  449. +
  450. +      switch (bfd_get_reloc_size (howto))
  451. + {
  452. + default:
  453. + case 0:
  454. +   abort ();
  455. + case 1:
  456. +   value = bfd_get_8 (abfd, &relsec_contents[reloffset]);
  457. +   break;
  458. + case 2:
  459. +   value = bfd_get_16 (abfd, &relsec_contents[reloffset]);
  460. +   break;
  461. + case 4:
  462. +   value = bfd_get_32 (abfd, &relsec_contents[reloffset]);
  463. +   break;
  464. + case 8:
  465. +#ifdef BFD64
  466. +   value = bfd_get_64 (abfd, &relsec_contents[reloffset]);
  467. +#else
  468. +   abort ();
  469. +#endif
  470. +   break;
  471. + }
  472. +
  473. +      value &= howto->dst_mask;
  474. +      value >>= howto->bitpos;
  475. +      value <<= howto->rightshift;
  476. +
  477. +      fprintf (f, "%s+0x", symsecname);
  478. +      fprintf_vma (f, value - bfd_section_vma (abfd, symsec));
  479. +      fprintf (f, "n");
  480. +    }
  481. +
  482. +  free (relocs);
  483. +  free (relsec_contents);
  484. +
  485. +  return TRUE;
  486. +}
  487. +
  488.  #define coff_bfd_is_local_label_name m68k_coff_is_local_label_name
  489.  
  490.  #define coff_relocate_section _bfd_coff_generic_relocate_section
  491.  
  492. +#define coff_bfd_print_private_bfd_data coff_m68k_bfd_print_private_bfd_data
  493. +
  494.  #include "coffcode.h"
  495.  
  496.  #ifndef TARGET_SYM
  497. diff -urN orig-binutils-2.14/bfd/config.bfd binutils-2.14/bfd/config.bfd
  498. --- orig-binutils-2.14/bfd/config.bfd 2005-05-31 16:25:52.281250000 +0200
  499. +++ binutils-2.14/bfd/config.bfd 2005-05-31 16:30:00.437500000 +0200
  500. @@ -219,6 +219,10 @@
  501.      targ_defvec=bfd_elf32_littlearm_oabi_vec
  502.      targ_selvecs=bfd_elf32_bigarm_oabi_vec
  503.      ;;
  504. +  arm-*-palmos*)
  505. +    targ_defvec=bfd_elf32_littlearm_vec
  506. +    targ_selvecs="bfd_elf32_bigarm_vec prc_littlearm_vec"
  507. +    ;;
  508.  
  509.    thumb-*-coff)
  510.      targ_defvec=armcoff_little_vec
  511. @@ -696,6 +700,10 @@
  512.      targ_selvecs=ieee_vec
  513.      targ_underscore=yes
  514.      ;;
  515. +  m68*-*-palmos*)
  516. +    targ_defvec=m68kcoff_vec
  517. +    targ_selvecs=prc_m68k_vec
  518. +    ;;
  519.  
  520.    m88*-harris-cxux* | m88*-*-dgux* | m88*-*-sysv4*)
  521.      targ_defvec=bfd_elf32_m88k_vec
  522. diff -urN orig-binutils-2.14/bfd/configure binutils-2.14/bfd/configure
  523. --- orig-binutils-2.14/bfd/configure 2005-05-31 16:25:52.312500000 +0200
  524. +++ binutils-2.14/bfd/configure 2005-05-31 16:30:00.484375000 +0200
  525. @@ -6275,6 +6275,8 @@
  526.      pdp11_aout_vec) tb="$tb pdp11.lo" ;;
  527.      pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
  528.      ppcboot_vec) tb="$tb ppcboot.lo" ;;
  529. +    prc_littlearm_vec) tb="$tb prc-arm.lo prc.lo" ;;
  530. +    prc_m68k_vec) tb="$tb prc-m68k.lo prc.lo" ;;
  531.      riscix_vec) tb="$tb aout32.lo riscix.lo" ;;
  532.      rs6000coff64_vec) tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
  533.      rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
  534. diff -urN orig-binutils-2.14/bfd/configure.in binutils-2.14/bfd/configure.in
  535. --- orig-binutils-2.14/bfd/configure.in 2005-05-31 16:25:52.312500000 +0200
  536. +++ binutils-2.14/bfd/configure.in 2005-05-31 16:30:00.453125000 +0200
  537. @@ -737,6 +737,8 @@
  538.      pdp11_aout_vec) tb="$tb pdp11.lo" ;;
  539.      pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
  540.      ppcboot_vec) tb="$tb ppcboot.lo" ;;
  541. +    prc_littlearm_vec) tb="$tb prc-arm.lo prc.lo" ;;
  542. +    prc_m68k_vec) tb="$tb prc-m68k.lo prc.lo" ;;
  543.      riscix_vec) tb="$tb aout32.lo riscix.lo" ;;
  544.      rs6000coff64_vec) tb="$tb coff64-rs6000.lo xcofflink.lo aix5ppc-core.lo"; target_size=64 ;;
  545.      rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
  546. diff -urN orig-binutils-2.14/bfd/prc-arm.c binutils-2.14/bfd/prc-arm.c
  547. --- orig-binutils-2.14/bfd/prc-arm.c 1970-01-01 01:00:00.000000000 +0100
  548. +++ binutils-2.14/bfd/prc-arm.c 2005-05-31 16:30:00.484375000 +0200
  549. @@ -0,0 +1,50 @@
  550. +/* BFD back-end for the Palm OS PRC resource database format.
  551. +   Copyright 2002 John Marshall.  (For now.)
  552. +   Contributed by Falch.net as.
  553. +
  554. +This program is free software; you can redistribute it and/or modify
  555. +it under the terms of the GNU General Public License as published by
  556. +the Free Software Foundation; either version 2 of the License, or
  557. +(at your option) any later version.
  558. +
  559. +This program is distributed in the hope that it will be useful,
  560. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  561. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  562. +GNU General Public License for more details.
  563. +
  564. +You should have received a copy of the GNU General Public License
  565. +along with this program; if not, write to the Free Software
  566. +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  567. +
  568. +#include "bfd.h"
  569. +#include "sysdep.h"
  570. +#include "libbfd.h"
  571. +#include "prc.h"
  572. +
  573. +static flagword secflags
  574. +  PARAMS ((const struct palmos_prc_header *header, const char *secname));
  575. +
  576. +static flagword
  577. +secflags (header, secname)
  578. +      const struct palmos_prc_header *header ATTRIBUTE_UNUSED;
  579. +      const char *secname;
  580. +{
  581. +  flagword flags = 0;
  582. +
  583. +  if (strncmp (secname, "armc", 4) == 0)
  584. +    flags |= SEC_CODE;
  585. +
  586. +  return flags;
  587. +}
  588. +
  589. +static const struct palmos_prc_backend_data arm_backend_data =
  590. +{
  591. +  bfd_arch_arm, bfd_mach_arm_4T, secflags
  592. +};
  593. +
  594. +const bfd_target prc_littlearm_vec =
  595. +  PRC_TARGET_VECTOR ("prc-littlearm", BFD_ENDIAN_LITTLE, 
  596. +      bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  597. +      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  598. +      bfd_getl16, bfd_getl_signed_16, bfd_putl16,
  599. +      &arm_backend_data);
  600. diff -urN orig-binutils-2.14/bfd/prc-m68k.c binutils-2.14/bfd/prc-m68k.c
  601. --- orig-binutils-2.14/bfd/prc-m68k.c 1970-01-01 01:00:00.000000000 +0100
  602. +++ binutils-2.14/bfd/prc-m68k.c 2005-05-31 16:30:00.500000000 +0200
  603. @@ -0,0 +1,64 @@
  604. +/* BFD back-end for the Palm OS PRC resource database format.
  605. +   Copyright 2002 John Marshall.  (For now.)
  606. +   Contributed by Falch.net as.
  607. +
  608. +This program is free software; you can redistribute it and/or modify
  609. +it under the terms of the GNU General Public License as published by
  610. +the Free Software Foundation; either version 2 of the License, or
  611. +(at your option) any later version.
  612. +
  613. +This program is distributed in the hope that it will be useful,
  614. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  615. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  616. +GNU General Public License for more details.
  617. +
  618. +You should have received a copy of the GNU General Public License
  619. +along with this program; if not, write to the Free Software
  620. +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  621. +
  622. +#include "bfd.h"
  623. +#include "sysdep.h"
  624. +#include "libbfd.h"
  625. +#include "prc.h"
  626. +
  627. +static flagword secflags
  628. +  PARAMS ((const struct palmos_prc_header *header, const char *secname));
  629. +
  630. +static flagword
  631. +secflags (header, secname)
  632. +      const struct palmos_prc_header *header;
  633. +      const char *secname;
  634. +{
  635. +  flagword flags = 0;
  636. +
  637. +  if (strncmp (secname, "libr", 4) == 0
  638. +      || strncmp (secname, "GLib", 4) == 0
  639. +      || strncmp (secname, "HACK", 4) == 0
  640. +      || (strncmp (secname, "code", 4) == 0
  641. +   && (strcmp (secname, "code.0") != 0
  642. +       || strcmp (header->type, "appl") != 0)))
  643. +    flags |= SEC_CODE;
  644. +
  645. +  if (strncmp (secname, "data", 4) == 0)
  646. +    flags |= SEC_DATA;
  647. +
  648. +  if (strncmp (secname, "gdbS", 4) == 0)
  649. +    flags |= SEC_DEBUGGING;
  650. +
  651. +  return flags;
  652. +}
  653. +
  654. +/* FIXME Crazy scheme: we could synthesize symbols from MacsBug symbols
  655. +   in the code resources.  */
  656. +
  657. +static const struct palmos_prc_backend_data m68k_backend_data =
  658. +{
  659. +  bfd_arch_m68k, bfd_mach_m68000, secflags
  660. +};
  661. +
  662. +const bfd_target prc_m68k_vec =
  663. +  PRC_TARGET_VECTOR ("prc-m68k", BFD_ENDIAN_BIG, 
  664. +      bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  665. +      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  666. +      bfd_getb16, bfd_getb_signed_16, bfd_putb16,
  667. +      &m68k_backend_data);
  668. diff -urN orig-binutils-2.14/bfd/prc.c binutils-2.14/bfd/prc.c
  669. --- orig-binutils-2.14/bfd/prc.c 1970-01-01 01:00:00.000000000 +0100
  670. +++ binutils-2.14/bfd/prc.c 2005-05-31 16:30:00.515625000 +0200
  671. @@ -0,0 +1,407 @@
  672. +/* BFD back-end for the Palm OS PRC resource database format.
  673. +   Copyright 2002 John Marshall.  (For now.)
  674. +   Contributed by Falch.net as.
  675. +
  676. +This program is free software; you can redistribute it and/or modify
  677. +it under the terms of the GNU General Public License as published by
  678. +the Free Software Foundation; either version 2 of the License, or
  679. +(at your option) any later version.
  680. +
  681. +This program is distributed in the hope that it will be useful,
  682. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  683. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  684. +GNU General Public License for more details.
  685. +
  686. +You should have received a copy of the GNU General Public License
  687. +along with this program; if not, write to the Free Software
  688. +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  689. +
  690. +#include "bfd.h"
  691. +#include "sysdep.h"
  692. +#include "safe-ctype.h"
  693. +#include "libbfd.h"
  694. +#include "prc.h"
  695. +
  696. +static bfd_boolean swap_in_header
  697. +  PARAMS ((bfd *abfd, asection *sec, struct palmos_prc_header *header));
  698. +static bfd_boolean swap_in_resource_headers
  699. +  PARAMS ((bfd *abfd, unsigned int n,
  700. +    struct palmos_prc_resource_header *headers));
  701. +
  702. +static void add_section
  703. +  PARAMS ((bfd *abfd, struct palmos_prc_header *header, const char *secname,
  704. +           flagword basic_flags, unsigned long offset,
  705. +    unsigned long lim_offset));
  706. +static file_ptr tie_down_section
  707. +  PARAMS ((bfd *abfd, asection *sec, file_ptr offset));
  708. +static void compute_section_file_positions
  709. +  PARAMS ((bfd *abfd, file_ptr offset));
  710. +
  711. +/* The PRC file format is documented in the "Palm File Format Specification",
  712. +   available from <URL:http://www.palmos.com/dev/support/docs/>.  */
  713. +
  714. +#define HEADER_SIZE 0x4e
  715. +#define RSRCENTRY_SIZE 10
  716. +
  717. +/* Read from SEC if non-NULL, otherwise directly from the start of ABFD.  */
  718. +static bfd_boolean
  719. +swap_in_header (abfd, sec, header)
  720. +     bfd *abfd;
  721. +     asection *sec;
  722. +     struct palmos_prc_header *header;
  723. +{
  724. +  char raw[HEADER_SIZE];
  725. +
  726. +  if (sec)
  727. +    {
  728. +      if (! bfd_get_section_contents (abfd, sec, raw, 0, sizeof raw))
  729. + return FALSE;
  730. +    }
  731. +  else
  732. +    {
  733. +      if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
  734. +   || bfd_bread (raw, sizeof raw, abfd) != sizeof raw)
  735. + return FALSE;
  736. +    }
  737. +
  738. +  memcpy (header->name, &raw[0], 32);
  739. +  header->name[32] = '';
  740. +
  741. +  header->flags   = bfd_h_get_16 (abfd, &raw[0x20]);
  742. +  header->version   = bfd_h_get_16 (abfd, &raw[0x22]);
  743. +  header->create_time   = bfd_h_get_32 (abfd, &raw[0x24]);
  744. +  header->mod_time   = bfd_h_get_32 (abfd, &raw[0x28]);
  745. +  header->backup_time   = bfd_h_get_32 (abfd, &raw[0x2c]);
  746. +
  747. +  header->appinfo_offset  = bfd_h_get_32 (abfd, &raw[0x34]);
  748. +  header->sortinfo_offset = bfd_h_get_32 (abfd, &raw[0x38]);
  749. +
  750. +  memcpy (header->type, &raw[0x3c], 4);
  751. +  header->type[4] = '';
  752. +
  753. +  memcpy (header->creator, &raw[0x40], 4);
  754. +  header->creator[4] = '';
  755. +
  756. +  header->nextlist_offset = bfd_h_get_32 (abfd, &raw[0x48]);
  757. +  header->nresources   = bfd_h_get_16 (abfd, &raw[0x4c]);
  758. +
  759. +  return TRUE;
  760. +}
  761. +
  762. +static bfd_boolean
  763. +swap_in_resource_headers (abfd, n, headers)
  764. +     bfd *abfd;
  765. +     unsigned int n;
  766. +     struct palmos_prc_resource_header *headers;
  767. +{
  768. +  unsigned int i;
  769. +
  770. +  if (bfd_seek (abfd, (file_ptr) HEADER_SIZE, SEEK_SET) != 0)
  771. +    return FALSE;
  772. +
  773. +  for (i = 0; i < n; i++)
  774. +    {
  775. +      char raw[RSRCENTRY_SIZE];
  776. +      if (bfd_bread (raw, sizeof raw, abfd) != sizeof raw)
  777. + return FALSE;
  778. +
  779. +      memcpy (headers[i].type, &raw[0], 4);
  780. +      headers[i].type[4] = '';
  781. +      headers[i].id  = bfd_h_get_16 (abfd, &raw[4]);
  782. +      headers[i].offset  = bfd_h_get_32 (abfd, &raw[6]);
  783. +    }
  784. +
  785. +  return TRUE;
  786. +}
  787. +
  788. +static bfd_boolean
  789. +printable_string_p (const char *s)
  790. +{
  791. +  while (*s)
  792. +    if (! ISPRINT (*s++))
  793. +      return FALSE;
  794. +  return TRUE;
  795. +}
  796. +
  797. +/* We use SEC_LINKER_CREATED to signify arcane processing; namely a section,
  798. +   such as header information or appinfo, which does not correspond to a
  799. +   real resource.  */
  800. +
  801. +static void
  802. +add_section (abfd, header, secname, basic_flags, offset, lim_offset)
  803. +     bfd *abfd;
  804. +     struct palmos_prc_header *header;
  805. +     const char *secname;
  806. +     flagword basic_flags;
  807. +     unsigned long offset, lim_offset;
  808. +{
  809. +  asection *sec = bfd_make_section (abfd, secname);
  810. +  if (sec == NULL)
  811. +    return;
  812. +
  813. +  sec->vma = sec->lma = 0;
  814. +  sec->filepos = offset;
  815. +  bfd_set_section_size (abfd, sec, lim_offset - offset);
  816. +  /* FIXME?? sec->_raw_size = lim_offset - offset; */
  817. +
  818. +  sec->flags = (SEC_HAS_CONTENTS | basic_flags
  819. + | (*(backend_data (abfd)->secflags)) (header, secname));
  820. +
  821. +  if (header->flags & 0x0002)
  822. +    sec->flags |= SEC_READONLY;
  823. +}
  824. +
  825. +bfd_boolean
  826. +_bfd_prc_mkobject (abfd)
  827. +     bfd *abfd ATTRIBUTE_UNUSED;
  828. +{
  829. +  return TRUE;
  830. +}
  831. +
  832. +const bfd_target *
  833. +_bfd_prc_object_p (abfd)
  834. +     bfd *abfd;
  835. +{
  836. +  struct palmos_prc_header h;
  837. +  struct palmos_prc_resource_header *resource = NULL;
  838. +  unsigned int i;
  839. +  struct stat statbuf;
  840. +
  841. +  if (! swap_in_header (abfd, NULL, &h))
  842. +    goto invalid_prc;
  843. +
  844. +  resource = bfd_malloc ((h.nresources + 1)
  845. +  * sizeof (struct palmos_prc_resource_header));
  846. +  if (resource == NULL)
  847. +    goto failed;
  848. +
  849. +  if (! swap_in_resource_headers (abfd, h.nresources, resource))
  850. +    goto invalid_prc;
  851. +
  852. +  if (bfd_stat (abfd, &statbuf) < 0)
  853. +    goto failed;
  854. +
  855. +  resource[h.nresources].offset = statbuf.st_size;
  856. +
  857. +  /* The PRC format has no useful magic numbers, so checking that a file
  858. +     is a valid .prc is a black art.  We check that:
  859. +      - name, type, creator, and resource types are all printable ASCII;
  860. +      - flags includes 0x1;
  861. +      - next_record_list is 0;
  862. +      - app_info, sort_info (when they are non-zero), section pointers are
  863. +        strictly ascending.  */
  864. +
  865. +  if (! (printable_string_p (h.name)
  866. +  && (h.flags & 0x0001)
  867. +  && printable_string_p (h.type)
  868. +  && printable_string_p (h.creator)
  869. +  && h.nextlist_offset == 0
  870. +  && (h.appinfo_offset == 0 || h.sortinfo_offset == 0
  871. +      || h.appinfo_offset < h.sortinfo_offset)
  872. +  && (h.sortinfo_offset == 0 || h.sortinfo_offset < resource[0].offset)))
  873. +    goto invalid_prc;
  874. +
  875. +  for (i = 0; i < h.nresources; i++)
  876. +    if (! (printable_string_p (resource[i].type)
  877. +    && resource[i].offset < resource[i + 1].offset))
  878. +      goto invalid_prc;
  879. +
  880. +  add_section (abfd, &h, ".header", SEC_LINKER_CREATED, 0, HEADER_SIZE);
  881. +
  882. +  if (h.appinfo_offset)
  883. +    add_section (abfd, &h, ".appinfo",
  884. +  SEC_LINKER_CREATED | SEC_ALLOC | SEC_LOAD, h.appinfo_offset,
  885. +  h.sortinfo_offset? h.sortinfo_offset : resource[0].offset);
  886. +
  887. +  if (h.sortinfo_offset)
  888. +    add_section (abfd, &h, ".sortinfo",
  889. +  SEC_LINKER_CREATED | SEC_ALLOC | SEC_LOAD, h.sortinfo_offset,
  890. +  resource[0].offset);
  891. +
  892. +  for (i = 0; i < h.nresources; i++)
  893. +    {
  894. +      char secnamebuf[32];
  895. +      char *secname;
  896. +
  897. +      sprintf (secnamebuf, "%s.%u", resource[i].type, resource[i].id);
  898. +
  899. +      /* FIXME: If this ever fails, it'll leak the previous names.  */
  900. +      secname = bfd_alloc (abfd, strlen (secnamebuf) + 1);
  901. +      if (secname == NULL)
  902. + goto failed;
  903. +
  904. +      strcpy (secname, secnamebuf);
  905. +      add_section (abfd, &h, secname, SEC_ALLOC | SEC_LOAD,
  906. +    resource[i].offset, resource[i + 1].offset);
  907. +    }
  908. +
  909. +  if (strcmp (h.type, "appl") == 0)
  910. +    abfd->flags |= EXEC_P;
  911. +  else if (strcmp (h.type, "libr") == 0 || strcmp (h.type, "GLib") == 0)
  912. +    abfd->flags |= DYNAMIC;
  913. +
  914. +  bfd_default_set_arch_mach (abfd,
  915. +      backend_data (abfd)->arch,
  916. +      backend_data (abfd)->mach);
  917. +
  918. +  /* FIXME */
  919. +  abfd->symcount = 0;
  920. +
  921. +  return abfd->xvec;
  922. +
  923. +  /* Otherwise ABFD was not recognized as being in PRC format.  Jumps to
  924. +     <invalid_prc> are asking for a wrong_format error; jumps to <failed>
  925. +     imply that something major has just failed and has already set a
  926. +     suitable error code.  */
  927. +
  928. +invalid_prc:
  929. +  bfd_set_error (bfd_error_wrong_format);
  930. +
  931. +failed:
  932. +  if (resource)
  933. +    free (resource);
  934. +
  935. +  return NULL;
  936. +}
  937. +
  938. +static file_ptr
  939. +tie_down_section (abfd, sec, offset)
  940. +     bfd *abfd ATTRIBUTE_UNUSED;
  941. +     asection *sec;
  942. +     file_ptr offset;
  943. +{
  944. +  sec->filepos = offset;
  945. +  return offset + bfd_section_size (abfd, sec);
  946. +}
  947. +
  948. +static void
  949. +compute_section_file_positions (abfd, offset)
  950. +     bfd *abfd;
  951. +     file_ptr offset;
  952. +{
  953. +  asection *sec;
  954. +
  955. +  sec = bfd_get_section_by_name (abfd, ".appinfo");
  956. +  if (sec)
  957. +    offset = tie_down_section (abfd, sec, offset);
  958. +
  959. +  sec = bfd_get_section_by_name (abfd, ".sortinfo");
  960. +  if (sec)
  961. +    offset = tie_down_section (abfd, sec, offset);
  962. +
  963. +  for (sec = abfd->sections; sec != NULL; sec = sec->next)
  964. +    if (! (sec->flags & SEC_LINKER_CREATED))
  965. +      offset = tie_down_section (abfd, sec, offset);
  966. +}
  967. +
  968. +bfd_boolean
  969. +_bfd_prc_write_object_contents (abfd)
  970. +     bfd *abfd;
  971. +{
  972. +  /* FIXME This is not yet implemented.  */
  973. +  compute_section_file_positions (abfd, HEADER_SIZE);
  974. +  return TRUE;
  975. +}
  976. +
  977. +asymbol *
  978. +_bfd_prc_make_empty_symbol (abfd)
  979. +     bfd *abfd;
  980. +{
  981. +  asymbol *sym = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol));
  982. +  if (sym)
  983. +    sym->the_bfd = abfd;
  984. +  return sym;
  985. +}
  986. +
  987. +long
  988. +_bfd_prc_get_symtab_upper_bound (abfd)
  989. +     bfd *abfd;
  990. +{
  991. +  return (bfd_get_symcount (abfd) + 1) * sizeof (asymbol *);
  992. +}
  993. +
  994. +long
  995. +_bfd_prc_get_symtab (abfd, alocation)
  996. +     bfd *abfd ATTRIBUTE_UNUSED;
  997. +     asymbol **alocation ATTRIBUTE_UNUSED;
  998. +{
  999. +  return 0;
  1000. +}
  1001. +
  1002. +void
  1003. +_bfd_prc_get_symbol_info (abfd, symbol, ret)
  1004. +     bfd *abfd ATTRIBUTE_UNUSED;
  1005. +     asymbol *symbol;
  1006. +     symbol_info *ret;
  1007. +{
  1008. +  bfd_symbol_info (symbol, ret);
  1009. +}
  1010. +
  1011. +struct flag_meaning
  1012. +{
  1013. +  unsigned int mask;
  1014. +  const char *name;
  1015. +};
  1016. +
  1017. +/* xgettext: These names should not be translated, because they correspond
  1018. +   to constants defined in Palm OS SDKs.  */
  1019. +
  1020. +static const struct flag_meaning meanings[] =
  1021. +{
  1022. +  { 0x0001, "RESOURCE" },
  1023. +  { 0x0002, "READONLY" },
  1024. +  { 0x0004, "APPINFO-DIRTY" },
  1025. +  { 0x0008, "BACKUP" },
  1026. +  { 0x0010, "OK-TO-INSTALL-NEWER" },
  1027. +  { 0x0020, "RESET-AFTER-INSTALL" },
  1028. +  { 0x0040, "COPY-PREVENTION" },
  1029. +  { 0x0080, "STREAM" },
  1030. +  { 0x0100, "HIDDEN" },
  1031. +  { 0x0200, "LAUNCHABLE-DATA" },
  1032. +  { 0x0400, "RECYCLABLE" },
  1033. +  { 0x0800, "BUNDLE" },
  1034. +  { 0x8000, "OPEN" },
  1035. +  { 0, NULL }
  1036. +};
  1037. +
  1038. +/* FIXME: internationalise me! */
  1039. +
  1040. +bfd_boolean
  1041. +_bfd_prc_bfd_print_private_bfd_data (abfd, ptr)
  1042. +     bfd *abfd;
  1043. +     PTR ptr;
  1044. +{
  1045. +  FILE *f = (FILE *) ptr;
  1046. +  struct palmos_prc_header header;
  1047. +  unsigned int flags;
  1048. +  const struct flag_meaning *meaning;
  1049. +
  1050. +  swap_in_header (abfd, bfd_get_section_by_name (abfd, ".header"), &header);
  1051. +  flags = header.flags;
  1052. +
  1053. +  fprintf (f, "nDatabase Header:n");
  1054. +
  1055. +  fprintf (f, "  Name:    %sn", header.name);
  1056. +  fprintf (f, "  Flags:  ");
  1057. +
  1058. +  for (meaning = meanings; meaning->name; meaning++)
  1059. +    if (flags & meaning->mask)
  1060. +      {
  1061. + fprintf (f, " %s", meaning->name);
  1062. + flags &= ~meaning->mask;
  1063. +      }
  1064. +
  1065. +  if (flags != 0)
  1066. +    fprintf (f, " 0x%x", flags);
  1067. +
  1068. +  fprintf (f, "n");
  1069. +
  1070. +  fprintf (f, "  Type:    %sn", header.type);
  1071. +  fprintf (f, "  Creator: %sn", header.creator);
  1072. +  fprintf (f, "  Version: %un", header.version);
  1073. +
  1074. +  /* FIXME: Output the dates too, if we can be bothered converting from
  1075. +     Palm OS's seconds-since-1904-01-01T00:00:00 format.  */
  1076. +
  1077. +  return TRUE;
  1078. +}
  1079. diff -urN orig-binutils-2.14/bfd/prc.h binutils-2.14/bfd/prc.h
  1080. --- orig-binutils-2.14/bfd/prc.h 1970-01-01 01:00:00.000000000 +0100
  1081. +++ binutils-2.14/bfd/prc.h 2005-05-31 16:30:00.531250000 +0200
  1082. @@ -0,0 +1,134 @@
  1083. +/* BFD back-end for the Palm OS PRC resource database format.
  1084. +   Copyright 2002 John Marshall.  (For now.)
  1085. +   Contributed by Falch.net as.
  1086. +
  1087. +This program is free software; you can redistribute it and/or modify
  1088. +it under the terms of the GNU General Public License as published by
  1089. +the Free Software Foundation; either version 2 of the License, or
  1090. +(at your option) any later version.
  1091. +
  1092. +This program is distributed in the hope that it will be useful,
  1093. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  1094. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1095. +GNU General Public License for more details.
  1096. +
  1097. +You should have received a copy of the GNU General Public License
  1098. +along with this program; if not, write to the Free Software
  1099. +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  1100. +
  1101. +#include "bfd.h"
  1102. +#include "sysdep.h"
  1103. +
  1104. +struct palmos_prc_header
  1105. +{
  1106. +  char name[33];
  1107. +  unsigned int flags, version;
  1108. +  unsigned long create_time, mod_time, backup_time;
  1109. +  char type[5], creator[5];
  1110. +  unsigned long appinfo_offset, sortinfo_offset, nextlist_offset;
  1111. +  unsigned int nresources;
  1112. +};
  1113. +
  1114. +struct palmos_prc_resource_header
  1115. +{
  1116. +  char type[5];
  1117. +  unsigned int id;
  1118. +  unsigned long offset;
  1119. +};
  1120. +
  1121. +#define backend_data(abfd) 
  1122. +  ((const struct palmos_prc_backend_data *) (abfd)->xvec->backend_data)
  1123. +
  1124. +struct palmos_prc_backend_data
  1125. +{
  1126. +  enum bfd_architecture arch;
  1127. +  unsigned long mach;
  1128. +  flagword (*secflags)
  1129. +    PARAMS ((const struct palmos_prc_header *, const char *));
  1130. +};
  1131. +
  1132. +extern bfd_boolean _bfd_prc_mkobject PARAMS ((bfd *));
  1133. +extern const bfd_target *_bfd_prc_object_p PARAMS ((bfd *));
  1134. +extern bfd_boolean _bfd_prc_write_object_contents PARAMS ((bfd *));
  1135. +
  1136. +#define _bfd_prc_bfd_copy_private_bfd_data 
  1137. +  _bfd_generic_bfd_copy_private_bfd_data
  1138. +#define _bfd_prc_bfd_merge_private_bfd_data 
  1139. +  _bfd_generic_bfd_merge_private_bfd_data
  1140. +#define _bfd_prc_bfd_copy_private_section_data 
  1141. +  _bfd_generic_bfd_copy_private_section_data
  1142. +#define _bfd_prc_bfd_copy_private_symbol_data 
  1143. +  _bfd_generic_bfd_copy_private_symbol_data
  1144. +#define _bfd_prc_bfd_set_private_flags   _bfd_generic_bfd_set_private_flags
  1145. +extern bfd_boolean _bfd_prc_bfd_print_private_bfd_data PARAMS ((bfd *, PTR));
  1146. +
  1147. +extern long _bfd_prc_get_symtab_upper_bound PARAMS ((bfd *));
  1148. +extern long _bfd_prc_get_symtab PARAMS ((bfd *, asymbol **));
  1149. +extern asymbol *_bfd_prc_make_empty_symbol PARAMS ((bfd *));
  1150. +#define _bfd_prc_print_symbol   _bfd_nosymbols_print_symbol
  1151. +extern void _bfd_prc_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
  1152. +#define _bfd_prc_bfd_is_local_label_name  bfd_generic_is_local_label_name
  1153. +#define _bfd_prc_get_lineno   _bfd_nosymbols_get_lineno
  1154. +#define _bfd_prc_find_nearest_line   _bfd_nosymbols_find_nearest_line
  1155. +#define _bfd_prc_bfd_make_debug_symbol   _bfd_nosymbols_bfd_make_debug_symbol
  1156. +#define _bfd_prc_read_minisymbols   _bfd_generic_read_minisymbols
  1157. +#define _bfd_prc_minisymbol_to_symbol   _bfd_generic_minisymbol_to_symbol
  1158. +
  1159. +#define PRC_TARGET_VECTOR(name, body_endianness,
  1160. +   getu64, gets64, put64,
  1161. +   getu32, gets32, put32,
  1162. +   getu16, gets16, put16,
  1163. +   backend_data)
  1164. +  {
  1165. +    (name),
  1166. +    bfd_target_unknown_flavour,
  1167. +    (body_endianness),
  1168. +    BFD_ENDIAN_BIG,    /* All PRC headers are big endian.  */
  1169. +    EXEC_P | DYNAMIC,  /* plausible BFD flags  */
  1170. +    (SEC_HAS_CONTENTS | SEC_LINKER_CREATED | SEC_ALLOC
  1171. +     | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA
  1172. +     | SEC_DEBUGGING),  /* plausible section flags  */
  1173. +    0,    /* symbol prefix  */
  1174. +    ' ',  /* archive pad character  */
  1175. +    16,   /* archive member name length  */
  1176. +    /* Body swapping.  */
  1177. +    (getu64), (gets64), (put64),
  1178. +    (getu32), (gets32), (put32),
  1179. +    (getu16), (gets16), (put16),
  1180. +    /* Header swapping.  */
  1181. +    bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  1182. +    bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  1183. +    bfd_getb16, bfd_getb_signed_16, bfd_putb16,
  1184. +    /* bfd_check_format */
  1185. +    {
  1186. +      _bfd_dummy_target,
  1187. +      _bfd_prc_object_p,
  1188. +      _bfd_dummy_target,
  1189. +      _bfd_dummy_target
  1190. +    },
  1191. +    /* bfd_set_format */
  1192. +    {
  1193. +      bfd_false,
  1194. +      _bfd_prc_mkobject,
  1195. +      bfd_false,
  1196. +      bfd_false
  1197. +    },
  1198. +    /* bfd_write_contents */
  1199. +    {
  1200. +      bfd_false,
  1201. +      _bfd_prc_write_object_contents,
  1202. +      bfd_false,
  1203. +      bfd_false
  1204. +    },
  1205. +    BFD_JUMP_TABLE_GENERIC (_bfd_generic),
  1206. +    BFD_JUMP_TABLE_COPY (_bfd_prc),
  1207. +    BFD_JUMP_TABLE_CORE (_bfd_nocore),
  1208. +    BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
  1209. +    BFD_JUMP_TABLE_SYMBOLS (_bfd_prc),
  1210. +    BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
  1211. +    BFD_JUMP_TABLE_WRITE (_bfd_generic),
  1212. +    BFD_JUMP_TABLE_LINK (_bfd_nolink),
  1213. +    BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
  1214. +    NULL,  /* No alternative endianness backend. */
  1215. +    (PTR) (backend_data)
  1216. +  }
  1217. diff -urN orig-binutils-2.14/bfd/targets.c binutils-2.14/bfd/targets.c
  1218. --- orig-binutils-2.14/bfd/targets.c 2005-05-31 16:25:57.953125000 +0200
  1219. +++ binutils-2.14/bfd/targets.c 2005-05-31 16:30:00.562500000 +0200
  1220. @@ -678,6 +678,8 @@
  1221.  extern const bfd_target pef_xlib_vec;
  1222.  extern const bfd_target pmac_xcoff_vec;
  1223.  extern const bfd_target ppcboot_vec;
  1224. +extern const bfd_target prc_littlearm_vec;
  1225. +extern const bfd_target prc_m68k_vec;
  1226.  extern const bfd_target riscix_vec;
  1227.  extern const bfd_target rs6000coff64_vec;
  1228.  extern const bfd_target rs6000coff_vec;
  1229. @@ -1015,6 +1017,11 @@
  1230.  #endif
  1231.   &ppcboot_vec,
  1232.  #if 0
  1233. + /* Palm OS PRC format has no useful magic numbers.  */
  1234. + &prc_littlearm_vec,
  1235. + &prc_m68k_vec,
  1236. +#endif
  1237. +#if 0
  1238.   /* We have no way of distinguishing these from other a.out variants.  */
  1239.   &riscix_vec,
  1240.  #endif
  1241. diff -urN orig-binutils-2.14/config.sub binutils-2.14/config.sub
  1242. --- orig-binutils-2.14/config.sub 2005-05-31 16:26:02.828125000 +0200
  1243. +++ binutils-2.14/config.sub 2005-05-31 16:30:00.562500000 +0200
  1244. @@ -287,6 +287,10 @@
  1245.   echo Invalid configuration `$1': machine `$basic_machine' not recognized 1>&2
  1246.   exit 1
  1247.   ;;
  1248. + m68k-palmos)
  1249. + basic_machine=m68k-unknown
  1250. + os=-palmos
  1251. + ;;
  1252.   # Recognize the basic CPU types with company name.
  1253.   580-* 
  1254.   | a29k-* 
  1255. diff -urN orig-binutils-2.14/gas/config/m68k-parse.h binutils-2.14/gas/config/m68k-parse.h
  1256. --- orig-binutils-2.14/gas/config/m68k-parse.h 2005-05-31 16:26:04.015625000 +0200
  1257. +++ binutils-2.14/gas/config/m68k-parse.h 2005-05-31 16:30:00.593750000 +0200
  1258. @@ -240,12 +240,13 @@
  1259.    int scale;
  1260.  };
  1261.  
  1262. -#ifdef OBJ_ELF
  1263. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1264.  /* The type of a PIC expression.  */
  1265.  
  1266.  enum pic_relocation
  1267.  {
  1268.    pic_none, /* not pic */
  1269. +  pic_endrel, /* @END (for COFF_RELEND_RELOC) */
  1270.    pic_plt_pcrel, /* @PLTPC */
  1271.    pic_got_pcrel, /* @GOTPC */
  1272.    pic_plt_off, /* @PLT */
  1273. @@ -260,7 +261,7 @@
  1274.    /* The size to use.  */
  1275.    enum m68k_size size;
  1276.  
  1277. -#ifdef OBJ_ELF
  1278. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1279.    /* The type of pic relocation if any.  */
  1280.    enum pic_relocation pic_reloc;
  1281.  #endif
  1282. diff -urN orig-binutils-2.14/gas/config/m68k-parse.y binutils-2.14/gas/config/m68k-parse.y
  1283. --- orig-binutils-2.14/gas/config/m68k-parse.y 2005-05-31 16:26:04.031250000 +0200
  1284. +++ binutils-2.14/gas/config/m68k-parse.y 2005-05-31 16:30:00.609375000 +0200
  1285. @@ -974,7 +974,7 @@
  1286.   tail = 2;
  1287.      }
  1288.  
  1289. -#ifdef OBJ_ELF
  1290. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1291.    {
  1292.      /* Look for @PLTPC, etc.  */
  1293.      char *cp;
  1294. @@ -1006,6 +1006,11 @@
  1295.       yylval.exp.pic_reloc = pic_got_off;
  1296.       tail += 4;
  1297.     }
  1298. + else if (strncmp (cp - 4, "@END", 4) == 0)
  1299. +   {
  1300. +     yylval.exp.pic_reloc = pic_endrel;
  1301. +     tail += 4;
  1302. +   }
  1303.        }
  1304.    }
  1305.  #endif
  1306. diff -urN orig-binutils-2.14/gas/config/obj-coff.h binutils-2.14/gas/config/obj-coff.h
  1307. --- orig-binutils-2.14/gas/config/obj-coff.h 2005-05-31 16:26:04.140625000 +0200
  1308. +++ binutils-2.14/gas/config/obj-coff.h 2005-05-31 16:30:00.640625000 +0200
  1309. @@ -25,6 +25,9 @@
  1310.  
  1311.  #define OBJ_COFF 1
  1312.  
  1313. +#define COFF_RELEND_RELOC
  1314. +#define NEED_FX_R_TYPE
  1315. +
  1316.  #ifndef BFD_ASSEMBLER
  1317.  
  1318.  #define WORKING_DOT_WORD
  1319. diff -urN orig-binutils-2.14/gas/config/tc-arm.c binutils-2.14/gas/config/tc-arm.c
  1320. --- orig-binutils-2.14/gas/config/tc-arm.c 2005-05-31 16:26:05.031250000 +0200
  1321. +++ binutils-2.14/gas/config/tc-arm.c 2005-05-31 16:35:39.828125000 +0200
  1322. @@ -10219,7 +10219,7 @@
  1323.   || (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only.  */
  1324.        flags |= F_SOFT_FLOAT;
  1325.      /* Using VFP conventions (even if soft-float).  */
  1326. -    if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;
  1327. +    /*if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;*/
  1328.  
  1329.  #if defined OBJ_ELF
  1330.      if (cpu_variant & ARM_CEXT_MAVERICK)
  1331. diff -urN orig-binutils-2.14/gas/config/tc-m68k.c binutils-2.14/gas/config/tc-m68k.c
  1332. --- orig-binutils-2.14/gas/config/tc-m68k.c 2005-05-31 16:26:06.390625000 +0200
  1333. +++ binutils-2.14/gas/config/tc-m68k.c 2005-05-31 16:30:00.671875000 +0200
  1334. @@ -216,7 +216,7 @@
  1335.    significance of some values (in the branch instruction, for
  1336.    example).  */
  1337.        int pcrel_fix;
  1338. -#ifdef OBJ_ELF
  1339. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1340.        /* Whether this expression needs special pic relocation, and if
  1341.    so, which.  */
  1342.        enum pic_relocation pic_reloc;
  1343. @@ -284,7 +284,7 @@
  1344.    the_ins.reloc[the_ins.nrel].exp = exp->exp;
  1345.    the_ins.reloc[the_ins.nrel].wid = width;
  1346.    the_ins.reloc[the_ins.nrel].pcrel_fix = pc_fix;
  1347. -#ifdef OBJ_ELF
  1348. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1349.    the_ins.reloc[the_ins.nrel].pic_reloc = exp->pic_reloc;
  1350.  #endif
  1351.    the_ins.reloc[the_ins.nrel++].pcrel = pc_rel;
  1352. @@ -692,6 +692,11 @@
  1353.  tc_coff_fix2rtype (fixP)
  1354.       fixS *fixP;
  1355.  {
  1356. +#ifdef COFF_RELEND_RELOC
  1357. +  if (fixP->fx_r_type != NO_RELOC)
  1358. +    return fixP->fx_r_type;
  1359. +#endif
  1360. +
  1361.    if (fixP->fx_tcbit && fixP->fx_size == 4)
  1362.      return R_RELLONG_NEG;
  1363.  #ifdef NO_PCREL_RELOCS
  1364. @@ -871,8 +876,12 @@
  1365.  }
  1366.  
  1367.  #else /* !OBJ_ELF */
  1368. -
  1369. +#ifdef COFF_RELEND_RELOC
  1370. +#define get_reloc_code(SIZE,PCREL,PIC) 
  1371. +  (((PIC) == pic_endrel && (SIZE) == 2)? R_RELENDWORD : NO_RELOC)
  1372. +#else
  1373.  #define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
  1374. +#endif /* COFF_RELEND_RELOC */
  1375.  
  1376.  #define relaxable_symbol(symbol) 1
  1377.  
  1378. diff -urN orig-binutils-2.14/gas/configure binutils-2.14/gas/configure
  1379. --- orig-binutils-2.14/gas/configure 2005-05-31 16:26:08.062500000 +0200
  1380. +++ binutils-2.14/gas/configure 2005-05-31 16:30:00.718750000 +0200
  1381. @@ -2411,6 +2411,7 @@
  1382.        arm-*-pe | thumb-*-pe) fmt=coff em=pe ;;
  1383.        arm-*-riscix*) fmt=aout em=riscix ;;
  1384.        arm-*-vxworks) fmt=coff ;;
  1385. +      arm-*-palmos*) fmt=elf ;;
  1386.  
  1387.        avr-*-*) fmt=elf ;;
  1388.  
  1389. @@ -2557,6 +2558,7 @@
  1390.        m68k-*-openbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
  1391.        m68k-apple-aux*) fmt=coff em=aux ;;
  1392.        m68k-*-psos*) fmt=elf em=psos;;
  1393. +      m68k-*-palmos*) fmt=coff ;;
  1394.  
  1395.        m88k-motorola-sysv3*) fmt=coff em=delt88 ;;
  1396.        m88k-*-coff*) fmt=coff ;;
  1397. diff -urN orig-binutils-2.14/gas/configure.in binutils-2.14/gas/configure.in
  1398. --- orig-binutils-2.14/gas/configure.in 2005-05-31 16:26:08.078125000 +0200
  1399. +++ binutils-2.14/gas/configure.in 2005-05-31 16:30:00.687500000 +0200
  1400. @@ -205,6 +205,7 @@
  1401.        arm-*-pe | thumb-*-pe) fmt=coff em=pe ;;
  1402.        arm-*-riscix*) fmt=aout em=riscix ;;
  1403.        arm-*-vxworks) fmt=coff ;;
  1404. +      arm-*-palmos*) fmt=elf ;;
  1405.  
  1406.        avr-*-*) fmt=elf ;;
  1407.  
  1408. @@ -347,6 +348,7 @@
  1409.        m68k-*-openbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
  1410.        m68k-apple-aux*) fmt=coff em=aux ;;
  1411.        m68k-*-psos*) fmt=elf em=psos;;
  1412. +      m68k-*-palmos*) fmt=coff ;;
  1413.  
  1414.        m88k-motorola-sysv3*) fmt=coff em=delt88 ;;
  1415.        m88k-*-coff*) fmt=coff ;;
  1416. diff -urN orig-binutils-2.14/gas/m68k-parse.c binutils-2.14/gas/m68k-parse.c
  1417. --- orig-binutils-2.14/gas/m68k-parse.c 2005-05-31 16:26:09.921875000 +0200
  1418. +++ binutils-2.14/gas/m68k-parse.c 2005-05-31 16:30:00.734375000 +0200
  1419. @@ -2175,7 +2175,7 @@
  1420.   tail = 2;
  1421.      }
  1422.  
  1423. -#ifdef OBJ_ELF
  1424. +#if defined OBJ_ELF || defined COFF_RELEND_RELOC
  1425.    {
  1426.      /* Look for @PLTPC, etc.  */
  1427.      char *cp;
  1428. @@ -2207,6 +2207,11 @@
  1429.       yylval.exp.pic_reloc = pic_got_off;
  1430.       tail += 4;
  1431.     }
  1432. + else if (strncmp (cp - 4, "@END", 4) == 0)
  1433. +   {
  1434. +     yylval.exp.pic_reloc = pic_endrel;
  1435. +     tail += 4;
  1436. +   }
  1437.        }
  1438.    }
  1439.  #endif
  1440. diff -urN orig-binutils-2.14/include/coff/internal.h binutils-2.14/include/coff/internal.h
  1441. --- orig-binutils-2.14/include/coff/internal.h 2005-05-31 16:26:51.875000000 +0200
  1442. +++ binutils-2.14/include/coff/internal.h 2005-05-31 16:30:00.734375000 +0200
  1443. @@ -626,6 +626,10 @@
  1444.  #define R_LVRT16       132
  1445.  #define R_VRT32        133
  1446.  
  1447. +/* This (m68k) reloc evaluates to a 16bit offset, just like R_RELWORD, but
  1448. +   also implicitly subtracts the value of `edata', so that effectively the
  1449. +   origin is at the end of the memory region intead of the start.  */
  1450. +#define R_RELENDWORD 21
  1451.  
  1452.  /* This reloc identifies mov.b instructions with a 16bit absolute
  1453.     address.  The linker tries to turn insns with this reloc into
  1454. diff -urN orig-binutils-2.14/ld/Makefile.am binutils-2.14/ld/Makefile.am
  1455. --- orig-binutils-2.14/ld/Makefile.am 2005-05-31 16:26:54.515625000 +0200
  1456. +++ binutils-2.14/ld/Makefile.am 2005-05-31 16:30:00.750000000 +0200
  1457. @@ -125,6 +125,7 @@
  1458.   earmelf_oabi.o 
  1459.   earmnto.o 
  1460.   earmnbsd.o 
  1461. + earmpalmos.o 
  1462.   earmpe.o 
  1463.   eavr1200.o 
  1464.   eavr23xx.o 
  1465. @@ -242,6 +243,7 @@
  1466.   em68klinux.o 
  1467.   em68klynx.o 
  1468.   em68knbsd.o 
  1469. + em68kpalmos.o 
  1470.   em68kpsos.o 
  1471.   em88kbcs.o 
  1472.   emcorepe.o 
  1473. @@ -502,6 +504,9 @@
  1474.  earmpe.c: $(srcdir)/emulparams/armpe.sh 
  1475.    $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
  1476.   ${GENSCRIPTS} armpe "$(tdir_armpe)"
  1477. +earmpalmos.c: $(srcdir)/emulparams/armpalmos.sh $(srcdir)/emulparams/armelf.sh 
  1478. +  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/armpalmos.sc ${GEN_DEPENDS}
  1479. + ${GENSCRIPTS} armpalmos "$(tdir_armpalmos)"
  1480.  eavr85xx.c: $(srcdir)/emulparams/avr85xx.sh 
  1481.    $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32avr.sc 
  1482.    ${GEN_DEPENDS}
  1483. @@ -981,6 +986,9 @@
  1484.  em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh 
  1485.    $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
  1486.   ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
  1487. +em68kpalmos.c: $(srcdir)/emulparams/m68kpalmos.sh 
  1488. +  $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kpalmos.sc ${GEN_DEPENDS}
  1489. + ${GENSCRIPTS} m68kpalmos "$(tdir_m68kpalmos)"
  1490.  em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh 
  1491.    $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
  1492.   ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
  1493. diff -urN orig-binutils-2.14/ld/Makefile.in binutils-2.14/ld/Makefile.in
  1494. --- orig-binutils-2.14/ld/Makefile.in 2005-05-31 16:26:54.515625000 +0200
  1495. +++ binutils-2.14/ld/Makefile.in 2005-05-31 16:30:00.765625000 +0200
  1496. @@ -239,6 +239,7 @@
  1497.   earmelf_oabi.o 
  1498.   earmnto.o 
  1499.   earmnbsd.o 
  1500. + earmpalmos.o 
  1501.   earmpe.o 
  1502.   eavr1200.o 
  1503.   eavr23xx.o 
  1504. @@ -356,6 +357,7 @@
  1505.   em68klinux.o 
  1506.   em68klynx.o 
  1507.   em68knbsd.o 
  1508. + em68kpalmos.o 
  1509.   em68kpsos.o 
  1510.   em88kbcs.o 
  1511.   emcorepe.o 
  1512. @@ -1228,6 +1230,9 @@
  1513.  earmpe.c: $(srcdir)/emulparams/armpe.sh 
  1514.    $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
  1515.   ${GENSCRIPTS} armpe "$(tdir_armpe)"
  1516. +earmpalmos.c: $(srcdir)/emulparams/armpalmos.sh $(srcdir)/emulparams/armelf.sh 
  1517. +  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/armpalmos.sc ${GEN_DEPENDS}
  1518. + ${GENSCRIPTS} armpalmos "$(tdir_armpalmos)"
  1519.  eavr85xx.c: $(srcdir)/emulparams/avr85xx.sh 
  1520.    $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32avr.sc 
  1521.    ${GEN_DEPENDS}
  1522. @@ -1707,6 +1712,9 @@
  1523.  em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh 
  1524.    $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
  1525.   ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
  1526. +em68kpalmos.c: $(srcdir)/emulparams/m68kpalmos.sh 
  1527. +  $(srcdir)/emultempl/m68kcoff.em $(srcdir)/scripttempl/m68kpalmos.sc ${GEN_DEPENDS}
  1528. + ${GENSCRIPTS} m68kpalmos "$(tdir_m68kpalmos)"
  1529.  em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh 
  1530.    $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
  1531.   ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
  1532. diff -urN orig-binutils-2.14/ld/configure.tgt binutils-2.14/ld/configure.tgt
  1533. --- orig-binutils-2.14/ld/configure.tgt 2005-05-31 16:26:53.312500000 +0200
  1534. +++ binutils-2.14/ld/configure.tgt 2005-05-31 16:30:00.765625000 +0200
  1535. @@ -247,6 +247,7 @@
  1536.  arm*-*-linux-gnu*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
  1537.  arm*-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
  1538.  arm*-*-conix*) targ_emul=armelf ;;
  1539. +arm*-*-palmos*) targ_emul=armpalmos; targ_extra_emuls=armelf ;;
  1540.  thumb-*-linux-gnu* | thumb-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
  1541.  strongarm-*-coff) targ_emul=armcoff ;;
  1542.  strongarm-*-elf) targ_emul=armelf ;;
  1543. @@ -364,6 +365,7 @@
  1544.  m68*-*-psos*) targ_emul=m68kpsos ;;
  1545.  m68*-*-rtemscoff*) targ_emul=m68kcoff ;;
  1546.  m68*-*-rtems*) targ_emul=m68kelf ;;
  1547. +m68*-*-palmos*) targ_emul=m68kpalmos ;;
  1548.  hppa*64*-*-linux-gnu*) targ_emul=hppa64linux ;;
  1549.  hppa*64*-*) targ_emul=elf64hppa ;;
  1550.  hppa*-*-linux-gnu*) targ_emul=hppalinux ;;
  1551. diff -urN orig-binutils-2.14/ld/emulparams/armpalmos.sh binutils-2.14/ld/emulparams/armpalmos.sh
  1552. --- orig-binutils-2.14/ld/emulparams/armpalmos.sh 1970-01-01 01:00:00.000000000 +0100
  1553. +++ binutils-2.14/ld/emulparams/armpalmos.sh 2005-05-31 16:30:00.765625000 +0200
  1554. @@ -0,0 +1,6 @@
  1555. +. ${srcdir}/emulparams/armelf.sh
  1556. +SCRIPT_NAME=armpalmos
  1557. +
  1558. +GENERATE_COMBRELOC_SCRIPT=yes
  1559. +unset GENERATE_SHLIB_SCRIPT
  1560. +unset ENTRY
  1561. diff -urN orig-binutils-2.14/ld/emulparams/m68kpalmos.sh binutils-2.14/ld/emulparams/m68kpalmos.sh
  1562. --- orig-binutils-2.14/ld/emulparams/m68kpalmos.sh 1970-01-01 01:00:00.000000000 +0100
  1563. +++ binutils-2.14/ld/emulparams/m68kpalmos.sh 2005-05-31 16:30:00.781250000 +0200
  1564. @@ -0,0 +1,4 @@
  1565. +SCRIPT_NAME=m68kpalmos
  1566. +OUTPUT_FORMAT="coff-m68k"
  1567. +ARCH=m68k
  1568. +TEMPLATE_NAME=m68kcoff
  1569. diff -urN orig-binutils-2.14/ld/emultempl/m68kcoff.em binutils-2.14/ld/emultempl/m68kcoff.em
  1570. --- orig-binutils-2.14/ld/emultempl/m68kcoff.em 2005-05-31 16:26:53.718750000 +0200
  1571. +++ binutils-2.14/ld/emultempl/m68kcoff.em 2005-05-31 16:30:00.796875000 +0200
  1572. @@ -88,22 +88,25 @@
  1573.   {
  1574.     asection *relsec;
  1575.  
  1576. -   relsec = bfd_make_section (abfd, ".emreloc");
  1577. +   relsec = bfd_make_section (abfd, ".reloc");
  1578.     if (relsec == NULL
  1579.         || ! bfd_set_section_flags (abfd, relsec,
  1580. -   (SEC_ALLOC
  1581. -    | SEC_LOAD
  1582. -    | SEC_HAS_CONTENTS
  1583. +   (SEC_HAS_CONTENTS
  1584.      | SEC_IN_MEMORY))
  1585.         || ! bfd_set_section_alignment (abfd, relsec, 2)
  1586.         || ! bfd_set_section_size (abfd, relsec,
  1587.    datasec->reloc_count * 12))
  1588. -     einfo ("%F%B: can not create .emreloc section: %En");
  1589. +     einfo ("%F%B: can not create .reloc section: %En");
  1590.   }
  1591.  
  1592.        /* Double check that all other data sections are empty, as is
  1593.           required for embedded PIC code.  */
  1594. +#if 0
  1595. +      /* This is NOT required for embedded PIC.  In fact, since we have
  1596. +  sections like [be]hook which can be data sections on input but
  1597. +  are output in the .text section, this is wrong wrong wrong.  */
  1598.        bfd_map_over_sections (abfd, check_sections, (PTR) datasec);
  1599. +#endif
  1600.      }
  1601.  }
  1602.  
  1603. @@ -146,7 +149,7 @@
  1604.        if (datasec == NULL || datasec->reloc_count == 0)
  1605.   continue;
  1606.  
  1607. -      relsec = bfd_get_section_by_name (abfd, ".emreloc");
  1608. +      relsec = bfd_get_section_by_name (abfd, ".reloc");
  1609.        ASSERT (relsec != NULL);
  1610.  
  1611.        if (! bfd_m68k_coff_create_embedded_relocs (abfd, &link_info,
  1612. diff -urN orig-binutils-2.14/ld/scripttempl/armpalmos.sc binutils-2.14/ld/scripttempl/armpalmos.sc
  1613. --- orig-binutils-2.14/ld/scripttempl/armpalmos.sc 1970-01-01 01:00:00.000000000 +0100
  1614. +++ binutils-2.14/ld/scripttempl/armpalmos.sc 2005-05-31 16:30:00.796875000 +0200
  1615. @@ -0,0 +1,22 @@
  1616. +cat <<EOF
  1617. +OUTPUT_FORMAT ("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
  1618. +        "${LITTLE_OUTPUT_FORMAT}")
  1619. +OUTPUT_ARCH ("${ARCH}")
  1620. +
  1621. +${RELOCATING+${LIB_SEARCH_DIRS}}
  1622. +
  1623. +/* This is a pathetically simple linker script that is only of use for
  1624. +   building Palm OS 5 armlets, namely stand-alone code that has no global
  1625. +   data or other complications.  */
  1626. +
  1627. +SECTIONS
  1628. +{
  1629. +    .text :
  1630. +    {
  1631. + *(.text .rodata)
  1632. + ${RELOCATING+${OTHER_TEXT_SECTIONS}}
  1633. +    }
  1634. +
  1635. +    .disposn : { *(.disposn) }
  1636. +}
  1637. +EOF
  1638. diff -urN orig-binutils-2.14/ld/scripttempl/m68kpalmos.sc binutils-2.14/ld/scripttempl/m68kpalmos.sc
  1639. --- orig-binutils-2.14/ld/scripttempl/m68kpalmos.sc 1970-01-01 01:00:00.000000000 +0100
  1640. +++ binutils-2.14/ld/scripttempl/m68kpalmos.sc 2005-05-31 16:30:00.812500000 +0200
  1641. @@ -0,0 +1,76 @@
  1642. +# Note that genscripts.sh strips blank lines, but converts lines
  1643. +# matching ^t$ into blank lines on output.  So we use the latter here.
  1644. +
  1645. +cat <<EOF
  1646. +OUTPUT_FORMAT ("${OUTPUT_FORMAT}")
  1647. +
  1648. +${LIB_SEARCH_DIRS}
  1649. +
  1650. +/* The LENGTH of coderes determines how large the .text section (which winds
  1651. +   up as the final database's main 'code' resource) may be before producing
  1652. +   linker errors.  Typical values on Palm OS are "about 32K" and "about 64K":
  1653. +
  1654. +   32770 is the largest .text section whose start and end can be reached from
  1655. +   each other via a 16 bit signed m68k jump (although only the first 32K can
  1656. +   be called from other sections, that's enough because no function can start
  1657. +   beyond there because it must end in rts);
  1658. +
  1659. +   64720 is the largest resource allowable all the way back to Palm OS 1.0;
  1660. +
  1661. +   65505 is the largest resource allowable on Palm OS 3.0 and higher.  */
  1662. +
  1663. +MEMORY
  1664. +{
  1665. +    coderes : ORIGIN = 0x0, LENGTH = 32770
  1666. +    datares : ORIGIN = 0x0, LENGTH = 32767
  1667. +
  1668. +    trap_region :  ORIGIN = 0x1000000, LENGTH = 2
  1669. +    disposition_region : ORIGIN = 0x1000010, LENGTH = 6
  1670. +}
  1671. +
  1672. +SECTIONS
  1673. +{
  1674. +    .text :
  1675. +    {
  1676. + *(.text)
  1677. + . = ALIGN(4);
  1678. + bhook_start = .;
  1679. + *(bhook)
  1680. + bhook_end = .;
  1681. + . = ALIGN(4);
  1682. + ehook_start = .;
  1683. + *(ehook)
  1684. + ehook_end = .;
  1685. +EOF
  1686. +if [ -n "${CONSTRUCTING}" ]; then cat <<EOF
  1687. + . = ALIGN(4);
  1688. + ctors_start = .;
  1689. + *(.ctors)
  1690. + ctors_end = .;
  1691. + . = ALIGN(4);
  1692. + dtors_start = .;
  1693. + *(.dtors)
  1694. + dtors_end = .;
  1695. +EOF
  1696. +fi
  1697. +cat <<EOF
  1698. +    } > coderes
  1699. +    .data :
  1700. +    {
  1701. + data_start = .;
  1702. + *(.data)
  1703. + *(.gcc_exc)
  1704. +    } > datares
  1705. +    .bss :
  1706. +    {
  1707. + bss_start = .;
  1708. +        *(.bss)
  1709. +        *(COMMON)
  1710. +    } > datares
  1711. +    end = ALIGN( 4 );
  1712. +    edata = ALIGN( 4 );
  1713. +
  1714. +    .trap : { *(.trap) } > trap_region
  1715. +    .disposn : { *(.disposn) } > disposition_region
  1716. +}
  1717. +EOF
  1718. diff -urN orig-binutils-2.14/libiberty/fnmatch.c binutils-2.14/libiberty/fnmatch.c
  1719. --- orig-binutils-2.14/libiberty/fnmatch.c 2005-05-31 16:27:00.562500000 +0200
  1720. +++ binutils-2.14/libiberty/fnmatch.c 2005-05-31 16:30:00.812500000 +0200
  1721. @@ -55,7 +55,9 @@
  1722.     program understand `configure --with-gnu-libc' and omit the object files,
  1723.     it is simpler to just do this in the source for each such file.  */
  1724.  
  1725. -#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
  1726. +/* [PRC-TOOLS-LOCAL] It's not a waste when you're trying to avoid the New!
  1727. +   Improved! glibc-2.2.4 fnmatch GLIBC@2.2.3 dependency.  Hack on, dude.  */
  1728. +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) || 1
  1729.  
  1730.  
  1731.  #if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)