X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Felf%2Fsh.h;h=bab09284265b1808ade17c3339109bb0fa260a0e;hb=f6f9408fbfe7631114ec914fbe30f2c60d3150e1;hp=dd19b765f33f56a0bb0f7dca7e6f3bfcacebe265;hpb=f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2;p=deliverable%2Fbinutils-gdb.git diff --git a/include/elf/sh.h b/include/elf/sh.h index dd19b765f3..bab0928426 100644 --- a/include/elf/sh.h +++ b/include/elf/sh.h @@ -1,5 +1,5 @@ /* SH ELF support for BFD. - Copyright 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright 1998, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -27,28 +27,51 @@ #define EF_SH1 1 #define EF_SH2 2 #define EF_SH3 3 -#define EF_SH_HAS_DSP(flags) ((flags) & 4) #define EF_SH_DSP 4 #define EF_SH3_DSP 5 -#define EF_SH_HAS_FP(flags) ((flags) & 8) +#define EF_SH4AL_DSP 6 #define EF_SH3E 8 #define EF_SH4 9 +#define EF_SH2E 11 +#define EF_SH4A 12 + +#define EF_SH4_NOFPU 16 +#define EF_SH4A_NOFPU 17 +#define EF_SH4_NOMMU_NOFPU 18 +#define EF_SH3_NOMMU 20 /* This one can only mix in objects from other EF_SH5 objects. */ #define EF_SH5 10 -#define EF_SH_MERGE_MACH(mach1, mach2) \ - (((((mach1) == EF_SH3 || (mach1) == EF_SH_UNKNOWN) && (mach2) == EF_SH_DSP) \ - || ((mach1) == EF_SH_DSP \ - && ((mach2) == EF_SH3 || (mach2) == EF_SH_UNKNOWN))) \ - ? EF_SH3_DSP \ - : (((mach1) < EF_SH3 && (mach2) == EF_SH_UNKNOWN) \ - || ((mach2) < EF_SH3 && (mach1) == EF_SH_UNKNOWN)) \ - ? EF_SH3 \ - : (((mach1) == EF_SH3E && (mach2) == EF_SH_UNKNOWN) \ - || ((mach2) == EF_SH3E && (mach1) == EF_SH_UNKNOWN)) \ - ? EF_SH4 \ - : ((mach1) > (mach2) ? (mach1) : (mach2))) +/* Define the mapping from ELF to bfd mach numbers. + bfd_mach_* are defined in bfd_in2.h (generated from + archures.c). */ +#define EF_SH_BFD_TABLE \ +/* EF_SH_UNKNOWN */ bfd_mach_sh3 , \ +/* EF_SH1 */ bfd_mach_sh , \ +/* EF_SH2 */ bfd_mach_sh2 , \ +/* EF_SH3 */ bfd_mach_sh3 , \ +/* EF_SH_DSP */ bfd_mach_sh_dsp , \ +/* EF_SH3_DSP */ bfd_mach_sh3_dsp , \ +/* EF_SHAL_DSP */ bfd_mach_sh4al_dsp , \ +/* 7 */ 0, \ +/* EF_SH3E */ bfd_mach_sh3e , \ +/* EF_SH4 */ bfd_mach_sh4 , \ +/* EF_SH5 */ 0, \ +/* EF_SH2E */ bfd_mach_sh2e , \ +/* EF_SH4A */ bfd_mach_sh4a , \ +/* 13, 14, 15 */ 0, 0, 0, \ +/* EF_SH4_NOFPU */ bfd_mach_sh4_nofpu , \ +/* EF_SH4A_NOFPU */ bfd_mach_sh4a_nofpu , \ +/* EF_SH4_NOMMU_NOFPU */ bfd_mach_sh4_nommu_nofpu, \ +/* 19 */ 0, \ +/* EF_SH3_NOMMU */ bfd_mach_sh3_nommu + +/* Convert arch_sh* into EF_SH*. */ +int sh_find_elf_flags (unsigned int arch_set); + +/* Convert bfd_mach_* into EF_SH*. */ +int sh_elf_get_flags_from_mach (unsigned long mach); /* Flags for the st_other symbol field. Keep away from the STV_ visibility flags (bit 0..1). */ @@ -74,8 +97,8 @@ #include "elf/reloc-macros.h" /* Relocations. */ -/* Relocations 25ff are GNU extensions. - 25..33 are used for relaxation and use the same constants as COFF uses. */ +/* Relocations 10-32 and 128-255 are GNU extensions. + 25..32 and 10 are used for relaxation. */ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_NONE, 0) RELOC_NUMBER (R_SH_DIR32, 1) @@ -87,8 +110,16 @@ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_DIR8BP, 7) RELOC_NUMBER (R_SH_DIR8W, 8) RELOC_NUMBER (R_SH_DIR8L, 9) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 10) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 24) + + RELOC_NUMBER (R_SH_LOOP_START, 10) + RELOC_NUMBER (R_SH_LOOP_END, 11) + + FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12) + FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21) + + RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22) + RELOC_NUMBER (R_SH_GNU_VTENTRY, 23) + RELOC_NUMBER (R_SH_SWITCH8, 24) RELOC_NUMBER (R_SH_SWITCH16, 25) RELOC_NUMBER (R_SH_SWITCH32, 26) RELOC_NUMBER (R_SH_USES, 27) @@ -97,13 +128,19 @@ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_CODE, 30) RELOC_NUMBER (R_SH_DATA, 31) RELOC_NUMBER (R_SH_LABEL, 32) - RELOC_NUMBER (R_SH_SWITCH8, 33) - RELOC_NUMBER (R_SH_GNU_VTINHERIT, 34) - RELOC_NUMBER (R_SH_GNU_VTENTRY, 35) - RELOC_NUMBER (R_SH_LOOP_START, 36) - RELOC_NUMBER (R_SH_LOOP_END, 37) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 38) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 44) + + RELOC_NUMBER (R_SH_DIR16, 33) + RELOC_NUMBER (R_SH_DIR8, 34) + RELOC_NUMBER (R_SH_DIR8UL, 35) + RELOC_NUMBER (R_SH_DIR8UW, 36) + RELOC_NUMBER (R_SH_DIR8U, 37) + RELOC_NUMBER (R_SH_DIR8SW, 38) + RELOC_NUMBER (R_SH_DIR8S, 39) + RELOC_NUMBER (R_SH_DIR4UL, 40) + RELOC_NUMBER (R_SH_DIR4UW, 41) + RELOC_NUMBER (R_SH_DIR4U, 42) + RELOC_NUMBER (R_SH_PSHA, 43) + RELOC_NUMBER (R_SH_PSHL, 44) RELOC_NUMBER (R_SH_DIR5U, 45) RELOC_NUMBER (R_SH_DIR6U, 46) RELOC_NUMBER (R_SH_DIR6S, 47) @@ -111,7 +148,10 @@ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_DIR10SW, 49) RELOC_NUMBER (R_SH_DIR10SL, 50) RELOC_NUMBER (R_SH_DIR10SQ, 51) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 52) + FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52) + FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52) + RELOC_NUMBER (R_SH_DIR16S, 53) + FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54) FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143) RELOC_NUMBER (R_SH_TLS_GD_32, 144) RELOC_NUMBER (R_SH_TLS_LD_32, 145)