* config/tc-sh.c (shl): Remove.

(big): New function.
	(little): Remove shl handling.  Emit error for endian mismatch.
	(md_show_usage): Add description of -big.
	(md_parse_option): Handle OPTION_BIG.  Remove shl handling.
	(OPTION_BIG): Add.
	(md_pseudo_table): Add .big.
	(md_longopts): Add -big.
	(md_begin): Don't set target_big_endian here.
	* config/tc-sh.h (TARGET_BYTES_BIG_ENDIAN): Remove.
	(LISTING_HEADER, COFF_MAGIC, TARGET_FORMAT): Use target_big_endian.
	(shl): Remove.
	* configure.in (endian): Default is big.
	(sh-*-pe*): Little endian.
	(cpu_type): Set sh for target sh*.
	* configure: Regenerate.
This commit is contained in:
Hans-Peter Nilsson 2001-10-16 02:36:20 +00:00
parent 1aa20aa88f
commit 05982cacb9
5 changed files with 223 additions and 192 deletions

View File

@ -1,3 +1,23 @@
2001-10-16 NIIBE Yutaka <gniibe@m17n.org>,
Hans-Peter Nilsson <hp@bitrange.com>
* config/tc-sh.c (shl): Remove.
(big): New function.
(little): Remove shl handling. Emit error for endian mismatch.
(md_show_usage): Add description of -big.
(md_parse_option): Handle OPTION_BIG. Remove shl handling.
(OPTION_BIG): Add.
(md_pseudo_table): Add .big.
(md_longopts): Add -big.
(md_begin): Don't set target_big_endian here.
* config/tc-sh.h (TARGET_BYTES_BIG_ENDIAN): Remove.
(LISTING_HEADER, COFF_MAGIC, TARGET_FORMAT): Use target_big_endian.
(shl): Remove.
* configure.in (endian): Default is big.
(sh-*-pe*): Little endian.
(cpu_type): Set sh for target sh*.
* configure: Regenerate.
2001-10-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* config/tc-mips.c (md_apply_fix): Preliminary handling of NewABI

View File

