aicasm_symbol.h revision 23925
123925Sgibbs/* 223925Sgibbs * Aic7xxx SCSI host adapter firmware asssembler symbol table definitions 323925Sgibbs * 423925Sgibbs * Copyright (c) 1997 Justin T. Gibbs. 523925Sgibbs * All rights reserved. 623925Sgibbs * 723925Sgibbs * Redistribution and use in source and binary forms, with or without 823925Sgibbs * modification, are permitted provided that the following conditions 923925Sgibbs * are met: 1023925Sgibbs * 1. Redistributions of source code must retain the above copyright 1123925Sgibbs * notice immediately at the beginning of the file, without modification, 1223925Sgibbs * this list of conditions, and the following disclaimer. 1323925Sgibbs * 2. Redistributions in binary form must reproduce the above copyright 1423925Sgibbs * notice, this list of conditions and the following disclaimer in the 1523925Sgibbs * documentation and/or other materials provided with the distribution. 1623925Sgibbs * 3. The name of the author may not be used to endorse or promote products 1723925Sgibbs * derived from this software without specific prior written permission. 1823925Sgibbs * 1923925Sgibbs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2023925Sgibbs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2123925Sgibbs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2223925Sgibbs * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 2323925Sgibbs * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2423925Sgibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2523925Sgibbs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2623925Sgibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2723925Sgibbs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2823925Sgibbs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2923925Sgibbs * SUCH DAMAGE. 3023925Sgibbs * 3123925Sgibbs * $Id$ 3223925Sgibbs */ 3323925Sgibbs 3423925Sgibbs#include <sys/queue.h> 3523925Sgibbs 3623925Sgibbstypedef enum { 3723925Sgibbs UNINITIALIZED, 3823925Sgibbs REGISTER, 3923925Sgibbs ALIAS, 4023925Sgibbs SCBLOC, 4123925Sgibbs SRAMLOC, 4223925Sgibbs MASK, 4323925Sgibbs BIT, 4423925Sgibbs CONST, 4523925Sgibbs LABEL, 4623925Sgibbs CONDITIONAL 4723925Sgibbs}symtype; 4823925Sgibbs 4923925Sgibbstypedef enum { 5023925Sgibbs RO = 0x01, 5123925Sgibbs WO = 0x02, 5223925Sgibbs RW = 0x03 5323925Sgibbs}amode_t; 5423925Sgibbs 5523925Sgibbsstruct reg_info { 5623925Sgibbs u_int8_t address; 5723925Sgibbs int size; 5823925Sgibbs amode_t mode; 5923925Sgibbs u_int8_t valid_bitmask; 6023925Sgibbs int typecheck_masks; 6123925Sgibbs}; 6223925Sgibbs 6323925Sgibbstypedef SLIST_HEAD(symlist, symbol_node) symlist_t; 6423925Sgibbs 6523925Sgibbsstruct mask_info { 6623925Sgibbs symlist_t symrefs; 6723925Sgibbs u_int8_t mask; 6823925Sgibbs}; 6923925Sgibbs 7023925Sgibbsstruct const_info { 7123925Sgibbs u_int8_t value; 7223925Sgibbs int define; 7323925Sgibbs}; 7423925Sgibbs 7523925Sgibbsstruct alias_info { 7623925Sgibbs struct symbol *parent; 7723925Sgibbs}; 7823925Sgibbs 7923925Sgibbsstruct label_info { 8023925Sgibbs int address; 8123925Sgibbs}; 8223925Sgibbs 8323925Sgibbsstruct cond_info { 8423925Sgibbs int value; 8523925Sgibbs}; 8623925Sgibbs 8723925Sgibbstypedef struct expression_info { 8823925Sgibbs symlist_t referenced_syms; 8923925Sgibbs int value; 9023925Sgibbs} expression_t; 9123925Sgibbs 9223925Sgibbstypedef struct symbol { 9323925Sgibbs char *name; 9423925Sgibbs symtype type; 9523925Sgibbs union { 9623925Sgibbs struct reg_info *rinfo; 9723925Sgibbs struct mask_info *minfo; 9823925Sgibbs struct const_info *cinfo; 9923925Sgibbs struct alias_info *ainfo; 10023925Sgibbs struct label_info *linfo; 10123925Sgibbs struct cond_info *condinfo; 10223925Sgibbs }info; 10323925Sgibbs} symbol_t; 10423925Sgibbs 10523925Sgibbstypedef struct symbol_ref { 10623925Sgibbs symbol_t *symbol; 10723925Sgibbs int offset; 10823925Sgibbs} symbol_ref_t; 10923925Sgibbs 11023925Sgibbstypedef struct symbol_node { 11123925Sgibbs SLIST_ENTRY(symbol_node) links; 11223925Sgibbs symbol_t *symbol; 11323925Sgibbs}symbol_node_t; 11423925Sgibbs 11523925Sgibbstypedef struct patch { 11623925Sgibbs STAILQ_ENTRY(patch) links; 11723925Sgibbs int negative; 11823925Sgibbs int begin; 11923925Sgibbs int end; 12023925Sgibbs int options; 12123925Sgibbs} patch_t; 12223925Sgibbs 12323925Sgibbsvoid symbol_delete __P((symbol_t *symbol)); 12423925Sgibbs 12523925Sgibbsvoid symtable_open __P((void)); 12623925Sgibbs 12723925Sgibbsvoid symtable_close __P((void)); 12823925Sgibbs 12923925Sgibbssymbol_t * 13023925Sgibbs symtable_get __P((char *name)); 13123925Sgibbs 13223925Sgibbssymbol_node_t * 13323925Sgibbs symlist_search __P((symlist_t *symlist, char *symname)); 13423925Sgibbs 13523925Sgibbsvoid 13623925Sgibbs symlist_add __P((symlist_t *symlist, symbol_t *symbol, int how)); 13723925Sgibbs#define SYMLIST_INSERT_HEAD 0x00 13823925Sgibbs#define SYMLIST_SORT 0x01 13923925Sgibbs 14023925Sgibbsvoid symlist_free __P((symlist_t *symlist)); 14123925Sgibbs 14223925Sgibbsvoid symlist_merge __P((symlist_t *symlist_dest, symlist_t *symlist_src1, 14323925Sgibbs symlist_t *symlist_src2)); 14423925Sgibbsvoid symtable_dump __P((FILE *ofile)); 145