OSDN Git Service

bfd
authorNick Clifton <nickc@redhat.com>
Mon, 21 Aug 2006 08:12:46 +0000 (08:12 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 21 Aug 2006 08:12:46 +0000 (08:12 +0000)
* Makefile.am: Add rules to build pe-arm-wince.lo and pei-arm-wince.lo objects.
* Makefile.in: Regenerate.
* pe-arm-wince.c: New file.
* pei-arm-wince.c: New file.
* pei-arm.c: Remove ARM_WINCE block.
* pe-arm.c: Remove ARM_WINCE block. Rename
bfd_arm_pe_allocate_interworking_sections,
bfd_arm_pe_get_bfd_for_interworking, and
bfd_arm_pe_process_before_allocation to
bfd_armpe_allocate_interworking_sections,
bfd_armpe_get_bfd_for_interworking, and
bfd_armpe_process_before_allocation. Move them before including bfd.h.
* bfd.c: ARM wince bfd format names were renamed. Adjust.
* coff-arm.c [ARM_WINCE]: Adjust so Windows CE doesn't end up with unexpected/conflicting relocs.
* targets.c: The arm-wince-pe target got its own new vector.  Adjust.
* config.bfd: Likewise.
* configure.in: Likewise.
* configure: Regenerate.

binutils
* configure.in: Split arm-pe and arm-wince-pe. Build dlltool with -DDLLTOOL_ARM_WINCE for Windows CE case.
* configure: Regenerate.
* dlltool.c: Add support for arm-wince.

gas
* Makefile.am (TARG_ENV_HFILES): Add te-wince-pe.h.
* Makefile.in: Regenerate.
* config/tc-arm.h [TARGET_FORMAT]: ARM wince bfd names were  renamed. Adjust.

ld
* Makefile.am: Split arm-wince into its own emulation.
* Makefile.in: Regenerate.
* configure.tgt: Set targ_emul to arm_wince_pe for ARM Windows CE targets.
* pe-dll.c : Define PE_ARCH_arm_wince.
  (pe_detail_list): Add PE_ARCH_arm_wince case.
  (make_one): Handle PE_ARCH_arm_epoc and PE_ARCH_arm_wince cases.
* emulparams/arm_wince_pe.sh: New file.
* emultempl/pe.em: Handle new TARGET_IS_arm_wince_pe define.
  Remap bfd_arm_allocate_interworking_sections, bfd_arm_get_bfd_for_interworking and
  bfd_arm_process_before_allocation for arm-pe and arm-wince-pe targets too.
  (gld_${EMULATION_NAME}_recognized_file): Handle arm-wince and arm-epoc bfd format names.

27 files changed:
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/bfd.c
bfd/coff-arm.c
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/pe-arm-wince.c [new file with mode: 0644]
bfd/pe-arm.c
bfd/pei-arm-wince.c [new file with mode: 0644]
bfd/pei-arm.c
bfd/targets.c
binutils/ChangeLog
binutils/configure
binutils/configure.in
binutils/dlltool.c
gas/ChangeLog
gas/Makefile.am
gas/Makefile.in
gas/config/tc-arm.h
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/emulparams/arm_wince_pe.sh [new file with mode: 0644]
ld/emultempl/pe.em
ld/pe-dll.c

index 6136a0c..595d19d 100644 (file)
@@ -1,3 +1,28 @@
+2006-08-21  Pedro Alves  <pedro_alves@portugalmail.pt>
+
+       * Makefile.am: Add rules to build pe-arm-wince.lo
+       and pei-arm-wince.lo objects.
+       * Makefile.in: Regenerate.
+       * pe-arm-wince.c: New file.
+       * pei-arm-wince.c: New file.
+       * pei-arm.c: Remove ARM_WINCE block.
+       * pe-arm.c: Remove ARM_WINCE block. Rename
+       bfd_arm_pe_allocate_interworking_sections,
+       bfd_arm_pe_get_bfd_for_interworking, and
+       bfd_arm_pe_process_before_allocation to        
+       bfd_armpe_allocate_interworking_sections,
+       bfd_armpe_get_bfd_for_interworking, and
+       bfd_armpe_process_before_allocation. Move them before
+       including bfd.h.
+       * bfd.c: ARM wince bfd format names were renamed. Adjust.
+       * coff-arm.c [ARM_WINCE]: Adjust so Windows CE doesn't end up
+       with unexpected/conflicting relocs.
+       * targets.c: The arm-wince-pe target got its own new vector.
+       Adjust.
+       * config.bfd: Likewise.
+       * configure.in: Likewise.
+       * configure: Regenerate.
+
 2006-08-18  Paul Brook  <paul@codesourcery.com>
 
        * elf32-arm.c (elf32_arm_link_hash_entry): Add export_glue.
index cfc5f74..27c2c06 100644 (file)
@@ -323,6 +323,8 @@ BFD32_BACKENDS = \
        pef.lo \
        pe-arm.lo \
        pei-arm.lo \
+       pe-arm-wince.lo \
+       pei-arm-wince.lo \
        pe-i386.lo \
        pei-i386.lo \
        pe-mcore.lo \
@@ -495,6 +497,8 @@ BFD32_BACKENDS_CFILES = \
        pef.c \
        pe-arm.c \
        pei-arm.c \
+       pe-arm-wince.c \
+       pei-arm-wince.c \
        pe-i386.c \
        pei-i386.c \
        pe-mcore.c \
@@ -1622,6 +1626,16 @@ pei-arm.lo: pei-arm.c $(INCDIR)/filenames.h coff-arm.c \
   $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
   $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
+pe-arm-wince.lo: pe-arm-wince.c pe-arm.c $(INCDIR)/filenames.h \
+  coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+  $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+  peicode.h libpei.h
+pei-arm-wince.lo: pei-arm-wince.c pei-arm.c $(INCDIR)/filenames.h \
+  coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+  $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+  peicode.h libpei.h
 pe-i386.lo: pe-i386.c $(INCDIR)/filenames.h coff-i386.c \
   $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
index 0ecd81c..46673b6 100644 (file)
@@ -555,6 +555,8 @@ BFD32_BACKENDS = \
        pef.lo \
        pe-arm.lo \
        pei-arm.lo \
+       pe-arm-wince.lo \
+       pei-arm-wince.lo \
        pe-i386.lo \
        pei-i386.lo \
        pe-mcore.lo \
@@ -727,6 +729,8 @@ BFD32_BACKENDS_CFILES = \
        pef.c \
        pe-arm.c \
        pei-arm.c \
+       pe-arm-wince.c \
+       pei-arm-wince.c \
        pe-i386.c \
        pei-i386.c \
        pe-mcore.c \
@@ -2183,6 +2187,16 @@ pei-arm.lo: pei-arm.c $(INCDIR)/filenames.h coff-arm.c \
   $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
   $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
+pe-arm-wince.lo: pe-arm-wince.c pe-arm.c $(INCDIR)/filenames.h \
+  coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+  $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+  peicode.h libpei.h
+pei-arm-wince.lo: pei-arm-wince.c pei-arm.c $(INCDIR)/filenames.h \
+  coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+  $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+  peicode.h libpei.h
 pe-i386.lo: pe-i386.c $(INCDIR)/filenames.h coff-i386.c \
   $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
index cc0f73e..13fbf93 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -876,7 +876,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
 
   name = bfd_get_target (abfd);
 
-  /* Return a proper value for DJGPP & PE COFF (x86 COFF variants).
+  /* Return a proper value for DJGPP & PE COFF.
      This function is required for DWARF2 support, but there is
      no place to store this information in the COFF back end.
      Should enough other COFF targets add support for DWARF2,
@@ -884,8 +884,8 @@ bfd_get_sign_extend_vma (bfd *abfd)
   if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0
       || strcmp (name, "pe-i386") == 0
       || strcmp (name, "pei-i386") == 0
-      || strcmp (name, "pe-arm-little") == 0
-      || strcmp (name, "pei-arm-little") == 0)
+      || strcmp (name, "pe-arm-wince-little") == 0
+      || strcmp (name, "pei-arm-wince-little") == 0)
     return 1;
 
   bfd_set_error (bfd_error_wrong_format);
index 407004f..40420fa 100644 (file)
@@ -163,6 +163,19 @@ coff_arm_reloc (bfd *abfd,
 
 /* These most certainly belong somewhere else. Just had to get rid of
    the manifest constants in the code.  */
+
+#ifdef ARM_WINCE
+
+#define ARM_26D      0
+#define ARM_32       1
+#define ARM_RVA32    2
+#define ARM_26      3
+#define ARM_THUMB12  4
+#define ARM_SECTION  14
+#define ARM_SECREL   15
+
+#else
+
 #define ARM_8        0
 #define ARM_16       1
 #define ARM_32       2
@@ -179,20 +192,6 @@ coff_arm_reloc (bfd *abfd,
 #define ARM_THUMB12 13
 #define ARM_THUMB23 14
 
-#ifdef ARM_WINCE
-#undef  ARM_32
-#undef  ARM_RVA32
-#undef  ARM_26
-#undef  ARM_THUMB12
-#undef  ARM_26D
-
-#define ARM_26D      0
-#define ARM_32       1
-#define ARM_RVA32    2
-#define ARM_26      3
-#define ARM_THUMB12  4
-#define ARM_SECTION  14
-#define ARM_SECREL   15
 #endif
 
 static bfd_reloc_status_type aoutarm_fix_pcrel_26_done
index 5b08890..22a7a11 100644 (file)
@@ -225,8 +225,8 @@ case "${targ}" in
     targ_cflags=-DARM_COFF_BUGFIX
     ;;
   arm-wince-pe | arm-*-wince)
-    targ_defvec=armpe_little_vec
-    targ_selvecs="armpe_little_vec armpe_big_vec armpei_little_vec armpei_big_vec"
+    targ_defvec=arm_wince_pe_little_vec
+    targ_selvecs="arm_wince_pe_little_vec arm_wince_pe_big_vec arm_wince_pei_little_vec arm_wince_pei_big_vec"
     targ_underscore=no
     targ_cflags="-DARM_WINCE -DARM_COFF_BUGFIX"
     ;;
index b047aa3..c7d5a43 100755 (executable)
     arm_epoc_pe_little_vec)    tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
     arm_epoc_pei_big_vec)      tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
     arm_epoc_pei_little_vec)   tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pe_big_vec)      tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pe_little_vec)   tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pei_big_vec)     tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pei_little_vec)  tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
     armcoff_big_vec)           tb="$tb coff-arm.lo cofflink.lo " ;;
     armcoff_little_vec)                tb="$tb coff-arm.lo cofflink.lo " ;;
     armnetbsd_vec)             tb="$tb armnetbsd.lo aout32.lo" ;;
index bf6d8eb..95b126a 100644 (file)
@@ -573,6 +573,10 @@ do
     arm_epoc_pe_little_vec)    tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
     arm_epoc_pei_big_vec)      tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
     arm_epoc_pei_little_vec)   tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pe_big_vec)      tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pe_little_vec)   tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pei_big_vec)     tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
+    arm_wince_pei_little_vec)  tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
     armcoff_big_vec)           tb="$tb coff-arm.lo cofflink.lo " ;;
     armcoff_little_vec)                tb="$tb coff-arm.lo cofflink.lo " ;;
     armnetbsd_vec)             tb="$tb armnetbsd.lo aout32.lo" ;;
diff --git a/bfd/pe-arm-wince.c b/bfd/pe-arm-wince.c
new file mode 100644 (file)
index 0000000..57f8bcf
--- /dev/null
@@ -0,0 +1,35 @@
+/* BFD back-end for ARM WINCE PE files.
+   Copyright 2006 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#define TARGET_UNDERSCORE    0
+#define USER_LABEL_PREFIX    ""
+
+#define TARGET_LITTLE_SYM    arm_wince_pe_little_vec
+#define TARGET_LITTLE_NAME   "pe-arm-wince-little"
+#define TARGET_BIG_SYM       arm_wince_pe_big_vec
+#define TARGET_BIG_NAME      "pe-arm-wince-big"
+
+#define bfd_arm_allocate_interworking_sections \
+  bfd_arm_wince_pe_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+  bfd_arm_wince_pe_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+  bfd_arm_wince_pe_process_before_allocation
+
+#include "pe-arm.c"
index 41c7ba9..29fdfed 100644 (file)
@@ -17,6 +17,17 @@ 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+/* Do this before including bfd.h, so we prototype the right functions.  */
+
+#ifndef bfd_arm_allocate_interworking_sections
+#define bfd_arm_allocate_interworking_sections \
+  bfd_armpe_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+  bfd_armpe_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+  bfd_armpe_process_before_allocation
+#endif
+
 #include "bfd.h"
 #include "sysdep.h"
 
