From dccc3e5d2c6059410c12feb9e5d26f3176334011 Mon Sep 17 00:00:00 2001 From: Joern Rennecke Date: Fri, 28 May 2004 12:32:08 +0000 Subject: [PATCH] 2004-05-28 Andrew Stubbs bfd: * Makefile.am: Regenerate dependencies. * Makefile.in: Regenerate. * archures.c: Add bfd_mach_sh3_nommu . * bfd-in2.h: Regenerate. * cpu-sh.c: Add sh3-nommu architecture. (bfd_to_arch_table): Create new table. (sh_get_arch_from_bfd_mach): Create new function. (sh_get_arch_up_from_bfd_mach): Create new function. (sh_merge_bfd_arch): Create new function. * elf32-sh.c (sh_ef_bfd_table): Add table. (sh_elf_check_relocs): Replace switch statement with use of sh_ef_bfd_table . (sh_elf_get_flags_from_mach): Add new function. (sh_find_elf_flags): Likewise. (sh_elf_copy_private_data): Replace most of non-elf contents with a call to sh_merge_bfd_arch() . gas: * Makefile.am: Regenerate dependecies. * Makefile.in: Regenerate. * config/tc-sh.c (valid_arch): Make unsigned. (preset_target_arch): Likewise. (md_begin): Use new architecture flags system. (get_specific): Likewise. (assemble_ppi): Likewise. (md_assemble): Likewise. Also fix error check for bad opcodes. (md_parse_option): Likewise. Also generate -isa values according to the table in bfd/cpu-sh.c instead of just constants. Also allow -up ISA variants. (sh_elf_final_processing): Replace if-else chain with a call to sh_find_elf_flags(). * testsuite/gas/sh/arch: New directory. * testsuite/gas/sh/arch/arch.exp: New test script. * testsuite/gas/sh/arch/arch_expected.txt: New file. * testsuite/gas/sh/arch/sh.s: New file. * testsuite/gas/sh/arch/sh2.s: New file. * testsuite/gas/sh/arch/sh-dsp.s: New file. * testsuite/gas/sh/arch/sh2e.s: New file. * testsuite/gas/sh/arch/sh3-nommu.s: New file. * testsuite/gas/sh/arch/sh3.s: New file. * testsuite/gas/sh/arch/sh3-dsp.s: New file. * testsuite/gas/sh/arch/sh3e.s: New file. * testsuite/gas/sh/arch/sh4-nommu-nofpu.s: New file. * testsuite/gas/sh/arch/sh4-nofpu.s: New file. * testsuite/gas/sh/arch/sh4.s: New file. * testsuite/gas/sh/arch/sh4a-nofpu.s: New file. * testsuite/gas/sh/arch/sh4al-dsp.s: New file. * testsuite/gas/sh/arch/sh4a.s: New file. include/elf: * sh.h (EF_SH_HAS_DSP): Remove. (EF_SH_HAS_FP): Remove. (EF_SH_MERGE_MACH): Remove. (EF_SH4_NOFPU): Convert to decimal. (EF_SH4A_NOFPU): Likewise. (EF_SH4_NOMMU_NOFPU): Likewise. (EF_SH3_NOMMU): Add new macro. (EF_SH_BFD_TABLE): Likewise. (sh_find_elf_flags): Add prototype. (sh_elf_get_flags_from_mach): Likewise. opcodes: * sh-dis.c (target_arch): Make unsigned. (print_insn_sh): Replace (most of) switch with a call to sh_get_arch_from_bfd_mach(). Also use new architecture flags system. * sh-opc.h: Redefine architecture flags values. Add sh3-nommu architecture. Reorganise _up macros so they make more visual sense. (SH_MERGE_ARCH_SET): Define new macro. (SH_VALID_BASE_ARCH_SET): Likewise. (SH_VALID_MMU_ARCH_SET): Likewise. (SH_VALID_CO_ARCH_SET): Likewise. (SH_VALID_ARCH_SET): Likewise. (SH_MERGE_ARCH_SET_VALID): Likewise. (SH_ARCH_SET_HAS_FPU): Likewise. (SH_ARCH_SET_HAS_DSP): Likewise. (SH_ARCH_UNKNOWN_ARCH): Likewise. (sh_get_arch_from_bfd_mach): Add prototype. (sh_get_arch_up_from_bfd_mach): Likewise. (sh_get_bfd_mach_from_arch_set): Likewise. (sh_merge_bfd_arc): Likewise. ld: * testsuite/ld-sh/arch/arch.exp: New test script. * testsuite/ld-sh/arch/arch_expected.txt: New file. * testsuite/ld-sh/arch/sh.s: New file. * testsuite/ld-sh/arch/sh2.s: New file. * testsuite/ld-sh/arch/sh-dsp.s: New file. * testsuite/ld-sh/arch/sh2e.s: New file. * testsuite/ld-sh/arch/sh3-nommu.s: New file. * testsuite/ld-sh/arch/sh3.s: New file. * testsuite/ld-sh/arch/sh3-dsp.s: New file. * testsuite/ld-sh/arch/sh3e.s: New file. * testsuite/ld-sh/arch/sh4-nommu-nofpu.s: New file. * testsuite/ld-sh/arch/sh4-nofpu.s: New file. * testsuite/ld-sh/arch/sh4.s: New file. * testsuite/ld-sh/arch/sh4a-nofpu.s: New file. * testsuite/ld-sh/arch/sh4al-dsp.s: New file. * testsuite/ld-sh/arch/sh4a.s: New file. --- include/elf/ChangeLog | 13 ++++++++ include/elf/sh.h | 72 ++++++++++++++++++++----------------------- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index 63ac68bdb..0e4120868 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,16 @@ +2004-05-28 Andrew Stubbs + + * sh.h (EF_SH_HAS_DSP): Remove. + (EF_SH_HAS_FP): Remove. + (EF_SH_MERGE_MACH): Remove. + (EF_SH4_NOFPU): Convert to decimal. + (EF_SH4A_NOFPU): Likewise. + (EF_SH4_NOMMU_NOFPU): Likewise. + (EF_SH3_NOMMU): Add new macro. + (EF_SH_BFD_TABLE): Likewise. + (sh_find_elf_flags): Add prototype. + (sh_elf_get_flags_from_mach): Likewise. + 2004-04-24 Chris Demetriou * mips.h (R_MIPS_PC32, R_MIPS_PC64, R_MIPS_GNU_REL_LO16) diff --git a/include/elf/sh.h b/include/elf/sh.h index c46a5ff14..bab092842 100644 --- a/include/elf/sh.h +++ b/include/elf/sh.h @@ -27,57 +27,51 @@ #define EF_SH1 1 #define EF_SH2 2 #define EF_SH3 3 -#define EF_SH_HAS_DSP(flags) (((flags) & EF_SH_MACH_MASK & ~3) == 4) #define EF_SH_DSP 4 #define EF_SH3_DSP 5 #define EF_SH4AL_DSP 6 -#define EF_SH_HAS_FP(flags) ((flags) & 8) #define EF_SH3E 8 #define EF_SH4 9 #define EF_SH2E 11 #define EF_SH4A 12 -#define EF_SH4_NOFPU 0x10 -#define EF_SH4A_NOFPU 0x11 -#define EF_SH4_NOMMU_NOFPU 0x12 +#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_SH2E && EF_SH_HAS_FP (mach2)) \ - ? (mach2) \ - : ((mach2) == EF_SH2E && EF_SH_HAS_FP (mach1)) \ - ? (mach1) \ - : (((mach1) == EF_SH2E && (mach2) == EF_SH_UNKNOWN) \ - || ((mach2) == EF_SH2E && (mach1) == EF_SH_UNKNOWN)) \ - ? EF_SH2E \ - : (((mach1) == EF_SH3E && (mach2) == EF_SH_UNKNOWN) \ - || ((mach2) == EF_SH3E && (mach1) == EF_SH_UNKNOWN)) \ - ? EF_SH4 \ - /* ??? SH4? Why not SH3E? */ \ - : ((((mach1) == EF_SH4_NOFPU || (mach1) == EF_SH4A_NOFPU) \ - && EF_SH_HAS_DSP (mach2)) \ - || (((mach2) == EF_SH4_NOFPU || (mach2) == EF_SH4A_NOFPU) \ - && EF_SH_HAS_DSP (mach1))) \ - ? EF_SH4AL_DSP \ - : ((mach1) == EF_SH4_NOFPU && EF_SH_HAS_FP (mach2)) \ - ? ((mach2) < EF_SH4A) ? EF_SH4 : (mach2) \ - : ((mach2) == EF_SH4_NOFPU && EF_SH_HAS_FP (mach1)) \ - ? ((mach1) < EF_SH4A) ? EF_SH4 : (mach1) \ - : ((mach1) == EF_SH4A_NOFPU && EF_SH_HAS_FP (mach2)) \ - ? ((mach2) <= EF_SH4A) ? EF_SH4A : (mach2) \ - : ((mach2) == EF_SH4A_NOFPU && EF_SH_HAS_FP (mach1)) \ - ? ((mach1) <= EF_SH4A) ? EF_SH4A : (mach1) \ - : (((mach1) == EF_SH2E ? 7 : (mach1)) > ((mach2) == EF_SH2E ? 7 : (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). */ -- 2.43.5