brintos

brintos / linux-shallow public Read only

0
0
Text · 4.7 KiB · ed3bdd4 Raw
206 lines · c
1/*2 * Aic7xxx SCSI host adapter firmware assembler symbol table definitions3 *4 * Copyright (c) 1997 Justin T. Gibbs.5 * Copyright (c) 2002 Adaptec Inc.6 * All rights reserved.7 *8 * Redistribution and use in source and binary forms, with or without9 * modification, are permitted provided that the following conditions10 * are met:11 * 1. Redistributions of source code must retain the above copyright12 *    notice, this list of conditions, and the following disclaimer,13 *    without modification.14 * 2. Redistributions in binary form must reproduce at minimum a disclaimer15 *    substantially similar to the "NO WARRANTY" disclaimer below16 *    ("Disclaimer") and any redistribution must be conditioned upon17 *    including a substantially similar Disclaimer requirement for further18 *    binary redistribution.19 * 3. Neither the names of the above-listed copyright holders nor the names20 *    of any contributors may be used to endorse or promote products derived21 *    from this software without specific prior written permission.22 *23 * Alternatively, this software may be distributed under the terms of the24 * GNU General Public License ("GPL") version 2 as published by the Free25 * Software Foundation.26 *27 * NO WARRANTY28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT32 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE38 * POSSIBILITY OF SUCH DAMAGES.39 *40 * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_symbol.h#17 $41 *42 * $FreeBSD$43 */44 45#include "../queue.h"46 47typedef enum {48	UNINITIALIZED,49	REGISTER,50	ALIAS,51	SCBLOC,52	SRAMLOC,53	ENUM_ENTRY,54	FIELD,55	MASK,56	ENUM,57	CONST,58	DOWNLOAD_CONST,59	LABEL,60	CONDITIONAL,61	MACRO62} symtype;63 64typedef enum {65	RO = 0x01,66	WO = 0x02,67	RW = 0x0368}amode_t;69 70typedef SLIST_HEAD(symlist, symbol_node) symlist_t;71 72struct reg_info {73	u_int	  address;74	int	  size;75	amode_t	  mode;76	symlist_t fields;77	uint8_t	  valid_bitmask;78	uint8_t	  modes;79	int	  typecheck_masks;80};81 82struct field_info {83	symlist_t symrefs;84	uint8_t	  value;85	uint8_t	  mask;86};87 88struct const_info {89	u_int	value;90	int	define;91};92 93struct alias_info {94	struct symbol *parent;95};96 97struct label_info {98	int	address;99	int	exported;100};101 102struct cond_info {103	int	func_num;104};105 106struct macro_arg {107	STAILQ_ENTRY(macro_arg)	links;108	regex_t	arg_regex;109	char   *replacement_text;110};111STAILQ_HEAD(macro_arg_list, macro_arg);112 113struct macro_info {114	struct macro_arg_list args;115	int   narg;116	const char* body;117};118 119typedef struct expression_info {120        symlist_t       referenced_syms;121        int             value;122} expression_t;123 124typedef struct symbol {125	char	*name;126	symtype	type;127	int	count;128	union	{129		struct reg_info	  *rinfo;130		struct field_info *finfo;131		struct const_info *cinfo;132		struct alias_info *ainfo;133		struct label_info *linfo;134		struct cond_info  *condinfo;135		struct macro_info *macroinfo;136	} info;137	int	dont_generate_debug_code;138} symbol_t;139 140typedef struct symbol_ref {141	symbol_t *symbol;142	int	 offset;143} symbol_ref_t;144 145typedef struct symbol_node {146	SLIST_ENTRY(symbol_node) links;147	symbol_t *symbol;148} symbol_node_t;149 150typedef struct critical_section {151	TAILQ_ENTRY(critical_section) links;152	int begin_addr;153	int end_addr;154} critical_section_t;155 156typedef enum {157	SCOPE_ROOT,158	SCOPE_IF,159	SCOPE_ELSE_IF,160	SCOPE_ELSE161} scope_type;162 163typedef struct patch_info {164	int skip_patch;165	int skip_instr;166} patch_info_t;167 168typedef struct scope {169	SLIST_ENTRY(scope) scope_stack_links;170	TAILQ_ENTRY(scope) scope_links;171	TAILQ_HEAD(, scope) inner_scope;172	scope_type type;173	int inner_scope_patches;174	int begin_addr;175        int end_addr;176	patch_info_t patches[2];177	int func_num;178} scope_t;179 180TAILQ_HEAD(cs_tailq, critical_section);181SLIST_HEAD(scope_list, scope);182TAILQ_HEAD(scope_tailq, scope);183 184void	symbol_delete(symbol_t *symbol);185 186void	symtable_open(void);187 188void	symtable_close(void);189 190symbol_t *191	symtable_get(char *name);192 193symbol_node_t *194	symlist_search(symlist_t *symlist, char *symname);195 196void197	symlist_add(symlist_t *symlist, symbol_t *symbol, int how);198#define SYMLIST_INSERT_HEAD	0x00199#define SYMLIST_SORT		0x01200 201void	symlist_free(symlist_t *symlist);202 203void	symlist_merge(symlist_t *symlist_dest, symlist_t *symlist_src1,204		      symlist_t *symlist_src2);205void	symtable_dump(FILE *ofile, FILE *dfile);206