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

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

?? modulelib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* moduleLib.c - object module management library */ /* Copyright 1992-1996 Wind River Systems, Inc. */#include "copyright_wrs.h" /*modification history--------------------01r,15mar99,c_c  Doc: updated moduleSegAdd () (SPR #6138).01q,27sep96,pad  reinstated a line I deleted accidentally.01p,11sep96,pad  strengthened group number handling (SPR #7133).01o,10oct95,jdi  doc: added .tG Shell to SEE ALSO for moduleShow();		 changed .pG Cross-Dev to .tG; corrections to moduleCreate().01n,14mar93,jdi  fixed documentation for moduleDelete().01m,15feb93,kdl  changed documentation for moduleFlagsGet().01l,12feb93,jmm  changed documentation for moduleDelete ()01k,27nov92,jdi  documentation cleanup.01j,30oct92,jmm  moduleSegInfoGet() now zeros out info structure (spr 1702)                 moduleFindByName () gets just the name part of moduleName		     (spr 1718)01i,14oct92,jdi  made moduleInit() and moduleTerminate() NOMANUAL.01h,12oct92,jdi  fixed mangen problem in moduleCreateHookDelete().01g,27aug92,jmm  changed moduleSegInfoGet() to use new MODULE_SEG_INFO struct                 changed symFlags to flags		 added moduleNameGet(), moduleFlagsGet()		 set ctors and dtors to NULL in moduleInit()01f,31jul92,jmm  cleaned up forward declarations01e,30jul92,smb  changed format for printf to avoid zero padding.01d,28jul92,jmm  made NODE_TO_ID macro portable to i96001c,20jul92,jmm  removed checksum() routine (duplicate of routine in cksumLib.c)                 removed bzero() of segment id from moduleSegGet()		 added check for HIDDEN_MODULE flag to moduleDisplayGeneric()01b,18jul92,smb  Changed errno.h to errnoLib.h.01a,jmm,01may92  written */ /*DESCRIPTIONThis library is a class manager, using the standard VxWorks class/objectfacilities.  The library is used to keep track of which object moduleshave been loaded into VxWorks, to maintain information about objectmodule segments associated with each module, and to track whichsymbols belong to which module.  Tracking modules makes it possible tolist which modules are currently loaded, and to unload them whenthey are no longer needed.The module object contains the following information:    - name    - linked list of segments, including base addresses      and sizes    - symbol group number    - format of the object module (a.out, COFF, ECOFF, etc.)    - the <symFlag> passed to ld() when the module was      loaded.  (For more information about <symFlag> and the      loader, see the manual entry for loadLib.)Multiple modules with the same name are allowed (the same module maybe loaded without first being unloaded) but "find" functions find themost recently created module.The symbol group number is a unique number for each module, used toidentify the module's symbols in the symbol table.  This number isassigned by moduleLib when a module is created.In general, users will not access these routines directly, with theexception of moduleShow(), which displays information about currentlyloaded modules.  Most calls to this library will be from routines inloadLib and unldLib.INCLUDE FILES: moduleLib.hSEE ALSO: loadLib,.tG "Cross-Development"*/#include "vxWorks.h"#include "classLib.h"#include "dllLib.h"#include "errnoLib.h"#include "moduleLib.h"#include "objLib.h"#include "pathLib.h"#include "semLib.h"#include "stdio.h"#include "stdlib.h"#include "stddef.h"#include "string.h"#include "vxLib.h"#include "loadLib.h"#define NODE_TO_ID(pNode) (pNode != NULL ? (MODULE_ID) ((char *) pNode - \				         offsetof (MODULE, moduleNode)) : NULL)typedef struct    {    DL_NODE node;    FUNCPTR func;    } MODCREATE_HOOK;/* forward declarations */ LOCAL STATUS moduleDestroy (MODULE_ID moduleId, BOOL dealloc);LOCAL STATUS moduleDisplayGeneric (MODULE_ID moduleId, UINT options);LOCAL STATUS moduleSegInfoGet (MODULE_ID moduleId,			       MODULE_SEG_INFO *pModSegInfo);LOCAL BOOL   moduleCheckSegment (SEGMENT_ID segmentId);LOCAL BOOL   moduleCheckOne (MODULE_ID moduleId, int options);LOCAL STATUS moduleInsert (MODULE_ID newModule);/* LOCALS */static BOOL	 moduleLibInitialized = FALSE; /* prevent multiple inits */LOCAL OBJ_CLASS	 moduleClass;LOCAL DL_LIST 	 moduleCreateHookList;LOCAL SEM_ID	 moduleCreateHookSem;LOCAL BOOL 	 moduleCreateHookInitialized 	= FALSE;LOCAL BOOL  	 moduleLibDebug 		= FALSE;LOCAL DL_LIST	 moduleList;	/* list of loaded modules */LOCAL SEM_ID	 moduleListSem;	/* semaphore to protect moduleList */LOCAL SEM_ID	 moduleSegSem;	/* semaphore to protect all segment lists */LOCAL FUNCPTR 	 moduleDisplayRtn;/* GLOBALS */CLASS_ID moduleClassId = &moduleClass;/******************************************************************************** moduleLibInit - initialize object module library* * This routine initializes the object module tracking facility.  It* should be called once from usrRoot().* * RETURNS: OK or ERROR.* * NOMANUAL*/STATUS moduleLibInit    (    void    )    {    STATUS      returnValue;	/* function return value */    /*     * If moduleLibInitialized has been set to TRUE, the library's already     * initialized.  Return OK.     */    if (moduleLibInitialized)        return (OK);    /* Initialize the module list and its protecting semaphore */    moduleListSem = semMCreate (SEM_DELETE_SAFE);    dllInit (&moduleList);    /* Initialize the semaphore protecting all segment lists */    moduleSegSem = semMCreate (SEM_DELETE_SAFE);    /* Initialize the create hook list */    moduleCreateHookSem = semMCreate (SEM_DELETE_SAFE);    dllInit (&moduleCreateHookList);    moduleCreateHookInitialized = TRUE;    /*     * Initialize the display routine function pointer.     * Currently, this is hard-coded to moduleDisplayGeneric().     * At some future point, when we need to display other object     * module formats, this will need to be changed.     */    moduleDisplayRtn = moduleDisplayGeneric;    /* Initialize the module class */    returnValue = classInit (moduleClassId, sizeof (MODULE),			     OFFSET (MODULE, objCore),			     (FUNCPTR) moduleCreate, (FUNCPTR) moduleInit,			     (FUNCPTR) moduleDestroy);    /* Library has been initialized, return */    moduleLibInitialized = TRUE;    return (returnValue);    }/******************************************************************************** moduleCreate - create and initialize a module* * This routine creates an object module descriptor.* * The arguments specify the name of the object module file, * the object module format, and an argument specifying which symbols* to add to the symbol table.  See the loadModuleAt() description of <symFlag>* for possibles <flags> values.* * Space for the new module is dynamically allocated.* * RETURNS: MODULE_ID, or NULL if there is an error.** SEE ALSO: loadModuleAt()*/MODULE_ID moduleCreate    (    char *	name,	 /* module name */    int 	format,	 /* object module format */    int		flags	 /* <symFlag> as passed to loader (see loadModuleAt()) */    )    {    MODULE_ID	moduleId;    /* Allocate the object, return NULL if objAlloc() fails */    moduleId = objAlloc (moduleClassId);    if (moduleId == NULL)	{	printf ("errno %#x\n", errnoGet());        return (NULL);	}    /* Call moduleInit() to do the real work */    if (moduleInit (moduleId, name, format, flags) != OK)	{	objFree (moduleClassId, (char *) moduleId);        return (NULL);	}    return (moduleId);    }/******************************************************************************** moduleInit - initialize a module* * This routine initializes an object module descriptor.  Instead of* dynamically allocating the space for the module descriptor,* moduleInit() takes a pointer to an existing MODULE structure to initialize.* The other arguments are identical to the moduleCreate() arguments.* * RETURNS: OK, or ERROR.** NOMANUAL*/STATUS moduleInit    (    MODULE_ID		moduleId,	/* ptr to module to initialize */    char *		name,		/* module name */    int 		format,		/* object module format */    int			flags		/* symFlags as passed to loader */    )    {    static UINT16 	nextGroupNumber = 1;	/* 1 is VxWorks */    MODCREATE_HOOK *	createHookNode;    MODULE_ID		oldModule;		/* ID of previous same module */    MODULE_ID		lastModule;		/* ID of last module in list */    /* Split the name into it's name and path components */    pathSplit (name, moduleId->path, moduleId->name);    /* see if the module was loaded earlier */    semTake (moduleListSem, WAIT_FOREVER);    if ((oldModule = moduleFindByName (moduleId->name)) != NULL)	{	/* we found an old module, mark it as obsolete */	oldModule->flags |= MODULE_REPLACED;	}    /*     * Today, due to a poor/incomplete implementation of the module group     * concept, only 65534 modules can be loaded in a VxWorks session's life.     * The group number counter was simply incremented at each load operation.     * See SPR #7133 for more precisions on the troubles this brought.     *     * Reset the next group number counter to the highest value actually     * available. This is a first step to work around SPR #7133.     */    if ((lastModule = NODE_TO_ID (DLL_LAST (&moduleList))) != NULL)	{	nextGroupNumber = lastModule->group;	nextGroupNumber++;	}	    /* Set the module's group number */    if (nextGroupNumber < MODULE_GROUP_MAX)	{        moduleId->group = nextGroupNumber++;	/* Add the module to the end of the module list */	dllAdd (&moduleList, &moduleId->moduleNode);	}    else	{	/*	 * When all group slots are apparently used, we must walk through the	 * module list and try to find a free group number due to previous	 * unloadings. This is the second step to work around SPR #7133.	 */	if (moduleInsert (moduleId) != OK)	    {            printf ("No free group number. Abort load operation.\n");	    errnoSet (S_moduleLib_MAX_MODULES_LOADED);            return (ERROR);	    }	}    semGive (moduleListSem);        /* Set the module format and flags */    moduleId->flags = flags;    moduleId->format = format;    moduleId->ctors = NULL;    moduleId->dtors = NULL;    /* Initialize the segment list */    if (dllInit (&moduleId->segmentList) != OK)	return (ERROR);        /* Initialize the object stuff */    objCoreInit (&moduleId->objCore, moduleClassId);    /* Call any moduleCreateHook routines */    semTake (moduleCreateHookSem, WAIT_FOREVER);    for (createHookNode = (MODCREATE_HOOK *) DLL_FIRST (&moduleCreateHookList);	 createHookNode != NULL;	 createHookNode = (MODCREATE_HOOK *) DLL_NEXT ((DL_NODE *)						       createHookNode))	{	(* createHookNode->func) (moduleId);	}    semGive (moduleCreateHookSem);        /* If debugging is on, print out the name of the module. */    if (moduleLibDebug)        printf ("Module %s, group %d added\n", moduleId->name, moduleId->group);    return (OK);    }/******************************************************************************** moduleInsert - insert the module in list when possible** This routine walks the module list in order to find a hole in the group* numbering. As soon as a free group number is found, the new module is* inserted in the list and is given the available group number.  ** This routine should be called only when all the group numbers have been* allocated (i.e. when the group number counter reaches its maximum).** WARNING: the module list semaphore must be taken by the caller.** RETURNS: OK or ERROR if the module could not be inserted.*/LOCAL STATUS moduleInsert    (    MODULE_ID 	newModule		/* module to insert */    )    {    MODULE_ID 	currentModule;		/* module pointer */    MODULE_ID 	nextModule;		/* module pointer */    /* Go through the module list and try to insert the new module */    for (currentModule = NODE_TO_ID (DLL_FIRST (&moduleList));	 currentModule != NULL;	 currentModule = NODE_TO_ID (DLL_NEXT (&currentModule->moduleNode)))	{	nextModule = NODE_TO_ID (DLL_NEXT (&currentModule->moduleNode));	/* Check if we reached the end of the list: this means no room left */	if (nextModule == NULL)	    break;	/* Insert the new module when there is a whole in the group numbers */	if (nextModule->group > (currentModule->group + 1))	    {	    dllInsert (&moduleList, &currentModule->moduleNode,		       &newModule->moduleNode);	    newModule->group = currentModule->group + 1;	    break;	    }	}    if (nextModule == NULL)	return (ERROR);    else	return (OK);    }/******************************************************************************** moduleTerminate - terminate a module* * This routine terminates a static object module descriptor that was* initialized with moduleInit().* * RETURNS: OK or ERROR.* * NOMANUAL*/STATUS moduleTerminate    (    MODULE_ID moduleId		/* module to terminate */    )    {    return (moduleDestroy (moduleId, FALSE));    }/******************************************************************************** moduleDelete - delete module ID information (use unld() to reclaim space)* * This routine deletes a module descriptor, freeing any space that was* allocated for the use of the module ID.** This routine does not free space allocated for the object module itself --* this is done by unld().* * RETURNS: OK or ERROR.*/STATUS moduleDelete    (    MODULE_ID moduleId		/* module to delete */    )    {    return (moduleDestroy (moduleId, TRUE));    }/******************************************************************************** moduleDestroy - destroy module** This is the underlying routine for moduleDelete() and moduleTerminate().* * RETURNS: OK or ERROR.* * NOMANUAL*/LOCAL STATUS moduleDestroy    (    MODULE_ID 	moduleId,	/* module to destroy */    BOOL      	dealloc		/* deallocate memory associated with module */    )    {    SEGMENT_ID	pSegment;	/* temp. storage for deleting segments */    /* Make sure moduleId is a real object of class moduleClassId */    if (OBJ_VERIFY (moduleId, moduleClassId) != OK)  /* validate module id */	{	return (ERROR);	}    objCoreTerminate (&moduleId->objCore);	/* INVALIDATE */    /* Remove the module from the module list */    semTake (moduleListSem, WAIT_FOREVER);    dllRemove (&moduleList, &moduleId->moduleNode);    semGive (moduleListSem);    /* Remove any segment records associated with the module. */    while ((pSegment = moduleSegGet (moduleId)) != NULL)        free (pSegment);    /* Deallocate the module id object itself */    if (dealloc)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品福利在线一区二区三区| 久久久亚洲精品石原莉奈| 日韩一区二区影院| 中文字幕一区二区三区不卡在线| 午夜精品福利在线| 成人小视频在线| 日韩视频中午一区| 亚洲福利视频导航| 成人黄色在线看| 精品免费视频.| 日韩成人一区二区| 色综合久久88色综合天天免费| 精品国产乱码久久久久久久| 亚洲国产精品一区二区www在线| 高潮精品一区videoshd| 精品奇米国产一区二区三区| 亚洲成年人网站在线观看| 色婷婷av一区二区三区软件 | 欧美视频在线一区二区三区 | 欧美主播一区二区三区美女| 亚洲国产激情av| 国产自产v一区二区三区c| 91精品久久久久久久久99蜜臂| 亚洲一卡二卡三卡四卡| 91久久精品网| 亚洲免费观看在线观看| av福利精品导航| 国产精品视频麻豆| 国产91精品一区二区麻豆亚洲| 精品国产一区二区三区不卡| 免费在线观看成人| 精品卡一卡二卡三卡四在线| 美腿丝袜亚洲综合| 制服丝袜日韩国产| 人人精品人人爱| 欧美一区二区三区性视频| 免费成人美女在线观看| 精品国产青草久久久久福利| 精品一区二区三区免费毛片爱| 日韩一级精品视频在线观看| 九色综合国产一区二区三区| 精品成人a区在线观看| 国产风韵犹存在线视精品| 中文字幕欧美国产| 99久久精品国产一区二区三区| 亚洲日本va午夜在线电影| 在线免费一区三区| 美国一区二区三区在线播放| 久久久久亚洲蜜桃| 不卡大黄网站免费看| 亚洲精品一二三四区| 欧美日韩一区三区四区| 青草国产精品久久久久久| 久久影院电视剧免费观看| 成人爽a毛片一区二区免费| 亚洲免费av网站| 欧美一区二区三区免费| 国产在线日韩欧美| 国产精品久久看| 欧美日韩精品一区二区三区四区| 韩国精品主播一区二区在线观看 | 综合久久久久综合| 精品视频在线视频| 国内久久婷婷综合| 亚洲丝袜制服诱惑| 日韩欧美一级在线播放| 99精品黄色片免费大全| 日日欢夜夜爽一区| 国产精品激情偷乱一区二区∴| 欧美视频你懂的| 国产精品1024久久| 亚洲成a人片综合在线| 国产天堂亚洲国产碰碰| 在线观看免费一区| 国产乱码精品一区二区三区av| 亚洲激情五月婷婷| 2021国产精品久久精品| 在线观看中文字幕不卡| 国产老肥熟一区二区三区| 亚洲1区2区3区视频| 久久久精品tv| 3d成人动漫网站| 91老师国产黑色丝袜在线| 激情欧美一区二区| 亚洲成人手机在线| 中文字幕在线不卡一区| 欧美成人精精品一区二区频| 色欧美日韩亚洲| 国产福利91精品一区| 日本系列欧美系列| 亚洲一区二区在线免费看| 国产日韩欧美精品一区| 欧美一区二区日韩一区二区| 色999日韩国产欧美一区二区| 国产原创一区二区三区| 日本在线播放一区二区三区| 一区二区三区日韩欧美| 中文字幕一区二区在线播放| 久久精品网站免费观看| 日韩亚洲电影在线| 欧美日本韩国一区二区三区视频| 色欲综合视频天天天| www.亚洲人| 懂色av一区二区三区免费看| 黄色精品一二区| 久久精品国产精品亚洲精品| 石原莉奈在线亚洲三区| 午夜精品久久久久久久99樱桃| 亚洲午夜免费福利视频| 亚洲综合网站在线观看| 一区二区三区四区视频精品免费| 亚洲欧美影音先锋| 久久精品国产免费看久久精品| 免费成人小视频| 蜜桃精品视频在线| 激情综合网最新| 国产一区二区在线观看视频| 国产一区二区影院| 国产乱人伦偷精品视频免下载| 国产在线不卡视频| 国产麻豆成人精品| 成人a免费在线看| 97精品久久久久中文字幕 | 91精品国产色综合久久不卡电影| 欧美三级在线播放| 欧美一区二区播放| 精品日韩一区二区三区| 久久影院午夜片一区| 中文字幕不卡在线播放| 一区二区三区四区中文字幕| 亚洲国产视频直播| 美女视频网站久久| 国产精品99久久久久久有的能看| 国产精品资源站在线| 暴力调教一区二区三区| 欧美主播一区二区三区| 日韩视频在线你懂得| 国产日韩欧美电影| 亚洲精品综合在线| 日本vs亚洲vs韩国一区三区| 国产一区二区看久久| 99精品欧美一区二区三区小说| 欧美系列在线观看| 2020国产精品久久精品美国| 亚洲四区在线观看| 久久精品国产99国产| 成人精品视频一区二区三区尤物| 91电影在线观看| 精品福利二区三区| 亚洲精品美国一| 精东粉嫩av免费一区二区三区| 成人av电影免费观看| 在线播放中文一区| 国产亚洲综合色| 亚洲3atv精品一区二区三区| 国产成人在线影院| 欧美一区二区精品| 亚洲美女淫视频| 狠狠久久亚洲欧美| 在线观看欧美黄色| 中国色在线观看另类| 麻豆精品在线播放| 91国偷自产一区二区三区观看| 精品国内片67194| 亚洲动漫第一页| 成人av电影在线网| 精品国产一区二区三区不卡| 亚洲午夜久久久久久久久电影院 | 国产精品视频线看| 久久精品国产在热久久| 欧美午夜精品免费| 国产精品欧美极品| 国产真实乱偷精品视频免| 欧美日韩国产综合一区二区三区| 国产精品久久久久精k8| 久久99精品久久久| 91麻豆精品国产91久久久| 亚洲精品伦理在线| 成人激情文学综合网| 精品国产123| 毛片av一区二区| 欧美片在线播放| 亚洲一区二区免费视频| 日本韩国欧美一区二区三区| 中文字幕精品在线不卡| 国产精品一卡二卡| 日韩精品中文字幕在线不卡尤物 | 丁香婷婷综合五月| 欧美精品一区二区三区蜜桃| 午夜天堂影视香蕉久久| 91极品美女在线| 亚洲精品伦理在线| 日本道色综合久久| 亚洲一区中文日韩| 色婷婷狠狠综合| 亚洲国产成人91porn| 欧美天天综合网| 日韩电影在线观看一区| 欧美高清激情brazzers| 日韩精品一级中文字幕精品视频免费观看 |