@ -57,6 +57,7 @@ static void s_uacons PARAMS ((int));
static sh_opcode_info *find_cooked_opcode PARAMS ((char **));
static unsigned int assemble_ppi PARAMS ((char *, sh_opcode_info *));
static void little PARAMS ((int));
static void big PARAMS ((int));
static bfd_reloc_code_real_type sh_elf_suffix
PARAMS ((char **str_p, expressionS *, expressionS *new_exp_p));
static int parse_reg PARAMS ((char *, int *, int *));
@ -80,13 +81,25 @@ static void sh_elf_cons PARAMS ((int));
symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
#endif
int shl = 0;
static void
big (ignore)
int ignore ATTRIBUTE_UNUSED;
{
if (! target_big_endian)
as_bad (_("directive .big encountered when option -big required"));
/* Stop further messages. */
target_big_endian = 1;
}
static void
little (ignore)
int ignore ATTRIBUTE_UNUSED;
{
shl = 1;
if (target_big_endian)
as_bad (_("directive .little encountered when option -little required"));
/* Stop further messages. */
target_big_endian = 0;
}
@ -107,6 +120,7 @@ const pseudo_typeS md_pseudo_table[] =
{"int", cons, 4},
{"word", cons, 2},
#endif /* OBJ_ELF */
{"big", big, 0},
{"form", listing_psize, 0},
{"little", little, 0},
{"heading", listing_title, 0},
@ -439,14 +453,6 @@ md_begin ()
char *prev_name = "";
int target_arch;
#ifdef TE_PE
/* The WinCE OS only supports little endian executables. */
target_big_endian = 0;
#else
if (! shl)
target_big_endian = 1;
#endif
target_arch = arch_sh1_up & ~(sh_dsp ? arch_sh3e_up : arch_sh_dsp_up);
valid_arch = target_arch;
@ -2127,11 +2133,13 @@ CONST char *md_shortopts = "";
struct option md_longopts[] =
{
#define OPTION_RELAX (OPTION_MD_BASE)
#define OPTION_LITTLE (OPTION_MD_BASE + 1)
#define OPTION_BIG (OPTION_MD_BASE + 1)
#define OPTION_LITTLE (OPTION_BIG + 1)
#define OPTION_SMALL (OPTION_LITTLE + 1)
#define OPTION_DSP (OPTION_SMALL + 1)
{"relax", no_argument, NULL, OPTION_RELAX},
{"big", no_argument, NULL, OPTION_BIG},
{"little", no_argument, NULL, OPTION_LITTLE},
{"small", no_argument, NULL, OPTION_SMALL},
{"dsp", no_argument, NULL, OPTION_DSP},
@ -2150,8 +2158,11 @@ md_parse_option (c, arg)
sh_relax = 1;
break;
case OPTION_BIG:
target_big_endian = 1;
break;
case OPTION_LITTLE:
shl = 1;
target_big_endian = 0;
break;
@ -2177,6 +2188,7 @@ md_show_usage (stream)
fprintf (stream, _("\
SH options:\n\
-little generate little endian code\n\
-big generate big endian code\n\
-relax alter jump instructions for long displacements\n\
-small align sections to 4 byte boundaries, not 16\n\
-dsp enable sh-dsp insns, and disable sh3e / sh4 insns.\n"));

View File

@ -21,8 +21,6 @@
#define TC_SH
#define TARGET_BYTES_BIG_ENDIAN 0
#define TARGET_ARCH bfd_arch_sh
#if ANSI_PROTOTYPES
@ -30,9 +28,6 @@ struct segment_info_struct;
struct internal_reloc;
#endif
/* Whether in little endian mode. */
extern int shl;
/* Whether -relax was used. */
extern int sh_relax;
@ -81,7 +76,9 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
#define IGNORE_NONSTANDARD_ESCAPES
#define LISTING_HEADER (shl ? "Hitachi Super-H GAS Little Endian" : "Hitachi Super-H GAS Big Endian")
#define LISTING_HEADER \
(!target_big_endian \
? "Hitachi Super-H GAS Little Endian" : "Hitachi Super-H GAS Big Endian")
#define md_operand(x)
@ -123,7 +120,7 @@ extern void sh_frob_file PARAMS ((void));
#define BFD_ARCH TARGET_ARCH
#define COFF_MAGIC (shl ? SH_ARCH_MAGIC_LITTLE : SH_ARCH_MAGIC_BIG)
#define COFF_MAGIC (!target_big_endian ? SH_ARCH_MAGIC_LITTLE : SH_ARCH_MAGIC_BIG)
/* We need to write out relocs which have not been completed. */
#define TC_COUNT_RELOC(fix) ((fix)->fx_addsy != NULL)
@ -168,9 +165,9 @@ extern int tc_coff_sizemachdep PARAMS ((fragS *));
extern int target_big_endian;
#ifdef TE_LINUX
#define TARGET_FORMAT (shl ? "elf32-sh-linux" : "elf32-shbig-linux")
#define TARGET_FORMAT (!target_big_endian ? "elf32-sh-linux" : "elf32-shbig-linux")
#else
#define TARGET_FORMAT (shl ? "elf32-shl" : "elf32-sh")
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl" : "elf32-sh")
#endif
#define elf_tc_final_processing sh_elf_final_processing

341
gas/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -144,6 +144,7 @@ changequote([,])dnl
rs6000*) cpu_type=ppc ;;
s390x*) cpu_type=s390 arch=s390x ;;
s390*) cpu_type=s390 arch=s390 ;;
sh*) cpu_type=sh endian=big ;;
sparclite*) cpu_type=sparc arch=sparclite ;;
sparclet*) cpu_type=sparc arch=sparclet ;;
sparc64*) cpu_type=sparc arch=v9-64 ;;
@ -401,7 +402,7 @@ changequote([,])dnl
sh-*-linux*) fmt=elf em=linux ;;
sh-*-elf*) fmt=elf ;;
sh-*-coff*) fmt=coff bfd_gas=yes;;
sh-*-pe*) fmt=coff em=pe bfd_gas=yes;;
sh-*-pe*) fmt=coff em=pe bfd_gas=yes endian=little ;;
sh-*-rtemself*) fmt=elf ;;
sh-*-rtems*) fmt=coff bfd_gas=yes;;