diff options
author | Richard Henderson <rth@redhat.com> | 2000-12-28 10:07:56 +0000 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 2000-12-28 10:07:56 +0000 |
commit | 0a9ef439079f50221dad9eb5248387236d370c87 (patch) | |
tree | c9e2b708439e46a331746ead00c3c709f5c82bb9 /gas/config/tc-m88k.c | |
parent | bda9cb723c0f733f03ed6fe74dfc3b87fe5e775f (diff) | |
download | gdb-0a9ef439079f50221dad9eb5248387236d370c87.zip gdb-0a9ef439079f50221dad9eb5248387236d370c87.tar.gz gdb-0a9ef439079f50221dad9eb5248387236d370c87.tar.bz2 |
* as.h (rs_align_test): New.
* frags.c (NOP_OPCODE): Move default from read.c.
(MAX_MEM_FOR_RS_ALIGN_CODE): New default.
(frag_align_code): New.
* frags.h (frag_align_code): Declare.
* read.c (NOP_OPCODE): Remove.
(do_align): Use frag_align_code.
* write.c (NOP_OPCODE): Remove.
(get_recorded_alignment): New.
(cvt_frag_to_fill): Handle rs_align_test.
(relax_segment): Likewise.
(subsegs_finish): Align last subseg in section to the
section alignment. Use frag_align_code.
* write.h (get_recorded_alignment): Declare.
* config/obj-coff.c (size_section): Handle rs_align_test.
(fill_section, fixup_mdeps): Likewise.
(write_object_file): Use frag_align_code.
* config/tc-alpha.c (alpha_align): Use frag_align_code.
(alpha_handle_align): New.
* config/tc-alpha.h (HANDLE_ALIGN): New.
(MAX_MEM_FOR_RS_ALIGN_CODE): New.
* config/tc-i386.h (md_do_align): Use frag_align_code.
(MAX_MEM_FOR_RS_ALIGN_CODE): New.
* config/tc-ia64.c (ia64_md_do_align): Don't do code alignment.
(ia64_handle_align): New.
* config/tc-ia64.h (HANDLE_ALIGN): New.
(MAX_MEM_FOR_RS_ALIGN_CODE): New.
* config/tc-m32r.c (m32r_do_align): Remove.
(m32r_handle_align): New.
(fill_insn): Use frag_align_code.
* config/tc-m32r.h (md_do_align): Remove.
(HANDLE_ALIGN, MAX_MEM_FOR_RS_ALIGN_CODE): New.
* config/tc-m88k.c, config/tc-m88k.h: Similarly.
* config/tc-mips.c, config/tc-mips.h: Similarly.
* config/tc-sh.c (sh_cons_align): Use rs_align_test.
(sh_handle_align): Likewise. Handle rs_align_code.
(sh_do_align): Remove.
* config/tc-sh.h (md_do_align): Remove.
(MAX_MEM_FOR_RS_ALIGN_CODE): New.
* config/tc-sparc.c (sparc_cons_align): Use rs_align_test.
(sparc_handle_align): Likewise. Handle rs_align_code.
* config/tc-sparc.h (md_do_align): Remove.
(MAX_MEM_FOR_RS_ALIGN_CODE): New.
Diffstat (limited to 'gas/config/tc-m88k.c')
-rw-r--r-- | gas/config/tc-m88k.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/gas/config/tc-m88k.c b/gas/config/tc-m88k.c index 86496cf..af243b2 100644 --- a/gas/config/tc-m88k.c +++ b/gas/config/tc-m88k.c @@ -1427,23 +1427,34 @@ md_pcrel_from (fixp) /*NOTREACHED*/ } -/* When we align the .init section, insert the correct NOP pattern. */ +/* Fill in rs_align_code fragments. */ -int -m88k_do_align (n, fill, max, len) - int n; - const char *fill; - int len; - int max; +void +m88k_handle_align (fragp) + fragS *fragp; { - if (fill == NULL - && strcmp (obj_segment_name (now_seg), ".init") == 0) + static const unsigned char nop_pattern[] = { 0xf4, 0x00, 0x58, 0x00 }; + + int bytes; + char *p; + + if (fragp->fr_type != rs_align_code) + return; + + bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; + p = fragp->fr_literal + fragp->fr_fix; + + if (bytes & 3) { - static const unsigned char nop_pattern[] = { 0xf4, 0x00, 0x58, 0x00 }; - frag_align_pattern (n, nop_pattern, sizeof (nop_pattern), max); - return 1; + int fix = bytes & 3; + memset (p, 0, fix); + p += fix; + bytes -= fix; + fragp->fr_fix += fix; } - return 0; + + memcpy (p, nop_pattern, 4); + fragp->fr_var = 4; } #endif /* M88KCOFF */ |