@@ -31,19 +42,6 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #define PCRELOFFSET          TRUE
 #define COFF_LONG_SECTION_NAMES
 
-#ifndef bfd_arm_allocate_interworking_sections
-#define bfd_arm_allocate_interworking_sections \
-       bfd_arm_pe_allocate_interworking_sections
-#define bfd_arm_get_bfd_for_interworking \
-       bfd_arm_pe_get_bfd_for_interworking
-#define bfd_arm_process_before_allocation \
-       bfd_arm_pe_process_before_allocation
-#endif
-
-#ifdef ARM_WINCE
-#define TARGET_UNDERSCORE 0
-#endif
-
 #define COFF_SECTION_ALIGNMENT_ENTRIES \
 { COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
diff --git a/bfd/pei-arm-wince.c b/bfd/pei-arm-wince.c
new file mode 100644 (file)
index 0000000..48269c9
--- /dev/null
@@ -0,0 +1,28 @@
+/* BFD back-end for ARM WINCE PE IMAGE COFF files.
+   Copyright 2006 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#define TARGET_UNDERSCORE    0
+#define USER_LABEL_PREFIX    ""
+
+#define TARGET_LITTLE_SYM    arm_wince_pei_little_vec
+#define TARGET_LITTLE_NAME   "pei-arm-wince-little"
+#define TARGET_BIG_SYM       arm_wince_pei_big_vec
+#define TARGET_BIG_NAME      "pei-arm-wince-big"
+
+#include "pei-arm.c"
index cba19de..79a1e3c 100644 (file)
@@ -32,10 +32,6 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #define PCRELOFFSET        TRUE
 #define COFF_LONG_SECTION_NAMES
 
-#ifdef ARM_WINCE
-# define TARGET_UNDERSCORE 0
-#endif
-
 #define COFF_SECTION_ALIGNMENT_ENTRIES \
 { COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
index 306bf27..3471c25 100644 (file)
@@ -541,6 +541,10 @@ extern const bfd_target arm_epoc_pe_big_vec;
 extern const bfd_target arm_epoc_pe_little_vec;
 extern const bfd_target arm_epoc_pei_big_vec;
 extern const bfd_target arm_epoc_pei_little_vec;
+extern const bfd_target arm_wince_pe_big_vec;
+extern const bfd_target arm_wince_pe_little_vec;
+extern const bfd_target arm_wince_pei_big_vec;
+extern const bfd_target arm_wince_pei_little_vec;
 extern const bfd_target armcoff_big_vec;
 extern const bfd_target armcoff_little_vec;
 extern const bfd_target armnetbsd_vec;
@@ -844,6 +848,10 @@ static const bfd_target * const _bfd_target_vector[] = {
        &arm_epoc_pe_little_vec,
        &arm_epoc_pei_big_vec,
        &arm_epoc_pei_little_vec,
+       &arm_wince_pe_big_vec,
+       &arm_wince_pe_little_vec,
+       &arm_wince_pei_big_vec,
+       &arm_wince_pei_little_vec,
        &armcoff_big_vec,
        &armcoff_little_vec,
        &armnetbsd_vec,
index 1d6be27..fc360b0 100644 (file)
@@ -1,3 +1,10 @@
+2006-08-21  Pedro Alves  <pedro_alves@portugalmail.pt>
+
+       * configure.in: Split arm-pe and arm-wince-pe. Build dlltool
+       with -DDLLTOOL_ARM_WINCE for Windows CE case.
+       * configure: Regenerate.
+       * dlltool.c: Add support for arm-wince.
+
 2006-08-15  Nick Clifton  <nickc@redhat.com>
 
        PR binutils/3039
index 1823337..505a1e4 100755 (executable)
@@ -5308,8 +5308,9 @@ INCINTL=
 XGETTEXT=
 GMSGFMT=
 POSUB=
-if test -f ../intl/config.intl; then
-  . ../intl/config.intl
+
+if test -f  ../intl/config.intl; then
+  .  ../intl/config.intl
 fi
 echo "$as_me:$LINENO: checking whether NLS is requested" >&5
 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
@@ -8429,7 +8430,12 @@ do
          DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
          BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
          ;;
-       arm-*-pe* | arm-*-wince)
+       arm-wince-pe* | arm-*-wince)
+         BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+         DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM"
+         BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+         ;;
+       arm-*-pe*)
          BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
          DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
          BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
index 0883d6b..95a26cc 100644 (file)
@@ -242,7 +242,12 @@ changequote([,])dnl
          DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
          BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
          ;;
-       arm-*-pe* | arm-*-wince)
+       arm-wince-pe* | arm-*-wince)
+         BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+         DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM"
+         BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+         ;;
+       arm-*-pe*)
          BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
          DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
          BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
index 6c231f6..8cf972e 100644 (file)
@@ -385,8 +385,10 @@ static FILE *output_def;
 static FILE *base_file;
 
 #ifdef DLLTOOL_ARM
-#ifdef DLLTOOL_ARM_EPOC
+#if defined(DLLTOOL_ARM_EPOC)
 static const char *mname = "arm-epoc";
+#elif defined(DLLTOOL_ARM_WINCE)
+static const char *mname = "arm-wince";
 #else
 static const char *mname = "arm";
 #endif
@@ -629,6 +631,15 @@ mtable[] =
     arm_jtab, sizeof (arm_jtab), 8
   }
   ,
+  {
+#define MARM_WINCE 10
+    "arm-wince", ".byte", ".short", ".long", ".asciz", "@",
+    "ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long",
+    ".global", ".space", ".align\t2",".align\t4", "-mapcs-32",
+    "pe-arm-wince-little", bfd_arch_arm,
+    arm_jtab, sizeof (arm_jtab), 8
+  }
+  ,
   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 };
 
@@ -760,6 +771,7 @@ rvaafter (int machine)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_EPOC:
+    case MARM_WINCE:
       break;
     default:
       /* xgettext:c-format */
@@ -784,6 +796,7 @@ rvabefore (int machine)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_EPOC:
+    case MARM_WINCE:
       return ".rva\t";
     default:
       /* xgettext:c-format */
@@ -807,6 +820,7 @@ asm_prefix (int machine, const char *name)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_EPOC:
+    case MARM_WINCE:
       break;
     case M386:
       /* Symbol names starting with ? do not have a leading underscore. */
index 6c7928d..d9b215f 100644 (file)
@@ -1,3 +1,10 @@
+2006-08-22  Pedro Alves  <pedro_alves@portugalmail.pt>
+
+       * Makefile.am (TARG_ENV_HFILES): Add te-wince-pe.h.
+       * Makefile.in: Regenerate.
+       * config/tc-arm.h [TARGET_FORMAT]: ARM wince bfd names were
+       renamed. Adjust.
+
 2006-08-16  Julian Brown  <julian@codesourcery.com>
 
        * config/tc-arm.c (md_assemble): Improve diagnostic when attempting
index 973b13e..dbf3dee 100644 (file)
@@ -381,7 +381,8 @@ TARG_ENV_HFILES = \
        config/te-sun3.h \
        config/te-svr4.h \
        config/te-symbian.h \
-       config/te-tmips.h
+       config/te-tmips.h \
+       config/te-wince-pe.h
 
 # Multi files in config
 
index 0cfadba..dd07dc6 100644 (file)
@@ -608,7 +608,8 @@ TARG_ENV_HFILES = \
        config/te-sun3.h \
        config/te-svr4.h \
        config/te-symbian.h \
-       config/te-tmips.h
+       config/te-tmips.h \
+       config/te-wince-pe.h
 
 
 # Multi files in config
index c04a35b..cf74326 100644 (file)
@@ -66,6 +66,8 @@ struct fix;
 # if defined TE_PE
 #  if defined TE_EPOC
 #   define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
+#  elif defined TE_WINCE
+#   define TARGET_FORMAT (target_big_endian ? "pe-arm-wince-big" : "pe-arm-wince-little")
 #  else
 #   define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little")
 #  endif
index 698f0eb..cadb3f0 100644 (file)
@@ -1,3 +1,21 @@
+2006-08-22  Pedro Alves  <pedro_alves@portugalmail.pt>
+
+       * Makefile.am: Split arm-wince into its own emulation.
+       * Makefile.in: Regenerate.
+       * configure.tgt: Set targ_emul to arm_wince_pe for ARM Windows
+       CE targets.
+       * pe-dll.c : Define PE_ARCH_arm_wince.
+       (pe_detail_list): Add PE_ARCH_arm_wince case.
+       (make_one): Handle PE_ARCH_arm_epoc and PE_ARCH_arm_wince cases.
+       * emulparams/arm_wince_pe.sh: New file.
+       * emultempl/pe.em: Handle new TARGET_IS_arm_wince_pe define.
+       Remap bfd_arm_allocate_interworking_sections,
+       bfd_arm_get_bfd_for_interworking and
+       bfd_arm_process_before_allocation for arm-pe and arm-wince-pe    
+       targets too.
+       (gld_${EMULATION_NAME}_recognized_file): Handle arm-wince and    
+       arm-epoc bfd format names.
+
 2006-08-18  Paul Brook  <paul@codesourcery.com>
 
        * emultempl/armelf.em (arm_elf_before_allocation): Call
index f91e897..29738a6 100644 (file)
@@ -108,6 +108,7 @@ ALL_EMULATIONS = \
        ealpha.o \
        earcelf.o \
        earm_epoc_pe.o \
+       earm_wince_pe.o \
        earmaoutb.o \
        earmaoutl.o \
        earmcoff.o \
@@ -569,6 +570,9 @@ earmnto.c: $(srcdir)/emulparams/armnto.sh \
 earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
   $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+  $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
 earmpe.c: $(srcdir)/emulparams/armpe.sh \
   $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} armpe "$(tdir_armpe)"
index afc3f5e..63d0192 100644 (file)
@@ -332,6 +332,7 @@ ALL_EMULATIONS = \
        ealpha.o \
        earcelf.o \
        earm_epoc_pe.o \
+       earm_wince_pe.o \
        earmaoutb.o \
        earmaoutl.o \
        earmcoff.o \
@@ -1380,6 +1381,9 @@ earmnto.c: $(srcdir)/emulparams/armnto.sh \
 earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
   $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+  $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
 earmpe.c: $(srcdir)/emulparams/armpe.sh \
   $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} armpe "$(tdir_armpe)"
diff --git a/ld/emulparams/arm_wince_pe.sh b/ld/emulparams/arm_wince_pe.sh
new file mode 100644 (file)
index 0000000..2d0019f
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=arm
+SCRIPT_NAME=pe
+
+OUTPUT_FORMAT="pei-arm-wince-little"
+LITTLE_OUTPUT_FORMAT="pei-arm-wince-little"
+BIG_OUTPUT_FORMAT="pei-arm-wince-big"
+
+RELOCATEABLE_OUTPUT_FORMAT="pe-arm-wince-little"
+
+TEMPLATE_NAME=pe
+ENTRY="WinMainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"\"
+TARGET_PAGE_SIZE=0x1000
index 90e9478..0e75e18 100644 (file)
@@ -37,15 +37,18 @@ cat >>e${EMULATION_NAME}.c <<EOF
 #define TARGET_IS_${EMULATION_NAME}
 
 /* Do this before including bfd.h, so we prototype the right functions.  */
