diff options
author | Nick Clifton <nickc@redhat.com> | 2006-08-21 08:12:46 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2006-08-21 08:12:46 +0000 |
commit | 7148cc28af43c6070b99597651dc49ca475907bb (patch) | |
tree | fceff3b05500433435b88419cc5cdd6c0c9b2217 /ld | |
parent | 1f01065bba420797cad00c29133c535ad7283a19 (diff) | |
download | gdb-7148cc28af43c6070b99597651dc49ca475907bb.zip gdb-7148cc28af43c6070b99597651dc49ca475907bb.tar.gz gdb-7148cc28af43c6070b99597651dc49ca475907bb.tar.bz2 |
bfd
* 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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 18 | ||||
-rw-r--r-- | ld/Makefile.am | 4 | ||||
-rw-r--r-- | ld/Makefile.in | 4 | ||||
-rw-r--r-- | ld/emulparams/arm_wince_pe.sh | 14 | ||||
-rw-r--r-- | ld/emultempl/pe.em | 75 | ||||
-rw-r--r-- | ld/pe-dll.c | 14 |
6 files changed, 97 insertions, 32 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 698f0eb..cadb3f0 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/Makefile.am b/ld/Makefile.am index f91e897..29738a6 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -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)" diff --git a/ld/Makefile.in b/ld/Makefile.in index afc3f5e..63d0192 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -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 index 0000000..2d0019f --- /dev/null +++ b/ld/emulparams/arm_wince_pe.sh @@ -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 diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index 90e9478..0e75e18 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -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 (); diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 725d6c1..8af1b06 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -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: |