* doc/internals.texi (Relaxing with a table) <after relaxation>:

Point out caveats with generating fixups for the opcode in a frag.
This commit is contained in:
Hans-Peter Nilsson 2000-12-31 19:54:58 +00:00
parent c0d8940f87
commit 67db5ab439
2 changed files with 15 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2000-12-31 Hans-Peter Nilsson <hp@bitrange.com>
* doc/internals.texi (Relaxing with a table) <after relaxation>:
Point out caveats with generating fixups for the opcode in a frag.
Sat Dec 30 19:02:48 MET 2000 Jan Hubicka <jh@suse.cz>
* configure.in: Add support for x86_64 and x86_64-*-linux-gnu*

View File

@ -1601,6 +1601,16 @@ called to convert the frag to an @code{rs_fill} frag with no variant part.
Sometimes changing addressing modes may also require rewriting the instruction.
It can be accessed via @code{fr_opcode} or @code{fr_fix}.
If you generate frags separately for the basic insn opcode and any relaxable
operands, do not call @code{fix_new} thinking you can emit fixups for the
opcode field from the relaxable frag. It is not garanteed to be the same frag.
If you need to emit fixups for the opcode field from inspection of the
relaxable frag, then you need to generate a common frag for both the basic
opcode and relaxable fields, or you need to provide the frag for the opcode to
pass to @code{fix_new}. The latter can be done for example by defining
@code{TC_FRAG_TYPE} to include a pointer to it and defining @code{TC_FRAG_INIT}
to set the pointer.
Sometimes @code{fr_var} is increased instead, and @code{frag_wane} is not
called. I'm not sure, but I think this is to keep @code{fr_fix} referring to
an earlier byte, and @code{fr_subtype} set to @code{rs_machine_dependent} so