This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
Add support for WinCE binaries to include
- To: binutils at sourceware dot cygnus dot com
- Subject: Add support for WinCE binaries to include
- From: Nick Clifton <nickc at cygnus dot com>
- Date: Tue, 22 Feb 2000 14:53:27 -0800
Hi Guys,
Unless anybody has any objections I would like to check in the
following patch. It adds support to the COFF header files for the
SH and ARM ports for Microsoft's CE format, and in particular for
when this format is being used for WinCE binaries. (Patches for
other binutils subdirectories will be following shortly).
Cheers
Nick
2000-02-22 Nick Clifton <nickc@cygnus.com> DJ Delorie <dj@cygnus.com>
* sh.h: Add Windows CE definitions.
* arm.h: Add Windows CE definitions.
Index: include/coff/sh.h
===================================================================
RCS file: /cvs/src//src/include/coff/sh.h,v
retrieving revision 1.1.1.1
diff -p -w -r1.1.1.1 sh.h
*** sh.h 1999/05/03 07:29:03 1.1.1.1
--- sh.h 2000/02/22 22:48:10
*************** struct external_filehdr {
*** 16,25 ****
--- 16,27 ----
#define SH_ARCH_MAGIC_BIG 0x0500
#define SH_ARCH_MAGIC_LITTLE 0x0550 /* Little endian SH */
+ #define SH_ARCH_MAGIC_WINCE 0x01a2 /* Windows CE - little endian */
#define SHBADMAG(x) \
(((x).f_magic!=SH_ARCH_MAGIC_BIG) && \
+ ((x).f_magic!=SH_ARCH_MAGIC_WINCE) && \
((x).f_magic!=SH_ARCH_MAGIC_LITTLE))
#define FILHDR struct external_filehdr
*************** AOUTHDR;
*** 48,53 ****
--- 50,61 ----
+ /* Define some NT default values. */
+ /* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
+ #define NT_SECTION_ALIGNMENT 0x1000
+ #define NT_FILE_ALIGNMENT 0x200
+ #define NT_DEF_RESERVE 0x100000
+ #define NT_DEF_COMMIT 0x1000
/********************** SECTION HEADER **********************/
*************** struct external_lineno {
*** 89,102 ****
--- 97,122 ----
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
char l_paddr[4]; /* (physical) address of line number */
} l_addr;
+ #ifdef COFF_WITH_PE
+ char l_lnno[2]; /* line number */
+ #else
char l_lnno[4]; /* line number */
+ #endif
};
#define GET_LINENO_LNNO(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) (ext->l_lnno));
#define PUT_LINENO_LNNO(abfd,val, ext) bfd_h_put_32(abfd,val, (bfd_byte *) (ext->l_lnno));
#define LINENO struct external_lineno
+ #ifdef COFF_WITH_PE
+ #define LINESZ 6
+ #undef GET_LINENO_LNNO
+ #define GET_LINENO_LNNO(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *) (ext->l_lnno));
+ #undef PUT_LINENO_LNNO
+ #define PUT_LINENO_LNNO(abfd,val, ext) bfd_h_put_16(abfd,val, (bfd_byte *) (ext->l_lnno));
+ #else
#define LINESZ 8
+ #endif
/********************** SYMBOLS **********************/
*************** union external_auxent {
*** 163,168 ****
--- 183,191 ----
char x_scnlen[4]; /* section length */
char x_nreloc[2]; /* # relocation entries */
char x_nlinno[2]; /* # line numbers */
+ char x_checksum[4]; /* section COMDAT checksum */
+ char x_associated[2]; /* COMDAT associated section index */
+ char x_comdat[1]; /* COMDAT selection number */
} x_scn;
struct {
*************** union external_auxent {
*** 187,192 ****
--- 210,216 ----
types on the h8 don't have room in the instruction for the entire
offset - eg the strange jump and high page addressing modes */
+ #ifndef COFF_WITH_PE
struct external_reloc {
char r_vaddr[4];
char r_symndx[4];
*************** struct external_reloc {
*** 194,207 ****
--- 218,243 ----
char r_type[2];
char r_stuff[2];
};
+ #else
+ struct external_reloc {
+ char r_vaddr[4];
+ char r_symndx[4];
+ char r_type[2];
+ };
+ #endif
#define RELOC struct external_reloc
+ #ifdef COFF_WITH_PE
+ #define RELSZ 10
+ #else
#define RELSZ 16
+ #endif
/* SH relocation types. Not all of these are actually used. */
#define R_SH_UNUSED 0 /* only used internally */
+ #define R_SH_IMM32CE 2 /* 32 bit immediate for WinCE */
#define R_SH_PCREL8 3 /* 8 bit pcrel */
#define R_SH_PCREL16 4 /* 16 bit pcrel */
#define R_SH_HIGH8 5 /* high 8 bits of 24 bit address */
*************** struct external_reloc {
*** 213,218 ****
--- 249,255 ----
#define R_SH_PCDISP 12 /* 12 bit branch */
#define R_SH_IMM32 14 /* 32 bit immediate */
#define R_SH_IMM8 16 /* 8 bit immediate */
+ #define R_SH_IMAGEBASE 16 /* Windows CE */
#define R_SH_IMM8BY2 17 /* 8 bit immediate *2 */
#define R_SH_IMM8BY4 18 /* 8 bit immediate *4 */
#define R_SH_IMM4 19 /* 4 bit immediate */
Index: include/coff/arm.h
===================================================================
RCS file: /cvs/src//src/include/coff/arm.h,v
retrieving revision 1.5
diff -p -w -r1.5 arm.h
*** arm.h 1999/07/17 15:40:17 1.5
--- arm.h 2000/02/22 22:48:10
*************** struct external_filehdr
*** 89,94 ****
--- 89,100 ----
#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC))
+ #define ARMPEMAGIC 0x1c0
+ #define THUMBPEMAGIC 0x1c2
+
+ #undef ARMBADMAG
+ #define ARMBADMAG(x) (((x).f_magic != ARMMAGIC) && ((x).f_magic != ARMPEMAGIC) && ((x).f_magic != THUMBPEMAGIC))
+
#define FILHDR struct external_filehdr
#define FILHSZ 20
*************** union external_auxent
*** 272,277 ****
--- 278,295 ----
#define _ETEXT "etext"
/********************** RELOCATION DIRECTIVES **********************/
+ #ifdef ARM_WINCE
+ struct external_reloc
+ {
+ char r_vaddr[4];
+ char r_symndx[4];
+ char r_type[2];
+ };
+
+ #define RELOC struct external_reloc
+ #define RELSZ 10
+
+ #else
struct external_reloc
{
char r_vaddr[4];
*************** struct external_reloc
*** 282,284 ****
--- 300,303 ----
#define RELOC struct external_reloc
#define RELSZ 14
+ #endif