Skip to content

Commit

Permalink
Emit error for unaligned instructions.
Browse files Browse the repository at this point in the history
	* config/tc-ia64.c (emit_one_bundle): Check and set insn_addr.
	* config/tc-ia64.h (md_frag_check): Define.
  • Loading branch information
jim-wilson committed Jul 4, 2004
1 parent c673810 commit aa19c34
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
5 changes: 5 additions & 0 deletions gas/ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
9 changes: 9 additions & 0 deletions gas/config/tc-ia64.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions gas/config/tc-ia64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit aa19c34

Please sign in to comment.