亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aicasm_symbol.c

?? IXP425 平臺下嵌入式LINUX的SCSI設備的驅動程序
?? C
字號:
/* * Aic7xxx SCSI host adapter firmware asssembler symbol table implementation * * Copyright (c) 1997 Justin T. Gibbs. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer *    substantially similar to the "NO WARRANTY" disclaimer below *    ("Disclaimer") and any redistribution must be conditioned upon *    including a substantially similar Disclaimer requirement for further *    binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names *    of any contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_symbol.c#13 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_symbol.c,v 1.11 2000/09/22 22:19:54 gibbs Exp $ */#include <sys/types.h>#ifdef __linux__#include "aicdb.h"#else#include <db.h>#endif#include <fcntl.h>#include <regex.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sysexits.h>#include "aicasm_symbol.h"#include "aicasm.h"static DB *symtable;symbol_t *symbol_create(char *name){	symbol_t *new_symbol;	new_symbol = (symbol_t *)malloc(sizeof(symbol_t));	if (new_symbol == NULL) {		perror("Unable to create new symbol");		exit(EX_SOFTWARE);	}	memset(new_symbol, 0, sizeof(*new_symbol));	new_symbol->name = strdup(name);	new_symbol->type = UNINITIALIZED;	return (new_symbol);}voidsymbol_delete(symbol_t *symbol){	if (symtable != NULL) {		DBT	 key;		key.data = symbol->name;		key.size = strlen(symbol->name);		symtable->del(symtable, &key, /*flags*/0);	}	switch(symbol->type) {	case SCBLOC:	case SRAMLOC:	case REGISTER:		if (symbol->info.rinfo != NULL)			free(symbol->info.rinfo);		break;	case ALIAS:		if (symbol->info.ainfo != NULL)			free(symbol->info.ainfo);		break;	case MASK:	case BIT:		if (symbol->info.minfo != NULL) {			symlist_free(&symbol->info.minfo->symrefs);			free(symbol->info.minfo);		}		break;	case DOWNLOAD_CONST:	case CONST:		if (symbol->info.cinfo != NULL)			free(symbol->info.cinfo);		break;	case LABEL:		if (symbol->info.linfo != NULL)			free(symbol->info.linfo);		break;	case UNINITIALIZED:	default:		break;	}	free(symbol->name);	free(symbol);}voidsymtable_open(){	symtable = dbopen(/*filename*/NULL,			  O_CREAT | O_NONBLOCK | O_RDWR, /*mode*/0, DB_HASH,			  /*openinfo*/NULL);	if (symtable == NULL) {		perror("Symbol table creation failed");		exit(EX_SOFTWARE);		/* NOTREACHED */	}}voidsymtable_close(){	if (symtable != NULL) {		DBT	 key;		DBT	 data;		while (symtable->seq(symtable, &key, &data, R_FIRST) == 0) {			symbol_t *stored_ptr;			memcpy(&stored_ptr, data.data, sizeof(stored_ptr));			symbol_delete(stored_ptr);		}		symtable->close(symtable);	}}/* * The semantics of get is to return an uninitialized symbol entry * if a lookup fails. */symbol_t *symtable_get(char *name){	symbol_t *stored_ptr;	DBT	  key;	DBT	  data;	int	  retval;	key.data = (void *)name;	key.size = strlen(name);	if ((retval = symtable->get(symtable, &key, &data, /*flags*/0)) != 0) {		if (retval == -1) {			perror("Symbol table get operation failed");			exit(EX_SOFTWARE);			/* NOTREACHED */		} else if (retval == 1) {			/* Symbol wasn't found, so create a new one */			symbol_t *new_symbol;			new_symbol = symbol_create(name);			data.data = &new_symbol;			data.size = sizeof(new_symbol);			if (symtable->put(symtable, &key, &data,					  /*flags*/0) !=0) {				perror("Symtable put failed");				exit(EX_SOFTWARE);			}			return (new_symbol);		} else {			perror("Unexpected return value from db get routine");			exit(EX_SOFTWARE);			/* NOTREACHED */		}	}	memcpy(&stored_ptr, data.data, sizeof(stored_ptr));	return (stored_ptr);}symbol_node_t *symlist_search(symlist_t *symlist, char *symname){	symbol_node_t *curnode;	curnode = SLIST_FIRST(symlist);	while(curnode != NULL) {		if (strcmp(symname, curnode->symbol->name) == 0)			break;		curnode = SLIST_NEXT(curnode, links);	}	return (curnode);}voidsymlist_add(symlist_t *symlist, symbol_t *symbol, int how){	symbol_node_t *newnode;	newnode = (symbol_node_t *)malloc(sizeof(symbol_node_t));	if (newnode == NULL) {		stop("symlist_add: Unable to malloc symbol_node", EX_SOFTWARE);		/* NOTREACHED */	}	newnode->symbol = symbol;	if (how == SYMLIST_SORT) {		symbol_node_t *curnode;		int mask;		mask = FALSE;		switch(symbol->type) {		case REGISTER:		case SCBLOC:		case SRAMLOC:			break;		case BIT:		case MASK:			mask = TRUE;			break;		default:			stop("symlist_add: Invalid symbol type for sorting",			     EX_SOFTWARE);			/* NOTREACHED */		}		curnode = SLIST_FIRST(symlist);		if (curnode == NULL		 || (mask && (curnode->symbol->info.minfo->mask >		              newnode->symbol->info.minfo->mask))		 || (!mask && (curnode->symbol->info.rinfo->address >		               newnode->symbol->info.rinfo->address))) {			SLIST_INSERT_HEAD(symlist, newnode, links);			return;		}		while (1) {			if (SLIST_NEXT(curnode, links) == NULL) {				SLIST_INSERT_AFTER(curnode, newnode,						   links);				break;			} else {				symbol_t *cursymbol;				cursymbol = SLIST_NEXT(curnode, links)->symbol;				if ((mask && (cursymbol->info.minfo->mask >				              symbol->info.minfo->mask))				 || (!mask &&(cursymbol->info.rinfo->address >				              symbol->info.rinfo->address))){					SLIST_INSERT_AFTER(curnode, newnode,							   links);					break;				}			}			curnode = SLIST_NEXT(curnode, links);		}	} else {		SLIST_INSERT_HEAD(symlist, newnode, links);	}}voidsymlist_free(symlist_t *symlist){	symbol_node_t *node1, *node2;	node1 = SLIST_FIRST(symlist);	while (node1 != NULL) {		node2 = SLIST_NEXT(node1, links);		free(node1);		node1 = node2;	}	SLIST_INIT(symlist);}voidsymlist_merge(symlist_t *symlist_dest, symlist_t *symlist_src1,	      symlist_t *symlist_src2){	symbol_node_t *node;	*symlist_dest = *symlist_src1;	while((node = SLIST_FIRST(symlist_src2)) != NULL) {		SLIST_REMOVE_HEAD(symlist_src2, links);		SLIST_INSERT_HEAD(symlist_dest, node, links);	}	/* These are now empty */	SLIST_INIT(symlist_src1);	SLIST_INIT(symlist_src2);}voidsymtable_dump(FILE *ofile){	/*	 * Sort the registers by address with a simple insertion sort.	 * Put bitmasks next to the first register that defines them.	 * Put constants at the end.	 */	symlist_t registers;	symlist_t masks;	symlist_t constants;	symlist_t download_constants;	symlist_t aliases;	symlist_t exported_labels;	u_int	  i;	SLIST_INIT(&registers);	SLIST_INIT(&masks);	SLIST_INIT(&constants);	SLIST_INIT(&download_constants);	SLIST_INIT(&aliases);	SLIST_INIT(&exported_labels);	if (symtable != NULL) {		DBT	 key;		DBT	 data;		int	 flag = R_FIRST;		while (symtable->seq(symtable, &key, &data, flag) == 0) {			symbol_t *cursym;			memcpy(&cursym, data.data, sizeof(cursym));			switch(cursym->type) {			case REGISTER:			case SCBLOC:			case SRAMLOC:				symlist_add(&registers, cursym, SYMLIST_SORT);				break;			case MASK:			case BIT:				symlist_add(&masks, cursym, SYMLIST_SORT);				break;			case CONST:				symlist_add(&constants, cursym,					    SYMLIST_INSERT_HEAD);				break;			case DOWNLOAD_CONST:				symlist_add(&download_constants, cursym,					    SYMLIST_INSERT_HEAD);				break;			case ALIAS:				symlist_add(&aliases, cursym,					    SYMLIST_INSERT_HEAD);				break;			case LABEL:				if (cursym->info.linfo->exported == 0)					break;				symlist_add(&exported_labels, cursym,					    SYMLIST_INSERT_HEAD);				break;			default:				break;			}			flag = R_NEXT;		}		/* Put in the masks and bits */		while (SLIST_FIRST(&masks) != NULL) {			symbol_node_t *curnode;			symbol_node_t *regnode;			char *regname;			curnode = SLIST_FIRST(&masks);			SLIST_REMOVE_HEAD(&masks, links);			regnode =			    SLIST_FIRST(&curnode->symbol->info.minfo->symrefs);			regname = regnode->symbol->name;			regnode = symlist_search(&registers, regname);			SLIST_INSERT_AFTER(regnode, curnode, links);		}		/* Add the aliases */		while (SLIST_FIRST(&aliases) != NULL) {			symbol_node_t *curnode;			symbol_node_t *regnode;			char *regname;			curnode = SLIST_FIRST(&aliases);			SLIST_REMOVE_HEAD(&aliases, links);			regname = curnode->symbol->info.ainfo->parent->name;			regnode = symlist_search(&registers, regname);			SLIST_INSERT_AFTER(regnode, curnode, links);		}		/* Output what we have */		fprintf(ofile,"/* * DO NOT EDIT - This file is automatically generated *		 from the following source files: *%s */\n", versions);		while (SLIST_FIRST(&registers) != NULL) {			symbol_node_t *curnode;			u_int value;			char *tab_str;			char *tab_str2;			curnode = SLIST_FIRST(&registers);			SLIST_REMOVE_HEAD(&registers, links);			switch(curnode->symbol->type) {			case REGISTER:			case SCBLOC:			case SRAMLOC:				fprintf(ofile, "\n");				value = curnode->symbol->info.rinfo->address;				tab_str = "\t";				tab_str2 = "\t\t";				break;			case ALIAS:			{				symbol_t *parent;				parent = curnode->symbol->info.ainfo->parent;				value = parent->info.rinfo->address;				tab_str = "\t";				tab_str2 = "\t\t";				break;			}			case MASK:			case BIT:				value = curnode->symbol->info.minfo->mask;				tab_str = "\t\t";				tab_str2 = "\t";				break;			default:				value = 0; /* Quiet compiler */				tab_str = NULL;				tab_str2 = NULL;				stop("symtable_dump: Invalid symbol type "				     "encountered", EX_SOFTWARE);				break;			}			fprintf(ofile, "#define%s%-16s%s0x%02x\n",				tab_str, curnode->symbol->name, tab_str2,				value);			free(curnode);		}		fprintf(ofile, "\n\n");		while (SLIST_FIRST(&constants) != NULL) {			symbol_node_t *curnode;			curnode = SLIST_FIRST(&constants);			SLIST_REMOVE_HEAD(&constants, links);			fprintf(ofile, "#define\t%-8s\t0x%02x\n",				curnode->symbol->name,				curnode->symbol->info.cinfo->value);			free(curnode);		}				fprintf(ofile, "\n\n/* Downloaded Constant Definitions */\n");		for (i = 0; SLIST_FIRST(&download_constants) != NULL; i++) {			symbol_node_t *curnode;			curnode = SLIST_FIRST(&download_constants);			SLIST_REMOVE_HEAD(&download_constants, links);			fprintf(ofile, "#define\t%-8s\t0x%02x\n",				curnode->symbol->name,				curnode->symbol->info.cinfo->value);			free(curnode);		}		fprintf(ofile, "#define\tDOWNLOAD_CONST_COUNT\t0x%02x\n", i);		fprintf(ofile, "\n\n/* Exported Labels */\n");		while (SLIST_FIRST(&exported_labels) != NULL) {			symbol_node_t *curnode;			curnode = SLIST_FIRST(&exported_labels);			SLIST_REMOVE_HEAD(&exported_labels, links);			fprintf(ofile, "#define\tLABEL_%-8s\t0x%02x\n",				curnode->symbol->name,				curnode->symbol->info.linfo->address);			free(curnode);		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本电影欧美片| 中文字幕精品—区二区四季| 欧美一区二区三区思思人| 国产欧美一区二区精品性| 亚洲一级在线观看| 国产精品自拍在线| 88在线观看91蜜桃国自产| 中文字幕在线不卡一区| 狠狠色丁香久久婷婷综| 69久久99精品久久久久婷婷| 亚洲欧洲av另类| 国内成人免费视频| 这里只有精品视频在线观看| 一区二区三区国产| 成人av一区二区三区| 久久麻豆一区二区| 捆绑调教一区二区三区| 欧美日韩成人综合在线一区二区| 日韩美女久久久| 丁香一区二区三区| 久久男人中文字幕资源站| 丝袜美腿亚洲综合| 欧美日韩欧美一区二区| 亚洲精品自拍动漫在线| 99久久精品国产精品久久| 国产欧美精品日韩区二区麻豆天美| 日本视频在线一区| 欧美一区二区在线视频| 午夜亚洲国产au精品一区二区| 99re热视频精品| |精品福利一区二区三区| 福利电影一区二区| 亚洲国产精品二十页| 东方aⅴ免费观看久久av| 国产欧美久久久精品影院| 国产精品一二三在| 中文字幕久久午夜不卡| 欧美一区二区福利视频| 亚洲v日本v欧美v久久精品| 欧美日韩一区二区三区在线| 亚洲国产日产av| 777奇米四色成人影色区| 日韩高清在线观看| 日韩美女视频一区二区在线观看| 捆绑变态av一区二区三区 | 一区二区三区四区高清精品免费观看 | 成人av小说网| 国产精品久久久久久久久久免费看| 成人在线视频首页| 18欧美乱大交hd1984| 91成人在线精品| 午夜婷婷国产麻豆精品| 日韩欧美一区中文| 国产成人一区在线| 亚洲欧美日韩综合aⅴ视频| 欧美探花视频资源| 日本aⅴ亚洲精品中文乱码| 久久综合色鬼综合色| 粉嫩蜜臀av国产精品网站| 亚洲精品美国一| 欧美老年两性高潮| 国产一区久久久| 国产精品欧美久久久久无广告| 91一区二区三区在线播放| 亚洲成人av免费| 久久亚洲一区二区三区明星换脸| hitomi一区二区三区精品| 亚洲国产成人tv| 国产亚洲欧洲997久久综合| 93久久精品日日躁夜夜躁欧美| 天天操天天干天天综合网| 五月激情六月综合| 国产精品久久久一本精品| 欧美日韩高清一区二区不卡| 国产成人午夜精品影院观看视频 | 有坂深雪av一区二区精品| 欧美一区二区三区免费视频| 成人av午夜电影| 日韩国产欧美三级| 亚洲欧洲另类国产综合| 精品剧情v国产在线观看在线| av高清久久久| 精品在线观看视频| 亚洲国产你懂的| 国产欧美日韩亚州综合| 91精品国产综合久久香蕉麻豆| 成人美女视频在线看| 男人的j进女人的j一区| 亚洲亚洲人成综合网络| 欧美国产精品专区| 精品少妇一区二区三区| 欧美日韩精品一二三区| 成人国产精品免费观看视频| 蜜桃av噜噜一区二区三区小说| 亚洲精品一卡二卡| 日本一区二区免费在线观看视频| 91精品国产入口| 日本韩国欧美在线| aa级大片欧美| 成人一级视频在线观看| 精一区二区三区| 日韩国产欧美在线观看| 午夜欧美视频在线观看| 亚洲最大成人综合| 亚洲柠檬福利资源导航| 国产精品乱子久久久久| 欧美国产日本视频| 久久精品一区二区三区av| 精品国产一区二区精华| 欧美一级夜夜爽| 91精品国产91久久久久久一区二区| 在线观看亚洲精品| 色一区在线观看| 色婷婷狠狠综合| 色爱区综合激月婷婷| 一本久久a久久精品亚洲| 91一区二区在线| 日本韩国精品一区二区在线观看| 99视频国产精品| heyzo一本久久综合| 91丨porny丨首页| 91理论电影在线观看| 91小视频免费看| 色嗨嗨av一区二区三区| 欧美在线看片a免费观看| 精品视频1区2区3区| 欧美一级一级性生活免费录像| 日韩一卡二卡三卡| 久久蜜桃av一区二区天堂| 国产欧美一区二区三区鸳鸯浴 | 欧美丰满高潮xxxx喷水动漫| 欧美日本一区二区在线观看| 91精品欧美一区二区三区综合在| 欧美一区二区视频网站| 精品久久久久久久久久久久久久久久久| 欧美电影免费观看高清完整版在线| 精品噜噜噜噜久久久久久久久试看| www国产成人| 亚洲视频免费观看| 亚洲h精品动漫在线观看| 蜜臀久久99精品久久久画质超高清| 九九**精品视频免费播放| 成人av片在线观看| 欧美日韩精品一区二区天天拍小说| 日韩欧美一区在线| 国产精品嫩草影院av蜜臀| 一区二区三区在线免费播放| 亚洲.国产.中文慕字在线| 国产综合一区二区| 日本丰满少妇一区二区三区| 日韩午夜激情视频| 国产精品女主播av| 日韩影视精彩在线| 国产精品一区二区不卡| 在线亚洲+欧美+日本专区| 欧美大片顶级少妇| 亚洲靠逼com| 国产一区二区视频在线播放| 99精品久久99久久久久| 日韩一区二区在线看片| 日韩久久一区二区| 蜜桃久久久久久| 在线一区二区三区做爰视频网站| 日韩一区二区三区四区| 亚洲人成小说网站色在线| 美女看a上一区| 在线日韩一区二区| 国产欧美精品一区| 久久精品国产秦先生| 色8久久精品久久久久久蜜| 欧美精品一区二区在线观看| 亚洲一线二线三线久久久| 国产高清亚洲一区| 日韩一区二区在线看| 亚洲影院免费观看| 成人国产精品免费观看视频| 日韩美女一区二区三区四区| 亚洲在线视频一区| 99久久er热在这里只有精品66| 精品国产乱子伦一区| 性欧美大战久久久久久久久| 99九九99九九九视频精品| 久久女同精品一区二区| 美女免费视频一区| 777欧美精品| 亚洲成人自拍偷拍| 日本大香伊一区二区三区| 国产精品剧情在线亚洲| 国产一区不卡视频| 欧美成人一区二区三区片免费| 午夜亚洲福利老司机| 欧美三级韩国三级日本三斤 | 2022国产精品视频| 免费在线看一区| 欧美一区二区福利在线| 婷婷丁香激情综合| 欧美日韩免费视频| 亚洲永久精品大片| 欧美日本在线看| 日韩精品成人一区二区在线|