-#ifdef TARGET_IS_arm_epoc_pe
-#define bfd_arm_pe_allocate_interworking_sections \
-       bfd_arm_epoc_pe_allocate_interworking_sections
-#define bfd_arm_pe_get_bfd_for_interworking \
-       bfd_arm_epoc_pe_get_bfd_for_interworking
-#define bfd_arm_pe_process_before_allocation \
-       bfd_arm_epoc_pe_process_before_allocation
-#endif
 
+#if defined(TARGET_IS_armpe) \
+    || defined(TARGET_IS_arm_epoc_pe) \
+    || defined(TARGET_IS_arm_wince_pe)
+#define bfd_arm_allocate_interworking_sections \
+       bfd_${EMULATION_NAME}_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+       bfd_${EMULATION_NAME}_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+       bfd_${EMULATION_NAME}_process_before_allocation
+#endif
 #include "bfd.h"
 #include "sysdep.h"
 #include "bfdlink.h"
@@ -85,10 +88,12 @@ cat >>e${EMULATION_NAME}.c <<EOF
 #define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
 #endif
 
-#if defined(TARGET_IS_i386pe)
-#define DLL_SUPPORT
-#endif
-#if defined(TARGET_IS_shpe) || defined(TARGET_IS_mipspe) || defined(TARGET_IS_armpe)
+#if defined(TARGET_IS_i386pe) \
+    || defined(TARGET_IS_shpe) \
+    || defined(TARGET_IS_mipspe) \
+    || defined(TARGET_IS_armpe) \
+    || defined(TARGET_IS_arm_epoc_pe) \
+    || defined(TARGET_IS_arm_wince_pe)
 #define DLL_SUPPORT
 #endif
 
