|
|
1.1 root 1: /* The type used for a target address */
2: typedef unsigned long relax_addressT;
3:
4: /*
5: * relax_stateT is a fragment's type and stored in a struct frag's fr_type
6: * field.
7: */
8: typedef enum {
9: rs_fill, /* Variable chars to be repeated fr_offset */
10: /* times. Fr_symbol unused. */
11: /* Used with fr_offset == 0 for a constant */
12: /* length frag. */
13: rs_align, /* Align: Fr_offset: power of 2. */
14: /* 1 variable char: fill character. */
15: rs_org, /* Org: Fr_offset, fr_symbol: address. */
16: /* 1 variable char: fill character. */
17: rs_machine_dependent,
18: } relax_stateT;
19:
20: /*
21: * For machine dependent fragments, a struct frag's who's fr_type field is
22: * rs_machine_dependent it's substate is stored in the struct frag's fr_subtype;
23: * field. The substate is used to index in to md_relax_table by relax_section()
24: * in layout.c to drive the span dependent branch algorithm of the assembler.
25: * The substate is a machine dependent indication of what type of branch
26: * instruction this fragment is.
27: */
28: typedef unsigned long relax_substateT;
29:
30: /*
31: * relax_typeS is the structure that is the entry in the md_relax_table array.
32: * It is indexed into by the substate of a fragment for machine depependent
33: * branches that have variable sizes. The entry tell how far this branch can
34: * reach, rlx_forward and rlx_backward, as well as the size of branch,
35: * rlx_length, and which substate go to, rlx_more, if this sized branch can't
36: * reach it's target.
37: */
38: typedef struct {
39: long rlx_forward; /* Forward reach. Signed number. > 0. */
40: long rlx_backward; /* Backward reach. Signed number. < 0. */
41: unsigned char rlx_length; /* Bytes length of this address. */
42: relax_substateT rlx_more; /* Next longer relax-state. */
43: /* 0 means there is no 'next' relax-state. */
44: } relax_typeS;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.