aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-arm.c
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2005-06-07 17:54:22 +0000
committerZack Weinberg <zackw@panix.com>2005-06-07 17:54:22 +0000
commit55cf6793d851ffd0f14d851eb6d75cac2fe400ff (patch)
treee11f51cceaa990eff7a52242fd07b29f918bb230 /gas/config/tc-arm.c
parent620c54b327d822f88f58c6672d84d81c9895c46b (diff)
downloadgdb-55cf6793d851ffd0f14d851eb6d75cac2fe400ff.zip
gdb-55cf6793d851ffd0f14d851eb6d75cac2fe400ff.tar.gz
gdb-55cf6793d851ffd0f14d851eb6d75cac2fe400ff.tar.bz2
gas:
* cgen.c, cgen.h, tc.h, write.c, config/obj-coff.c * config/tc-a29k.c, config/tc-alpha.c, config/tc-alpha.h * config/tc-arc.c, config/tc-arc.h, config/tc-arm.c * config/tc-arm.h, config/tc-avr.c, config/tc-avr.h * config/tc-cris.c, config/tc-crx.c, config/tc-d10v.c * config/tc-d10v.h, config/tc-d30v.c, config/tc-d30v.h * config/tc-dlx.c, config/tc-dlx.h, config/tc-fr30.h * config/tc-frv.c, config/tc-frv.h, config/tc-h8300.c * config/tc-h8500.c, config/tc-hppa.c, config/tc-hppa.h * config/tc-i370.c, config/tc-i370.h, config/tc-i386.c * config/tc-i386.h, config/tc-i860.c, config/tc-i860.h * config/tc-i960.c, config/tc-i960.h, config/tc-ia64.c * config/tc-ip2k.c, config/tc-ip2k.h, config/tc-iq2000.c * config/tc-iq2000.h, config/tc-m32r.c, config/tc-m32r.h * config/tc-m68hc11.c, config/tc-m68hc11.h, config/tc-m68k.c * config/tc-m68k.h, config/tc-m88k.c, config/tc-maxq.c * config/tc-mcore.c, config/tc-mcore.h, config/tc-mips.c * config/tc-mips.h, config/tc-mmix.c, config/tc-mn10200.c * config/tc-mn10300.c, config/tc-msp430.c, config/tc-ns32k.c * config/tc-openrisc.h, config/tc-or32.c, config/tc-or32.h * config/tc-pdp11.c, config/tc-pj.c, config/tc-pj.h * config/tc-ppc.c, config/tc-ppc.h, config/tc-s390.c * config/tc-s390.h, config/tc-sh64.c, config/tc-sh.c * config/tc-sh.h, config/tc-sparc.c, config/tc-sparc.h * config/tc-tahoe.c, config/tc-tic30.c, config/tc-tic4x.c * config/tc-tic54x.c, config/tc-tic80.c, config/tc-v850.c * config/tc-v850.h, config/tc-vax.c, config/tc-vax.h * config/tc-w65.c, config/tc-xstormy16.c, config/tc-xstormy16.h * config/tc-xtensa.c, config/tc-z8k.c: Replace all instances of the string "_apply_fix3" with "_apply_fix". * po/POTFILES.in, po/gas.pot: Regenerate. bfd: * coff-i386.c: Change md_apply_fix3 to md_apply_fix in comment. cgen: * doc/porting.texi: Change all mention of md_apply_fix3 and gas_cgen_md_apply_fix3 to md_apply_fix and gas_cgen_md_apply_fix respectively.
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r--gas/config/tc-arm.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 13108ed..5e7fb74 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -1414,9 +1414,11 @@ find_real_start (symbolS * symbolP)
if (name == NULL)
abort ();
- /* Names that start with '.' are local labels, not function entry points.
- The compiler may generate BL instructions to these labels because it
- needs to perform a branch to a far away location. */
+ /* The compiler may generate BL instructions to local labels because
+ it needs to perform a branch to a far away location. These labels
+ do not have a corresponding ".real_start_of" label. To accomodate
+ hand-written assembly, we don't insist on a leading ".L", just a
+ leading dot. */
if (name[0] == '.')
return symbolP;
@@ -3071,7 +3073,7 @@ parse_shift (char **str, int i, enum parse_shift_mode mode)
where <shift> is defined by parse_shift above, and <rotate> is a
multiple of 2 between 0 and 30. Validation of immediate operands
- is deferred to md_apply_fix3. */
+ is deferred to md_apply_fix. */
static int
parse_shifter_operand (char **str, int i)
@@ -3122,7 +3124,7 @@ parse_shifter_operand (char **str, int i)
return FAIL;
}
- /* Convert to decoded value. md_apply_fix3 will put it back. */
+ /* Convert to decoded value. md_apply_fix will put it back. */
inst.reloc.exp.X_add_number
= (((inst.reloc.exp.X_add_number << (32 - value))
| (inst.reloc.exp.X_add_number >> value)) & 0xffffffff);
@@ -3977,7 +3979,7 @@ encode_arm_vfp_sp_reg (int reg, enum vfp_sp_reg_pos pos)
}
/* Encode a <shift> in an ARM-format instruction. The immediate,
- if any, is handled by md_apply_fix3. */
+ if any, is handled by md_apply_fix. */
static void
encode_arm_shift (int i)
{
@@ -9963,7 +9965,7 @@ md_undefined_symbol (char * name ATTRIBUTE_UNUSED)
return 0;
}
-/* Subroutine of md_apply_fix3. Check to see if an immediate can be
+/* Subroutine of md_apply_fix. Check to see if an immediate can be
computed as two separate immediate values, added together. We
already know that this value cannot be computed by just one ARM
instruction. */
@@ -10010,7 +10012,7 @@ validate_offset_imm (unsigned int val, int hwse)
return val;
}
-/* Subroutine of md_apply_fix3. Do those data_ops which can take a
+/* Subroutine of md_apply_fix. Do those data_ops which can take a
negative immediate constant by altering the instruction. A bit of
a hack really.
MOV <-> MVN
@@ -10100,7 +10102,7 @@ negate_data_op (unsigned long * instruction,
}
void
-md_apply_fix3 (fixS * fixP,
+md_apply_fix (fixS * fixP,
valueT * valP,
segT seg)
{
@@ -10513,7 +10515,8 @@ md_apply_fix3 (fixS * fixP,
#define SEXT24(x) ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000)
#ifdef OBJ_ELF
- value = fixP->fx_offset;
+ if (!fixP->fx_done)
+ value = fixP->fx_offset;
#endif
/* We are going to store value (shifted right by two) in the
@@ -10583,7 +10586,8 @@ md_apply_fix3 (fixS * fixP,
newval = md_chars_to_number (buf, INSN_SIZE);
#ifdef OBJ_ELF
- value = fixP->fx_offset;
+ if (!fixP->fx_done)
+ value = fixP->fx_offset;
#endif
hbit = (value >> 1) & 1;
value = (value >> 2) & 0x00ffffff;
@@ -10742,7 +10746,8 @@ md_apply_fix3 (fixS * fixP,
if (diff & 0x400000)
diff |= ~0x3fffff;
#ifdef OBJ_ELF
- value = fixP->fx_offset;
+ if (!fixP->fx_done)
+ value = fixP->fx_offset;
#endif
value += diff;
@@ -11353,13 +11358,6 @@ arm_force_relocation (struct fix * fixp)
if (fixp->fx_r_type == BFD_RELOC_RVA)
return 1;
#endif
-#ifdef OBJ_ELF
- if (fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
- || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
- || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
- || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
- return 1;
-#endif
/* Resolve these relocations even if the symbol is extern or weak. */
if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE