Bring the binutils_2_12_20020221_snap version of this to the HEAD branch.
This commit is contained in:
parent
a6c1198cb5
commit
dd23d95f1b
@ -1,6 +1,6 @@
|
||||
/* i386.c -- Assemble code for the Intel 80386
|
||||
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001
|
||||
2000, 2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
@ -52,8 +52,12 @@
|
||||
#define SCALE1_WHEN_NO_INDEX 1
|
||||
#endif
|
||||
|
||||
#ifndef true
|
||||
#define true 1
|
||||
#endif
|
||||
#ifndef false
|
||||
#define false 0
|
||||
#endif
|
||||
|
||||
static unsigned int mode_from_disp_size PARAMS ((unsigned int));
|
||||
static int fits_in_signed_byte PARAMS ((offsetT));
|
||||
@ -1178,7 +1182,12 @@ tc_i386_fix_adjustable (fixP)
|
||||
/* Prevent all adjustments to global symbols, or else dynamic
|
||||
linking will not work correctly. */
|
||||
if (S_IS_EXTERNAL (fixP->fx_addsy)
|
||||
|| S_IS_WEAK (fixP->fx_addsy))
|
||||
|| S_IS_WEAK (fixP->fx_addsy)
|
||||
/* Don't adjust pc-relative references to merge sections in 64-bit
|
||||
mode. */
|
||||
|| (use_rela_relocations
|
||||
&& (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
|
||||
&& fixP->fx_pcrel))
|
||||
return 0;
|
||||
#endif
|
||||
/* adjust_reloc_syms doesn't know about the GOT. */
|
||||
@ -1298,6 +1307,7 @@ md_assemble (line)
|
||||
/* If we are in 16-bit mode, do not allow addr16 or data16.
|
||||
Similarly, in 32-bit mode, do not allow addr32 or data32. */
|
||||
if ((current_templates->start->opcode_modifier & (Size16 | Size32))
|
||||
&& flag_code != CODE_64BIT
|
||||
&& (((current_templates->start->opcode_modifier & Size32) != 0)
|
||||
^ (flag_code == CODE_16BIT)))
|
||||
{
|
||||
@ -2263,6 +2273,14 @@ md_assemble (line)
|
||||
return;
|
||||
}
|
||||
|
||||
if (i.suffix != QWORD_MNEM_SUFFIX && (flag_code == CODE_64BIT)
|
||||
&& !(i.tm.opcode_modifier & IgnoreSize)
|
||||
&& (i.tm.opcode_modifier & JumpByte))
|
||||
{
|
||||
if (! add_prefix (ADDR_PREFIX_OPCODE))
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set mode64 for an operand. */
|
||||
if (i.suffix == QWORD_MNEM_SUFFIX
|
||||
&& !(i.tm.opcode_modifier & NoRex64))
|
||||
@ -2415,13 +2433,15 @@ md_assemble (line)
|
||||
if (! i.index_reg)
|
||||
{
|
||||
/* Operand is just <disp> */
|
||||
if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
|
||||
if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0)
|
||||
&& (flag_code != CODE_64BIT))
|
||||
{
|
||||
i.rm.regmem = NO_BASE_REGISTER_16;
|
||||
i.types[op] &= ~Disp;
|
||||
i.types[op] |= Disp16;
|
||||
}
|
||||
else if (flag_code != CODE_64BIT)
|
||||
else if (flag_code != CODE_64BIT
|
||||
|| (i.prefix[ADDR_PREFIX] != 0))
|
||||
{
|
||||
i.rm.regmem = NO_BASE_REGISTER;
|
||||
i.types[op] &= ~Disp;
|
||||
@ -3438,10 +3458,13 @@ i386_displacement (disp_start, disp_end)
|
||||
#endif
|
||||
int bigdisp = Disp32;
|
||||
|
||||
if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
|
||||
bigdisp = Disp16;
|
||||
if (flag_code == CODE_64BIT)
|
||||
bigdisp = Disp64;
|
||||
{
|
||||
if (!i.prefix[ADDR_PREFIX])
|
||||
bigdisp = Disp64;
|
||||
}
|
||||
else if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
|
||||
bigdisp = Disp16;
|
||||
i.types[this_operand] |= bigdisp;
|
||||
|
||||
exp = &disp_expressions[i.disp_operands];
|
||||
@ -3596,15 +3619,28 @@ i386_index_check (operand_string)
|
||||
ok = 1;
|
||||
if (flag_code == CODE_64BIT)
|
||||
{
|
||||
/* 64bit checks. */
|
||||
if ((i.base_reg
|
||||
&& ((i.base_reg->reg_type & Reg64) == 0)
|
||||
&& (i.base_reg->reg_type != BaseIndex
|
||||
|| i.index_reg))
|
||||
|| (i.index_reg
|
||||
&& ((i.index_reg->reg_type & (Reg64|BaseIndex))
|
||||
!= (Reg64|BaseIndex))))
|
||||
ok = 0;
|
||||
if (i.prefix[ADDR_PREFIX] == 0)
|
||||
{
|
||||
/* 64bit checks. */
|
||||
if ((i.base_reg
|
||||
&& ((i.base_reg->reg_type & Reg64) == 0)
|
||||
&& (i.base_reg->reg_type != BaseIndex
|
||||
|| i.index_reg))
|
||||
|| (i.index_reg
|
||||
&& ((i.index_reg->reg_type & (Reg64|BaseIndex))
|
||||
!= (Reg64|BaseIndex))))
|
||||
ok = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 32bit checks. */
|
||||
if ((i.base_reg
|
||||
&& (i.base_reg->reg_type & (Reg32 | RegRex)) != Reg32)
|
||||
|| (i.index_reg
|
||||
&& ((i.index_reg->reg_type & (Reg32|BaseIndex|RegRex))
|
||||
!= (Reg32|BaseIndex))))
|
||||
ok = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -47,8 +47,8 @@ sparc*-*-coff) targ_emul=coff_sparc ;;
|
||||
sparc*-*-elf) targ_emul=elf32_sparc ;;
|
||||
sparc*-*-sysv4*) targ_emul=elf32_sparc ;;
|
||||
sparc64-*-freebsd* | sparcv9-*-freebsd*)
|
||||
targ_emul=elf64_sparc
|
||||
targ_extra_emuls="elf32_sparc"
|
||||
targ_emul=elf64_sparc_fbsd
|
||||
targ_extra_emuls="elf64_sparc elf32_sparc"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
|
||||
;;
|
||||
@ -105,7 +105,8 @@ i960-intel-nindy) targ_emul=gld960 ;;
|
||||
i960-*-rtems*) targ_emul=gld960coff ;;
|
||||
i960-*-elf*) targ_emul=elf32_i960 ;;
|
||||
ia64-*-elf*) targ_emul=elf64_ia64 ;;
|
||||
ia64-*-freebsd*) targ_emul=elf64_ia64 ;;
|
||||
ia64-*-freebsd*) targ_emul=elf64_ia64_fbsd
|
||||
targ_extra_emuls="elf64_ia64" ;;
|
||||
ia64-*-netbsd*) targ_emul=elf64_ia64 ;;
|
||||
ia64-*-linux*) targ_emul=elf64_ia64 ;;
|
||||
ia64-*-aix*) targ_emul=elf64_aix ;;
|
||||
@ -179,10 +180,12 @@ i[3456]86-*-netware) targ_emul=i386nw ;;
|
||||
i[3456]86-*-elf*) targ_emul=elf_i386 ;;
|
||||
i[3456]86-*-freebsdaout* | i[3456]86-*-freebsd[12].* | i[3456]86-*-freebsd[12])
|
||||
targ_emul=i386bsd ;;
|
||||
i[3456]86-*-freebsd*) targ_emul=elf_i386 ;;
|
||||
x86_64-*-freebsd*) targ_emul=elf_x86_64
|
||||
targ_extra_emuls=elf_i386
|
||||
tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'`
|
||||
i[3456]86-*-freebsd*) targ_emul=elf_i386_fbsd
|
||||
targ_extra_emuls="elf_i386 i386bsd" ;;
|
||||
x86_64-*-freebsd*) targ_emul=elf_x86_64_fbsd
|
||||
targ_extra_emuls="elf_i386_fbsd elf_x86_64 elf_i386"
|
||||
tdir_elf_i386=`echo ${targ_alias} \
|
||||
| sed -e 's/x86_64/i386/'`
|
||||
;;
|
||||
i[3456]86-*-sysv*) targ_emul=i386coff ;;
|
||||
i[3456]86-*-ptx*) targ_emul=i386coff ;;
|
||||
@ -213,7 +216,8 @@ arm-*-aout | armel-*-aout) targ_emul=armaoutl ;;
|
||||
armeb-*-aout) targ_emul=armaoutb ;;
|
||||
arm-*-coff) targ_emul=armcoff ;;
|
||||
arm-*-vxworks) targ_emul=armcoff ;;
|
||||
arm-*-freebsd*) targ_emul=armelf ;;
|
||||
arm-*-freebsd*) targ_emul=armelf_fbsd
|
||||
targ_extra_emuls="armelf" ;;
|
||||
arm-*-netbsdelf*) targ_emul=armelf_nbsd;
|
||||
targ_extra_emuls="armelf armnbsd" ;;
|
||||
arm-*-netbsd*) targ_emul=armnbsd;
|
||||
@ -275,6 +279,11 @@ sh-*-elf* | sh-*-rtemself*)
|
||||
sh-*-pe) targ_emul=shpe ;
|
||||
targ_extra_ofiles="deffilep.o pe-dll.o" ;;
|
||||
sh-*-*|sh-*-rtems*) targ_emul=sh; targ_extra_emuls=shl ;;
|
||||
sh64-*-elf*)
|
||||
targ_emul=shelf
|
||||
targ_extra_emuls="shlelf shelf32 shlelf32 shelf64 shlelf64"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
m68k-sony-*) targ_emul=news ;;
|
||||
m68k-hp-bsd*) targ_emul=hp300bsd ;;
|
||||
m68*-motorola-sysv*) targ_emul=delta68 ;;
|
||||
@ -307,6 +316,7 @@ hppa*64*-*) targ_emul=elf64hppa ;;
|
||||
hppa*-*-linux-gnu*) targ_emul=hppalinux ;;
|
||||
hppa*-*-*elf*) targ_emul=hppaelf ;;
|
||||
hppa*-*-lites*) targ_emul=hppaelf ;;
|
||||
hppa*-*-netbsd*) targ_emul=hppanbsd ;;
|
||||
hppa*-*-rtems*) targ_emul=hppaelf ;;
|
||||
vax-dec-ultrix* | vax-dec-bsd*) targ_emul=vax ;;
|
||||
mips*-*-pe) targ_emul=mipspe ;
|
||||
@ -353,8 +363,8 @@ mmix-*-*) targ_emul=mmo
|
||||
;;
|
||||
mn10200-*-*) targ_emul=mn10200 ;;
|
||||
mn10300-*-*) targ_emul=mn10300 ;;
|
||||
alpha*-*-freebsd*) targ_emul=elf64alpha
|
||||
targ_extra_emuls=alpha
|
||||
alpha*-*-freebsd*) targ_emul=elf64alpha_fbsd
|
||||
targ_extra_emuls="elf64alpha alpha"
|
||||
tdir_alpha=`echo ${targ_alias} | sed -e 's/freebsd/freebsdecoff/'`
|
||||
;;
|
||||
alpha*-*-linuxecoff*) targ_emul=alpha targ_extra_emuls=elf64alpha
|
||||
@ -371,11 +381,14 @@ z8k-*-coff) targ_emul=z8002; targ_extra_emuls=z8001 ;;
|
||||
ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;;
|
||||
ns32k-pc532-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;;
|
||||
openrisc-*-*) targ_emul=elf32openrisc ;;
|
||||
or32-*-coff) targ_emul=or32 ;;
|
||||
or32-*-elf) targ_emul=or32elf ;;
|
||||
or32-*-rtems) targ_emul=or32 ;;
|
||||
pdp11-*-*) targ_emul=pdp11 ;;
|
||||
pjl*-*-*) targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
|
||||
pj*-*-*) targ_emul=pjelf ;;
|
||||
powerpc-*-freebsd*) targ_emul=elf32ppc;
|
||||
targ_extra_emuls=elf32ppcsim;
|
||||
powerpc-*-freebsd*) targ_emul=elf32ppc_fbsd;
|
||||
targ_extra_emuls="elf32ppc elf32ppcsim";
|
||||
targ_extra_libpath=elf32ppc;
|
||||
tdir_elf32ppcsim=`echo ${targ_alias} | sed -e 's/ppc/ppcsim/'`
|
||||
;;
|
||||
|
@ -13,7 +13,8 @@ ARCH=alpha
|
||||
MACHINE=
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
DATA_PLT=
|
||||
NOP=0x2ffe0000 # unop
|
||||
# Note that the string of digits is little-endian.
|
||||
NOP=0x0000fe2f # unop
|
||||
|
||||
OTHER_READONLY_SECTIONS="
|
||||
.reginfo ${RELOCATING-0} : { *(.reginfo) }"
|
||||
|
Loading…
x
Reference in New Issue
Block a user