@@ -99,7 +104,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
 #undef PE_DEF_SECTION_ALIGNMENT
 #undef PE_DEF_FILE_ALIGNMENT
 #define NT_EXE_IMAGE_BASE              0x00010000
-#ifdef TARGET_IS_armpe
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
 #define PE_DEF_SECTION_ALIGNMENT       0x00001000
 #define        PE_DEF_SUBSYSTEM                9
 #else
@@ -139,7 +145,7 @@ gld_${EMULATION_NAME}_before_parse (void)
   link_info.pei386_runtime_pseudo_reloc = -1;
 
 #if (PE_DEF_SUBSYSTEM == 9) || (PE_DEF_SUBSYSTEM == 2)
-#if defined TARGET_IS_mipspe || defined TARGET_IS_armpe
+#if defined TARGET_IS_mipspe || defined TARGET_IS_armpe || defined TARGET_IS_arm_wince_pe
   lang_default_entry ("WinMainCRTStartup");
 #else
   lang_default_entry ("_WinMainCRTStartup");
@@ -282,7 +288,7 @@ static definfo init[] =
   D(MinorOperatingSystemVersion,"__minor_os_version__", 0),
   D(MajorImageVersion,"__major_image_version__", 1),
   D(MinorImageVersion,"__minor_image_version__", 0),
