507 lines
21 KiB
C
507 lines
21 KiB
C
/* som_coff.h - HP-PA a.out object module header */
|
|
|
|
/* Copyright 1993 Wind River Systems, Inc. */
|
|
|
|
/*
|
|
modification history
|
|
-------------------
|
|
01a,10sep93,yao written.
|
|
*/
|
|
|
|
#ifndef INCsom_coffh
|
|
#define INCsom_coffh
|
|
|
|
/*
|
|
* VxWorks values for n_type.
|
|
*/
|
|
|
|
#define N_UNDF 0x0 /* undefined */
|
|
#define N_ABS 0x2 /* absolute */
|
|
#define N_TEXT 0x4 /* text */
|
|
#define N_DATA 0x6 /* data */
|
|
#define N_BSS 0x8 /* bss */
|
|
#define N_COMM 0x12 /* common (internal to ld) */
|
|
#define N_FN 0x1f /* file name symbol */
|
|
|
|
#define N_EXT 01 /* external bit, or'ed in */
|
|
#define N_TYPE 0x1e /* mask for all the type bits */
|
|
#define N_STAB 0xe0 /* if any of these bits set, a SDB entry */
|
|
|
|
|
|
struct sys_clock {
|
|
unsigned int secs;
|
|
unsigned int nanosecs;
|
|
};
|
|
|
|
union name_pt {
|
|
char *n_name;
|
|
unsigned int n_strx;
|
|
};
|
|
|
|
typedef struct unwind_table_entry {
|
|
unsigned int startAddr; /* word 1 */
|
|
unsigned int endAddr; /* word 2 */
|
|
unsigned int cantUnwind:1; /* word 3 */
|
|
unsigned int millicode:1;
|
|
unsigned int millicode_save_sr0:1;
|
|
unsigned int regionDescriptor:2;
|
|
unsigned int bunk:22;
|
|
unsigned int saveSP:1;
|
|
unsigned int saveRP:1;
|
|
unsigned int saveMRP:1;
|
|
unsigned int reserved3:1;
|
|
unsigned int cleanupDefined:1;
|
|
unsigned int interruptMarker:2; /* word 4 */
|
|
unsigned int largeFrame:1;
|
|
unsigned int reserved4:2;
|
|
unsigned int frameSize:27;
|
|
} UNWIND_ENTRY;
|
|
|
|
#define UNWIND_DISCONTINUOUS 3
|
|
#define UNWIND_NORMAL 0
|
|
|
|
#define symbol_name name.n_name
|
|
#define subspace_name name.n_name
|
|
#define space_name name.n_name
|
|
|
|
typedef struct header {
|
|
short int system_id; /* system id */
|
|
short int a_magic; /* magic number */
|
|
unsigned int version_id; /* format version */
|
|
struct sys_clock file_time; /* timestamp */
|
|
unsigned int entry_space; /* reserved */
|
|
unsigned int entry_subspace; /* reserved */
|
|
unsigned int entry_offset; /* reserved */
|
|
unsigned int aux_header_location; /* file ptr to aux hdrs */
|
|
unsigned int aux_header_size; /* size of aux hdrs */
|
|
unsigned int som_length; /* length of object module */
|
|
unsigned int presumed_dp; /* reserved */
|
|
unsigned int space_location; /* file ptr to space dict */
|
|
unsigned int space_total; /* number of spaces */
|
|
unsigned int subspace_location; /* file ptr to subspace dict */
|
|
unsigned int subspace_total; /* number of subspaces */
|
|
unsigned int loader_fixup_location; /* reserved */
|
|
unsigned int loader_fixup_total; /* reserved */
|
|
unsigned int space_strings_location; /* file ptr to space strings */
|
|
unsigned int space_strings_size; /* size of space strings */
|
|
unsigned int init_array_location; /* reserved */
|
|
unsigned int init_array_total; /* reserved */
|
|
unsigned int compiler_location; /* file ptr to compiler records */
|
|
unsigned int compiler_total; /* number of compiler records */
|
|
unsigned int symbol_location; /* file ptr to symbol table */
|
|
unsigned int symbol_total; /* number of symbols */
|
|
unsigned int fixup_request_location;/* file ptr to fixups */
|
|
unsigned int fixup_request_total; /* number of fixups */
|
|
unsigned int symbol_strings_location;/* file ptr to symbol strings */
|
|
unsigned int symbol_strings_size; /* size of to symbol strings */
|
|
unsigned int unloadable_sp_location;/* file ptr to debug info */
|
|
unsigned int unloadable_sp_size; /* size of to debug info */
|
|
unsigned int checksum; /* header checksum */
|
|
} SOM_HDR;
|
|
|
|
struct aux_id {
|
|
unsigned int mandatory : 1; /* reserved */
|
|
unsigned int copy : 1; /* reserved */
|
|
unsigned int append : 1; /* reserved */
|
|
unsigned int ignore : 1; /* reserved */
|
|
unsigned int reserved : 12; /* reserved */
|
|
unsigned int type : 16; /* reserved */
|
|
unsigned int length; /* reserved */
|
|
};
|
|
|
|
/* values for magic number */
|
|
|
|
#define RELOC_MAGIC 0x106 /* relocatable only */
|
|
#define EXEC_MAGIC 0x107 /* normal executable */
|
|
#define SHARE_MAGIC 0x108 /* shared executable */
|
|
|
|
/* values for new and old versions */
|
|
|
|
#define VERSION_ID 85082112
|
|
#define NEW_VERSION_ID 87102412 /* relocatable with new fixups */
|
|
|
|
/* values for the aux_id.type field */
|
|
|
|
#define HPUX_AUX_ID 4
|
|
#define VERSION_AUX_ID 6
|
|
#define COPYRIGHT_AUX_ID 10
|
|
|
|
typedef struct som_exec_auxhdr { /* HP-UX auxiliary header */
|
|
struct aux_id som_auxhdr; /* aux header id */
|
|
long exec_tsize; /* text size */
|
|
long exec_tmem; /* start address of text */
|
|
long exec_tfile; /* file ptr to text */
|
|
long exec_dsize; /* data size */
|
|
long exec_dmem; /* start address of data size */
|
|
long exec_dfile; /* file ptr to data */
|
|
long exec_bsize; /* bss size */
|
|
long exec_entry; /* address of entry point */
|
|
long exec_flags; /* loader flags */
|
|
long exec_bfill; /* bss initialization value */
|
|
} AUX_HDR;
|
|
|
|
/* values for exec_flags */
|
|
|
|
#define TRAP_NIL_PTRS 01
|
|
|
|
struct user_string_aux_hdr { /* version string auxiliary header */
|
|
struct aux_id header_id; /* aux header id */
|
|
unsigned int string_length; /* strlen(user_string) */
|
|
char user_string[1]; /* user-defined string */
|
|
};
|
|
|
|
struct copyright_aux_hdr { /* copyright string auxiliary header */
|
|
struct aux_id header_id; /* aux header id */
|
|
unsigned int string_length; /* strlen(user_string) */
|
|
char user_string[1]; /* user-defined string */
|
|
};
|
|
|
|
/* space dictionary from scnhdr.h */
|
|
|
|
typedef struct space_dictionary_record {
|
|
union name_pt name; /* index to space name */
|
|
unsigned int is_loadable: 1;/* space is loadable */
|
|
unsigned int is_defined: 1; /* space is defined within file */
|
|
unsigned int is_private: 1; /* space is not sharable */
|
|
unsigned int reserved: 13; /* space is not sharable */
|
|
unsigned int sort_key: 8; /* sort key for space */
|
|
unsigned int reserved2: 8; /* reserved */
|
|
int space_number; /* space index */
|
|
int subspace_index;/* subspace index */
|
|
unsigned int subspace_quantity;/* number of subspaces in space */
|
|
int loader_fix_index;/* reserved */
|
|
int loader_fix_quantity;/* reserved */
|
|
int int_pointer_index;/* reserved */
|
|
int int_pointer_quantity;/* reserved */
|
|
} SPACE;
|
|
|
|
typedef struct subspace_dictionary_record {
|
|
int space_index;
|
|
unsigned int access_control_bits: 7; /* access for PDIR entries */
|
|
unsigned int memory_resident : 1; /* lock in memory */
|
|
unsigned int dup_common : 1; /* data name clashes allowed */
|
|
unsigned int is_common : 1; /* subspace is a common block */
|
|
unsigned int is_loadable : 1;
|
|
unsigned int quadrant : 2; /* quadrant request */
|
|
unsigned int initially_frozen : 1; /* must be locked into memory
|
|
when OS is booted */
|
|
unsigned int is_first : 1; /* must be first subspace */
|
|
unsigned int code_only : 1; /* must contain only code */
|
|
unsigned int sort_key : 8; /* subspace sort key */
|
|
unsigned int replicate_init : 1; /* init values replicated to
|
|
fill subspace_length */
|
|
unsigned int continuation : 1; /* subspace is a continuation */
|
|
unsigned int reserved : 6;
|
|
int file_loc_init_value; /* file location or
|
|
initialization value */
|
|
unsigned int initialization_length;
|
|
unsigned int subspace_start; /* starting offset */
|
|
unsigned int subspace_length; /* number of bytes defined by
|
|
* this subspace */
|
|
unsigned int reserved2 :16;
|
|
unsigned int alignment :16; /* alignment required for the
|
|
* subspace (largest alignment
|
|
* requested for any item in the
|
|
* subspace) */
|
|
union name_pt name; /* index of subspace name */
|
|
int fixup_request_index; /* index into fixup array */
|
|
unsigned int fixup_request_quantity; /* number of fixup requests */
|
|
} SUBSPACE;
|
|
|
|
#define SBPSZ sizeof(SUBSPACE)
|
|
|
|
/*
|
|
* Define constants for names of spaces
|
|
*/
|
|
|
|
#define _SPACE_TEXT "$TEXT$"
|
|
#define _SPACE_PRIVATE "$PRIVATE$"
|
|
|
|
/* from syms.h */
|
|
typedef struct symbol_dictionary_record {
|
|
unsigned int hidden : 1; /* reserved */
|
|
unsigned int secondary_def : 1; /* symbol type */
|
|
unsigned int symbol_type : 6; /* symbol type */
|
|
unsigned int symbol_scope : 4; /* symbol value */
|
|
unsigned int check_level : 3; /* type checking level */
|
|
unsigned int must_qualify : 1; /* qualifier required */
|
|
unsigned int initially_frozen : 1; /* reserved */
|
|
unsigned int memory_resident : 1; /* reserved */
|
|
unsigned int is_common : 1; /* common block */
|
|
unsigned int dup_common : 1; /* COBOL-style common */
|
|
unsigned int xleast : 2; /* reserved */
|
|
unsigned int arg_reloc :10; /* parameter relocation bits */
|
|
union name_pt name; /* index to symbol name */
|
|
union name_pt qualifier_name; /* index to qual name */
|
|
unsigned int symbol_info; /* subspace index */
|
|
unsigned int symbol_value; /* symbol value */
|
|
} SYMREC;
|
|
|
|
#define n_nptr name.n_name
|
|
#define n_offset name.n_strx
|
|
#define q_nptr qualifier_name.n_name
|
|
#define q_offset qualifier_name.n_strx
|
|
|
|
/* values for symbol_type */
|
|
|
|
#define ST_NULL 0 /* unused symbol entry */
|
|
#define ST_ABSOLUTE 1 /* non-relocatable symbol */
|
|
#define ST_DATA 2 /* data symbol */
|
|
#define ST_CODE 3 /* generic code symbol */
|
|
#define ST_PRI_PROG 4 /* program entry point */
|
|
#define ST_SEC_PROG 5 /* secondary prog entry point */
|
|
#define ST_ENTRY 6 /* procedure entry point */
|
|
#define ST_STORAGE 7 /* storage request */
|
|
#define ST_STUB 8 /* reserved */
|
|
#define ST_MODULE 9 /* Pascal module name */
|
|
#define ST_SYM_EXT 10 /* symbol extension record */
|
|
#define ST_ARG_EXT 11 /* argument extension record */
|
|
#define ST_MILLICODE 12 /* millicode entry point */
|
|
#define ST_PLABEL 13 /* reserved */
|
|
#define ST_OCT_DIS 14 /* reserved */
|
|
#define ST_MILLI_EXT 15 /* reserved */
|
|
|
|
/* symbol scopes */
|
|
|
|
#define SS_UNSAT 0 /* unsatisfied reference */
|
|
#define SS_EXTERNAL 1 /* reserved */
|
|
#define SS_LOCAL 2 /* local symbol */
|
|
#define SS_UNIVERSAL 3 /* global symbol */
|
|
|
|
/* symbol extension records (for type checking) */
|
|
|
|
union arg_descriptor {
|
|
struct
|
|
{
|
|
unsigned int reserved :3; /* not used */
|
|
unsigned int packing :1; /* reserved */
|
|
unsigned int alignment :4; /* byte alignment */
|
|
unsigned int mode :4; /* not used */
|
|
unsigned int structure :4; /* use of symbol */
|
|
unsigned int hash :1; /* structure of symbol */
|
|
int arg_type :15; /* set if arg_type is hashed */
|
|
} arg_desc;
|
|
unsigned int word;
|
|
};
|
|
|
|
struct symbol_extension_record
|
|
{
|
|
unsigned int type :8; /* always type SYM_EXT (12) for
|
|
* this record */
|
|
unsigned int max_num_args :8; /* max # of parameters */
|
|
unsigned int min_num_args :8; /* min # of parameters */
|
|
unsigned int num_args :8; /* actual # of parameters */
|
|
union arg_descriptor symbol_desc; /* first 3 parameters */
|
|
union arg_descriptor argument_desc[3];
|
|
};
|
|
|
|
struct argument_desc_array
|
|
{
|
|
unsigned int type : 8; /* always type ARG_EXT (13) for
|
|
* this record */
|
|
unsigned int reserved: 24; /* not used */
|
|
union arg_descriptor argument_desc[4]; /* nexet 4 parameters */
|
|
};
|
|
|
|
#define SYMESZ sizeof(SYMREC)
|
|
#define AUXENT struct symbol_extension_record
|
|
#define AUXESZ sizeof(AUXENT)
|
|
|
|
/* relocation information */
|
|
|
|
/*
|
|
* The following declarations are for relocation entries in new-format
|
|
* relocatable object files, produced by compilers on HP-UX Release 3.0
|
|
* and later. A relocatable object file with this format will have
|
|
* a version number in the file header of NEW_VERSION_ID (see filehdr.h).
|
|
*
|
|
* Relocation entries are a stream of bytes; each subspace (see scnhdr.h)
|
|
* contains a byte offset from the beginning of the fixup table, and a
|
|
* length in bytes of the relocation entries for that subspace.
|
|
* The first byte of each relocation entry is the opcode as described
|
|
* below. Entries can be from 1 to 12 (currently) bytes long, and
|
|
* describe 0, 1, or more words of data to be relocated.
|
|
*/
|
|
|
|
#define R_NO_RELOCATION 0x00 /* 00-1f: n words, not relocatable */
|
|
#define R_ZEROES 0x20 /* 20-21: n words, all zero */
|
|
#define R_UNINIT 0x22 /* 22-23: n words, uninitialized */
|
|
#define R_RELOCATION 0x24 /* 24: 1 word, relocatable data */
|
|
#define R_DATA_ONE_SYMBOL 0x25 /* 25-26: 1 word, data external reference */
|
|
#define R_DATA_PLABEL 0x27 /* 27-28: 1 word, data plabel reference */
|
|
#define R_SPACE_REF 0x29 /* 29: 1 word, initialized space id */
|
|
#define R_REPEATED_INIT 0x2a /* 2a-2d: n words, repeated pattern */
|
|
/* 2e-2f: reserved */
|
|
#define R_PCREL_CALL 0x30 /* 30-3d: 1 word, pc-relative call */
|
|
/* 3e-3f: reserved */
|
|
#define R_ABS_CALL 0x40 /* 40-4d: 1 word, absolute call */
|
|
/* 4e-4f: reserved */
|
|
#define R_DP_RELATIVE 0x50 /* 50-72: 1 word, dp-relative load/store */
|
|
/* 73-77: reserved */
|
|
#define R_DLT_REL 0x78 /* 78-79: 1 word, dlt-relative load/store */
|
|
#define R_CODE_ONE_SYMBOL 0x80 /* 80-a2: 1 word, relocatable code */
|
|
/* a3-ad: reserved */
|
|
#define R_MILLI_REL 0xae /* ae-af: 1 word, millicode-relative branch */
|
|
#define R_CODE_PLABEL 0xb0 /* b0-b1: 1 word, code plabel reference */
|
|
#define R_BREAKPOINT 0xb2 /* b2: 1 word, statement breakpoint */
|
|
#define R_ENTRY 0xb3 /* b3-b4: procedure entry */
|
|
#define R_ALT_ENTRY 0xb5 /* b5: alternate exit */
|
|
#define R_EXIT 0xb6 /* b6: procedure exit */
|
|
#define R_BEGIN_TRY 0xb7 /* b7: start of try block */
|
|
#define R_END_TRY 0xb8 /* b8-ba: end of try block */
|
|
#define R_BEGIN_BRTAB 0xbb /* bb: start of branch table */
|
|
#define R_END_BRTAB 0xbc /* bc: end of branch table */
|
|
#define R_STATEMENT 0xbd /* bd-bf: statement number */
|
|
#define R_DATA_EXPR 0xc0 /* c0: 1 word, relocatable data expr */
|
|
#define R_CODE_EXPR 0xc1 /* c1: 1 word, relocatable code expr */
|
|
#define R_FSEL 0xc2 /* c2: F' override */
|
|
#define R_LSEL 0xc3 /* c3: L'/LD'/LS'/LR' override */
|
|
#define R_RSEL 0xc4 /* c4: R'/RD'/RS'/RR' override */
|
|
#define R_N_MODE 0xc5 /* c5: set L'/R' mode */
|
|
#define R_S_MODE 0xc6 /* c6: set LS'/RS' mode */
|
|
#define R_D_MODE 0xc7 /* c7: set LD'/RD' mode */
|
|
#define R_R_MODE 0xc8 /* c8: set LR'/RR' mode */
|
|
#define R_DATA_OVERRIDE 0xc9 /* c9-cd: get data from fixup area */
|
|
#define R_TRANSLATED 0xce /* ce: toggle translated mode */
|
|
#define R_AUX_UNWIND 0xcf /* cf: auxiliary unwind (proc begin) */
|
|
#define R_COMP1 0xd0 /* d0: arbitrary expression */
|
|
|
|
#define R_PUSH_PCON1 0x00 /* 00-3f: positive constant */
|
|
#define R_PUSH_DOT 0x40
|
|
#define R_MAX 0x41
|
|
#define R_MIN 0x42
|
|
#define R_ADD 0x43
|
|
#define R_SUB 0x44
|
|
#define R_MULT 0x45
|
|
#define R_DIV 0x46
|
|
#define R_MOD 0x47
|
|
#define R_AND 0x48
|
|
#define R_OR 0x49
|
|
#define R_XOR 0x4a
|
|
#define R_NOT 0x4b
|
|
/* 4c-5f: reserved */
|
|
#define R_LSHIFT 0x60 /* 60-7f: shift count (0-variable) */
|
|
#define R_ARITH_RSHIFT 0x80 /* 80-9f: shift count (0-variable) */
|
|
#define R_LOGIC_RSHIFT 0xa0 /* a0-bf: shift count (0-variable) */
|
|
#define R_PUSH_NCON1 0xc0 /* c0-ff: negative constant */
|
|
|
|
#define R_COMP2 0xd1 /* d1: arbitrary expression */
|
|
#define R_PUSH_PCON2 0x00 /* 00-7f: positive constant */
|
|
#define R_PUSH_SYM 0x80
|
|
/* 81: reserved */
|
|
#define R_PUSH_PLABEL 0x82 /* 82-83: plabel */
|
|
/* 84-bf: reserved */
|
|
#define R_PUSH_NCON2 0xc0 /* c0-ff: negative constant */
|
|
|
|
#define R_COMP3 0xd2 /* d2: arbitrary expression */
|
|
#define R_PUSH_PROC 0x00 /* 00-01: procedure */
|
|
#define R_PUSH_CONST 0x02 /* 02: constant */
|
|
/* 03-ff: reserved */
|
|
|
|
#define R_PREV_FIXUP 0xd3 /* d3-d6: apply previous fixup again */
|
|
#define R_SEC_STMT 0xd7 /* d7: secondary statement number */
|
|
/* d8-df: reserved */
|
|
#define R_RESERVED 0xe0 /* e0-ff: reserved for compiler/linker */
|
|
|
|
|
|
/*
|
|
* Loader fixups
|
|
*
|
|
* These are produced by the linker only when the -HK option is used.
|
|
* They indicate initialized pointers in the data space that contain
|
|
* the addresses of other locations in the data space, so that those
|
|
* pointers can be relocated at load time if the data is loaded at
|
|
* some address other than that specified at link time. (References
|
|
* from code to data are always relative to the dp register (r27),
|
|
* and will not need to be relocated.) These are needed primarily
|
|
* for the MPE XL operating system, but may be useful for some
|
|
* dynamic loading applications on HP-UX.
|
|
*/
|
|
|
|
struct loader_fixup {
|
|
unsigned int fixup_type;
|
|
unsigned int space_index; /* index of space to fix up */
|
|
unsigned int space_offset; /* offset at which to patch */
|
|
int constant; /* constant used to patch the space */
|
|
};
|
|
|
|
/* loader fixup types */
|
|
|
|
#define LD_SPACE_REF 0 /* space reference fixup */
|
|
#define LD_DATA_REF 1 /* data reference fixup */
|
|
#define LD_XRT_REF 2 /* XRT reference fixup */
|
|
|
|
#define LDRFIX struct loader_fixup
|
|
#define LDRFIXSZ sizeof(LDRFIX)
|
|
|
|
|
|
/*
|
|
* The following definitions are for old-format relocatable object
|
|
* files, and for absolute fixups (e_abs) in all executable files.
|
|
* Old relocatable object files were produced by compilers before
|
|
* HP-UX Release 3.0 on the Series 800, and the file header contains
|
|
* the version number VERSION_ID (see filehdr.h).
|
|
*
|
|
* Absolute fixups are produced by the linker only when the -HF
|
|
* option is specified. They record the locations of all absolute
|
|
* branches (LDIL/BLE) in the code, so that code can be relocated
|
|
* without being completely relinked. They are primarily useful
|
|
* only on MPE XL, but may be useful in dynamic loading applications
|
|
* on HP-UX.
|
|
*/
|
|
|
|
typedef struct fixup_request_record {
|
|
unsigned int need_data_ref : 1;
|
|
unsigned int arg_reloc : 10;
|
|
unsigned int expression_type: 5; /* type of expr. providing value */
|
|
unsigned int exec_level : 2; /* execution level at point of call */
|
|
unsigned int fixup_format : 6; /* inst. or data format */
|
|
unsigned int fixup_field : 8; /* field from fixup value */
|
|
unsigned int subspace_offset; /* offset of word to be fixed up */
|
|
unsigned int symbol_index_one; /* sequence # of symbol */
|
|
unsigned int symbol_index_two; /* sequence # of second symbol */
|
|
int fixup_constant; /* constant part */
|
|
} FIXUP;
|
|
|
|
/* field selectors */
|
|
|
|
#define e_fsel 0 /* F' : no change */
|
|
#define e_lssel 1 /* LS' : if (bit 21) then add 0x800
|
|
arithmetic shift right 11 bits */
|
|
#define e_rssel 2 /* RS' : Sign extend from bit 21 */
|
|
#define e_lsel 3 /* L' : Arithmetic shift right 11 bits */
|
|
#define e_rsel 4 /* R' : Set bits 0-20 to zero */
|
|
#define e_ldsel 5 /* LD' : Add 0x800, arithmetic shift
|
|
right 11 bits */
|
|
#define e_rdsel 6 /* RD' : Set bits 0-20 to one */
|
|
#define e_lrsel 7 /* LR' : L' with "rounded" constant */
|
|
#define e_rrsel 8 /* RR' : R' with "rounded" constant */
|
|
|
|
/* expression types */
|
|
|
|
#define e_one 0 /* label + constant */
|
|
#define e_two 1 /* label - label + constant */
|
|
#define e_pcrel 2 /* label - subspace offset + constant */
|
|
#define e_con 3 /* constant */
|
|
#define e_plabel 7 /* plabel for label */
|
|
#define e_abs 18 /* absolute, 1st sym index is address */
|
|
|
|
/* fixup formats */
|
|
|
|
#define i_exp14 0 /* 14 bit signed long displacement */
|
|
#define i_exp21 1 /* 21 bit signed immediate */
|
|
#define i_exp11 2 /* signed 11 bit immediate */
|
|
#define i_rel17 3 /* 19 bit signed displacement, discard */
|
|
/* 2 low order bits to make 17 bits */
|
|
#define i_rel12 4 /* 14 bit signed displacement, discard */
|
|
/* 2 low order bits to make 12 bits */
|
|
#define i_data 5 /* whole word */
|
|
#define i_none 6 /* no expression in this word */
|
|
#define i_abs17 7 /* same as i_rel17 */
|
|
#define i_milli 8 /* i_abs17 plus SR bits */
|
|
#define i_break 9 /* conditionally replace NOP w/ BREAK */
|
|
|
|
#define RELSZ sizeof(FIXUP)
|
|
|
|
#endif /* INCsom_coffh */
|