Emit error for unaligned instructions.
* config/tc-ia64.c (emit_one_bundle): Check and set insn_addr. * config/tc-ia64.h (md_frag_check): Define.
This commit is contained in:
parent
2405c5d661
commit
5a9ff93dab
3 changed files with 22 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2004-07-03 James E Wilson <wilson@specifixinc.com>
|
||||
|
||||
* config/tc-ia64.c (emit_one_bundle): Check and set insn_addr.
|
||||
* config/tc-ia64.h (md_frag_check): Define.
|
||||
|
||||
2004-07-03 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
|
||||
|
||||
* config/obj-coff.c (obj_coff_weak): New .weak syntax for PE weak
|
||||
|
|
|
@ -6129,6 +6129,7 @@ emit_one_bundle ()
|
|||
char mnemonic[16];
|
||||
fixS *fix;
|
||||
char *f;
|
||||
int addr_mod;
|
||||
|
||||
first = (md.curr_slot + NUM_SLOTS - md.num_slots_in_use) % NUM_SLOTS;
|
||||
know (first >= 0 & first < NUM_SLOTS);
|
||||
|
@ -6160,6 +6161,14 @@ emit_one_bundle ()
|
|||
|
||||
f = frag_more (16);
|
||||
|
||||
/* Check to see if this bundle is at an offset that is a multiple of 16-bytes
|
||||
from the start of the frag. */
|
||||
addr_mod = frag_now_fix () & 15;
|
||||
if (frag_now->has_code && frag_now->insn_addr != addr_mod)
|
||||
as_bad (_("instruction address is not a multiple of 16"));
|
||||
frag_now->insn_addr = addr_mod;
|
||||
frag_now->has_code = 1;
|
||||
|
||||
/* now fill in slots with as many insns as possible: */
|
||||
curr = first;
|
||||
idesc = md.slot[curr].idesc;
|
||||
|
|
|
@ -158,6 +158,14 @@ extern void ia64_convert_frag (fragS *);
|
|||
#define TC_FRAG_TYPE int
|
||||
#define TC_FRAG_INIT(FRAGP) do {(FRAGP)->tc_frag_data = 0;}while (0)
|
||||
|
||||
/* Give an error if a frag containing code is not aligned to a 16 byte
|
||||
boundary. */
|
||||
#define md_frag_check(FRAGP) \
|
||||
if ((FRAGP)->has_code \
|
||||
&& (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 15) != 0) \
|
||||
as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line, \
|
||||
_("instruction address is not a multiple of 16"));
|
||||
|
||||
#define MAX_MEM_FOR_RS_ALIGN_CODE (15 + 16)
|
||||
|
||||
#define WORKING_DOT_WORD /* don't do broken word processing for now */
|
||||
|
|
Loading…
Reference in a new issue