-#ifdef TARGET_IS_armpe
+#if defined(TARGET_IS_armpe)  || defined(TARGET_IS_arm_wince_pe)
   D(MajorSubsystemVersion,"__major_subsystem_version__", 3),
 #else
   D(MajorSubsystemVersion,"__major_subsystem_version__", 4),
@@ -997,22 +1003,21 @@ gld_${EMULATION_NAME}_after_open (void)
 
   pe_find_data_imports ();
 
-#if ! (defined (TARGET_IS_i386pe) || defined (TARGET_IS_armpe))
-  if (link_info.shared)
-#else
+#if defined (TARGET_IS_i386pe) \
+    || defined (TARGET_IS_armpe) \
+    || defined (TARGET_IS_arm_epoc_pe) \
+    || defined (TARGET_IS_arm_wince_pe)
   if (!link_info.relocatable)
-#endif
     pe_dll_build_sections (output_bfd, &link_info);
-
-#ifndef TARGET_IS_i386pe
-#ifndef TARGET_IS_armpe
   else
     pe_exe_build_sections (output_bfd, &link_info);
+#else
+  if (link_info.shared)
+    pe_dll_build_sections (output_bfd, &link_info);
 #endif
-#endif
-#endif
+#endif /* DLL_SUPPORT */
 
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
   if (strstr (bfd_get_target (output_bfd), "arm") == NULL)
     {
       /* The arm backend needs special fields in the output hash structure.
@@ -1026,7 +1031,7 @@ gld_${EMULATION_NAME}_after_open (void)
     /* Find a BFD that can hold the interworking stubs.  */
     LANG_FOR_EACH_INPUT_STATEMENT (is)
       {
-       if (bfd_arm_pe_get_bfd_for_interworking (is->the_bfd, & link_info))
+       if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
          break;
       }
   }
@@ -1267,7 +1272,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
   ppc_allocate_toc_section (&link_info);
 #endif /* TARGET_IS_ppcpe */
 
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
   /* FIXME: we should be able to set the size of the interworking stub
      section.
 
@@ -1277,7 +1282,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
   {
     LANG_FOR_EACH_INPUT_STATEMENT (is)
       {
-       if (! bfd_arm_pe_process_before_allocation
+       if (! bfd_arm_process_before_allocation
            (is->the_bfd, & link_info, support_old_code))
          {
            /* xgettext:c-format */
@@ -1288,8 +1293,8 @@ gld_${EMULATION_NAME}_before_allocation (void)
   }
 
   /* We have seen it all. Allocate it, and carry on.  */
-  bfd_arm_pe_allocate_interworking_sections (& link_info);
-#endif /* TARGET_IS_armpe */
+  bfd_arm_allocate_interworking_sections (& link_info);
+#endif /* TARGET_IS_armpe || TARGET_IS_arm_epoc_pe || TARGET_IS_arm_wince_pe */
 
   before_allocation_default ();
 }
@@ -1404,6 +1409,12 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
 #ifdef TARGET_IS_armpe
   pe_dll_id_target ("pei-arm-little");
 #endif
+#ifdef TARGET_IS_arm_epoc_pe
+  pe_dll_id_target ("epoc-pei-arm-little");
+#endif
+#ifdef TARGET_IS_arm_wince_pe
+  pe_dll_id_target ("pei-arm-wince-little");
+#endif
   if (bfd_get_format (entry->the_bfd) == bfd_object)
     {
       char fbuf[LD_PATHMAX + 1];
@@ -1424,7 +1435,7 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
 static void
 gld_${EMULATION_NAME}_finish (void)
 {
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
   struct bfd_link_hash_entry * h;
 
   if (thumb_entry_symbol != NULL)
@@ -1464,7 +1475,7 @@ gld_${EMULATION_NAME}_finish (void)
       else
        einfo (_("%P: warning: connot find thumb start symbol %s\n"), thumb_entry_symbol);
     }
-#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) */
+#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe) */
 
   finish_default ();
 
index 725d6c1..8af1b06 100644 (file)
@@ -207,6 +207,7 @@ static autofilter_entry_type autofilter_symbollist_i386[] =
 #define PE_ARCH_mips    3
 #define PE_ARCH_arm     4
 #define PE_ARCH_arm_epoc 5
+#define PE_ARCH_arm_wince 6
 
 static pe_details_type pe_detail_list[] =
 {
@@ -255,6 +256,15 @@ static pe_details_type pe_detail_list[] =
     FALSE,
     autofilter_symbollist_generic
   },
+  {
+    "pei-arm-wince-little",
+    "pe-arm-wince-little",
+    2,  /* ARM_RVA32 on Windows CE, see bfd/coff-arm.c.  */
+    PE_ARCH_arm_wince,
+    bfd_arch_arm,
+    FALSE,
+    autofilter_symbollist_generic
+  },
   { NULL, NULL, 0, 0, 0, FALSE, NULL }
 };
 
@@ -1837,6 +1847,8 @@ make_one (def_file_export *exp, bfd *parent)
       jmp_byte_count = sizeof (jmp_mips_bytes);
       break;
     case PE_ARCH_arm:
+    case PE_ARCH_arm_epoc:
+    case PE_ARCH_arm_wince:
       jmp_bytes = jmp_arm_bytes;
       jmp_byte_count = sizeof (jmp_arm_bytes);
       break;
@@ -1914,6 +1926,8 @@ make_one (def_file_export *exp, bfd *parent)
          quick_reloc (abfd, 4, BFD_RELOC_LO16, 2);
          break;
        case PE_ARCH_arm:
+       case PE_ARCH_arm_epoc:
+       case PE_ARCH_arm_wince:
          quick_reloc (abfd, 8, BFD_RELOC_32, 2);
          break;
        default: