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

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

?? modulelib.c

?? 操作系統開發,vxwork操作系統源代碼
?? 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一区二区三区免费野_久草精品视频
高清beeg欧美| 午夜精品免费在线观看| 亚洲愉拍自拍另类高清精品| 欧美亚洲一区三区| 中文字幕免费观看一区| 国产一区免费电影| 精品国产一二三区| 国产一区不卡精品| 国产亚洲欧美日韩在线一区| 伦理电影国产精品| 欧美激情在线免费观看| 国产精品亚洲第一| 国产精品看片你懂得| av电影在线观看完整版一区二区| 国产精品日日摸夜夜摸av| 91小视频在线| 亚洲电影一级片| 欧美日本视频在线| 久久精品国产免费| 久久亚洲一级片| 国产高清在线精品| 亚洲欧洲日韩一区二区三区| 99国产精品久| 午夜精品福利一区二区三区av | 亚洲精品你懂的| 97久久人人超碰| 中文字幕欧美国产| 欧美亚洲动漫精品| 九一九一国产精品| 中文字幕一区二区三区四区| 欧美日韩国产一级二级| 国产精品996| 石原莉奈在线亚洲二区| 久久九九国产精品| 欧美日韩一区二区三区在线 | 亚洲手机成人高清视频| 欧美精选午夜久久久乱码6080| 国产一区二区视频在线播放| 亚洲一区在线观看视频| 亚洲国产电影在线观看| 日韩久久精品一区| 欧美午夜片在线看| 成人免费av网站| 久久99精品国产.久久久久| 一区二区在线观看视频在线观看| 国产精品久久久久一区| 日韩精品中文字幕一区二区三区| 97精品电影院| 成人精品免费看| 美女精品自拍一二三四| 亚洲图片一区二区| 国产精品三级视频| 久久一区二区三区国产精品| 制服.丝袜.亚洲.另类.中文| 色偷偷久久人人79超碰人人澡 | 中文字幕一区在线| 亚洲精品一区二区三区福利| 欧美日韩一区二区三区在线看| 成人a免费在线看| 国产精品自拍一区| 韩国精品免费视频| 三级久久三级久久久| 一区二区三区四区在线播放| 国产精品欧美久久久久一区二区| 精品欧美一区二区久久| 欧美精品在线一区二区| 欧美高清视频一二三区 | 99在线精品视频| 国产91综合一区在线观看| 蓝色福利精品导航| 日韩二区三区四区| 蜜桃视频第一区免费观看| 日韩va亚洲va欧美va久久| 婷婷久久综合九色国产成人 | 久久国产精品99久久人人澡| 午夜精品影院在线观看| 午夜视黄欧洲亚洲| 亚洲一二三四久久| 亚洲高清视频的网址| 亚洲国产cao| 婷婷国产v国产偷v亚洲高清| 日韩精品一二三| 蜜乳av一区二区| 久久精品国产精品亚洲精品| 韩国视频一区二区| 国产一本一道久久香蕉| 国产sm精品调教视频网站| 成人av在线影院| 欧美少妇xxx| 日韩午夜三级在线| 久久综合久色欧美综合狠狠| 久久综合久久鬼色中文字| 国产日本欧美一区二区| 亚洲欧洲av色图| 亚洲成人午夜影院| 免费高清不卡av| 国产精品主播直播| 91美女在线观看| 欧美日韩国产一区| 久久久久久夜精品精品免费| 国产精品视频在线看| 一区二区三区在线高清| 日本在线不卡视频一二三区| 国产精品一区二区三区网站| 一本色道亚洲精品aⅴ| 在线成人午夜影院| 久久综合九色综合欧美就去吻 | www国产精品av| 亚洲视频香蕉人妖| 日韩国产一区二| 国产91精品久久久久久久网曝门| 99视频一区二区三区| 制服.丝袜.亚洲.中文.综合| 久久久精品国产免大香伊| 亚洲欧美另类久久久精品2019| 日韩二区在线观看| 成人性生交大片免费看视频在线| 欧美亚洲综合在线| 精品国产乱码久久久久久1区2区 | 国产一区二区视频在线| 一本色道综合亚洲| 欧美精品一区二区三区在线| 亚洲美女屁股眼交| 精品中文字幕一区二区小辣椒| 91免费国产在线| 亚洲精品在线免费播放| 有坂深雪av一区二区精品| 精久久久久久久久久久| 欧美影片第一页| 国产日韩欧美一区二区三区综合| 亚洲成人在线观看视频| 99re在线精品| 久久久久久久综合色一本| 午夜伦欧美伦电影理论片| 不卡的av中国片| 日韩一区二区免费视频| 亚洲综合自拍偷拍| 国产suv精品一区二区883| 日韩三级电影网址| 亚洲午夜免费电影| 波多野结衣中文字幕一区| 欧美三区免费完整视频在线观看| 午夜久久久久久久久久一区二区| 狠狠色综合播放一区二区| 欧美日韩一区二区三区免费看| 欧美经典一区二区| 成人白浆超碰人人人人| 欧美人体做爰大胆视频| 国产一区日韩二区欧美三区| 国产成人在线色| 在线观看一区不卡| www久久精品| 国产午夜精品一区二区三区嫩草| 99久久综合色| 亚洲天堂网中文字| 欧美午夜影院一区| 久久精品国产亚洲aⅴ| 亚洲国产一区二区在线播放| 日本91福利区| 日本视频免费一区| 日韩欧美国产综合| 91亚洲精品一区二区乱码| 蜜桃视频在线观看一区| 亚洲国产欧美在线| 欧美va亚洲va国产综合| 国产suv精品一区二区883| 中文字幕精品三区| 欧美视频一区在线| 亚洲永久精品大片| 欧美一区二区三区日韩| 色婷婷综合激情| hitomi一区二区三区精品| 亚洲一二三专区| 亚洲国产成人私人影院tom| 精品国产91亚洲一区二区三区婷婷| 精品久久久久久久久久久院品网 | 国产一区二区主播在线| 亚洲综合激情网| 国产精品国产三级国产专播品爱网| 26uuu欧美| 中文字幕在线一区免费| 欧美v日韩v国产v| 欧美日韩一二三| 欧美剧情电影在线观看完整版免费励志电影 | 久久综合色鬼综合色| 欧洲激情一区二区| 色婷婷综合五月| 在线精品国精品国产尤物884a| 国产另类ts人妖一区二区| 丝袜a∨在线一区二区三区不卡| 中文字幕综合网| 中文字幕一区二区三区蜜月| 久久精品视频在线免费观看| 日韩欧美国产一区二区在线播放| 91亚洲精品久久久蜜桃| 91麻豆免费视频| 欧美日韩激情一区| 欧美视频精品在线| 欧美一级理论片| 欧美xxx久久|