aboutsummaryrefslogtreecommitdiff
path: root/include/coff/sh.h
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2000-02-24 19:49:18 +0000
committerNick Clifton <nickc@redhat.com>2000-02-24 19:49:18 +0000
commit056350c6bd025c6b73b25f39247c890581b215b1 (patch)
tree3ee95df831c15874e7550cddf4a55cdc2002dfdd /include/coff/sh.h
parent8a0e0f38af77d6c38cdf9a257b55b4a06ce09124 (diff)
downloadgdb-056350c6bd025c6b73b25f39247c890581b215b1.zip
gdb-056350c6bd025c6b73b25f39247c890581b215b1.tar.gz
gdb-056350c6bd025c6b73b25f39247c890581b215b1.tar.bz2
Add support for WinCE targeted toolchains.
Diffstat (limited to 'include/coff/sh.h')
-rw-r--r--include/coff/sh.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/include/coff/sh.h b/include/coff/sh.h
index 41957df..2065b62 100644
--- a/include/coff/sh.h
+++ b/include/coff/sh.h
@@ -16,10 +16,12 @@ struct external_filehdr {
#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
@@ -48,6 +50,12 @@ AOUTHDR;
+/* 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 **********************/
@@ -89,14 +97,26 @@ struct external_lineno {
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 **********************/
@@ -163,6 +183,9 @@ union external_auxent {
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 {
@@ -187,6 +210,7 @@ union external_auxent {
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];
@@ -194,14 +218,26 @@ struct external_reloc {
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 */
@@ -213,6 +249,7 @@ struct external_reloc {
#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 */