⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourcelock.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 4 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345 

	TTL	F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\resourcelock.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "


  00000			 AREA	 |.bss|, NOINIT
|service_initialized| % 0x4
	EXPORT	|RM_Dump_LockDB|
	EXPORT	|??_C@_0EO@COENNFII@RM_Dump_LockDB?3?5Lock?$FL?$CF03d?$FN?3?5rid?$DN@| [ DATA ] ; `string'
	EXPORT	|??_C@_0DG@LCGEAOEE@RM_Dump_LockDB?3?5Total?5entries?$DN?$CFd@| [ DATA ] ; `string'
	IMPORT	|xllp_LogMessage|

  00004			 AREA	 |.bss|, NOINIT
|LockDB| %	0x45c
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\resourcelock.c

  00000			 AREA	 |.text| { |RM_Dump_LockDB| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$RM_Dump_LockDB|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_Dump_LockDB| } ; comdat associative
|$T1474| DCD	|$L1473|
	DCD	0x40002202

  00000			 AREA	 |.rdata| { |??_C@_0DG@LCGEAOEE@RM_Dump_LockDB?3?5Total?5entries?$DN?$CFd@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DG@LCGEAOEE@RM_Dump_LockDB?3?5Total?5entries?$DN?$CFd@| DCB "RM_D"
	DCB	"ump_LockDB: Total entries=%d (%d uninitialized)", 0xd, 0xa
	DCB	0x0					; `string'

  00000			 AREA	 |.rdata| { |??_C@_0EO@COENNFII@RM_Dump_LockDB?3?5Lock?$FL?$CF03d?$FN?3?5rid?$DN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EO@COENNFII@RM_Dump_LockDB?3?5Lock?$FL?$CF03d?$FN?3?5rid?$DN@| DCB "R"
	DCB	"M_Dump_LockDB: Lock[%03d]: rid=%03u, lock=x%08x, owner=x"
	DCB	"%08x, own_count=%u", 0xd, 0xa, 0x0	; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |RM_Dump_LockDB| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |RM_Dump_LockDB| PROC

; 58   :     {

  00000		 |$L1473|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004	e24dd008	 sub         sp, sp, #8
  00008		 |$M1471|

; 59   :         int i;
; 60   :         int uninit_count = 0;

  00008	e59f5074	 ldr         r5, [pc, #0x74]
  0000c	e3a06000	 mov         r6, #0

; 61   :     for (i = 0; i < DIMENSION(LockDB); i++)

  00010	e3a04000	 mov         r4, #0
  00014		 |$L1264|

; 62   :         {
; 63   :         if ((LockDB[i].lock != 0) || (LockDB[i].owner != 0))

  00014	e5953000	 ldr         r3, [r5]
  00018	e3530000	 cmp         r3, #0
  0001c	05953004	 ldreq       r3, [r5, #4]
  00020	03530000	 cmpeq       r3, #0

; 64   :             LOGMSG(("RM_Dump_LockDB: Lock[%03d]: rid=%03u, lock=x%08x, owner=x%08x, own_count=%u\r\n",
; 65   :                        i, Index2RID(i), LockDB[i].lock, LockDB[i].owner, LockDB[i].owner_count));
; 66   :         else
; 67   :             uninit_count++;

  00024	02866001	 addeq       r6, r6, #1
  00028	0a000008	 beq         |$L1265|
  0002c	e595e008	 ldr         lr, [r5, #8]
  00030	e5950004	 ldr         r0, [r5, #4]
  00034	e5953000	 ldr         r3, [r5]
  00038	e2842001	 add         r2, r4, #1
  0003c	e58d0000	 str         r0, [sp]
  00040	e59f0038	 ldr         r0, [pc, #0x38]
  00044	e1a01004	 mov         r1, r4
  00048	e58de004	 str         lr, [sp, #4]
  0004c	eb000000	 bl          xllp_LogMessage
  00050		 |$L1265|
  00050	e2844001	 add         r4, r4, #1
  00054	e354005d	 cmp         r4, #0x5D
  00058	e285500c	 add         r5, r5, #0xC
  0005c	3affffec	 bcc         |$L1264|

; 68   :         }
; 69   :     LOGMSG(("RM_Dump_LockDB: Total entries=%d (%d uninitialized)\r\n", i, uninit_count));

  00060	e59f0014	 ldr         r0, [pc, #0x14]
  00064	e1a02006	 mov         r2, r6
  00068	e1a01004	 mov         r1, r4
  0006c	eb000000	 bl          xllp_LogMessage

; 70   :     } // RM_Dump_LockDB

  00070	e28dd008	 add         sp, sp, #8
  00074	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00078	e12fff1e	 bx          lr
  0007c		 |$L1476|
  0007c	00000000	 DCD         |??_C@_0DG@LCGEAOEE@RM_Dump_LockDB?3?5Total?5entries?$DN?$CFd@|
  00080	00000000	 DCD         |??_C@_0EO@COENNFII@RM_Dump_LockDB?3?5Lock?$FL?$CF03d?$FN?3?5rid?$DN@|
  00084	00000000	 DCD         |LockDB|
  00088		 |$M1472|

			 ENDP  ; |RM_Dump_LockDB|

	EXPORT	|RM_InitService|

  00000			 AREA	 |.text| { |RM_InitService| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$RM_InitService|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_InitService| } ; comdat associative
|$T1484| DCD	|$L1483|
	DCD	0x40000600
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |RM_InitService| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |RM_InitService| PROC

; 73   :     {

  00000		 |$L1483|
  00000		 |$M1481|

; 74   :     if (service_initialized)
; 75   :         {
; 76   :         // No module global init needed - each lock is initialized the first time it is locked
; 77   :         }
; 78   : #if ENABLE_DEBUG_MESSAGES    
; 79   :     RM_Dump_LockDB();
; 80   : #endif
; 81   :     service_initialized = 1;

  00000	e59f300c	 ldr         r3, [pc, #0xC]
  00004	e3a02001	 mov         r2, #1

; 82   :     return(RM_STATUS_SUCCESS);

  00008	e3a00000	 mov         r0, #0
  0000c	e5832000	 str         r2, [r3]

; 83   :     } // RM_InitService

  00010	e12fff1e	 bx          lr
  00014		 |$L1486|
  00014	00000000	 DCD         |service_initialized|
  00018		 |$M1482|

			 ENDP  ; |RM_InitService|

	EXPORT	|RM_DeInitService|
	EXPORT	|??_C@_0DB@NKHAILA@RM_DeInitService?3?5DeInit?5while?5n@| [ DATA ] ; `string'
	EXPORT	|??_C@_0EE@JGMKFMGG@RM_DeInitService?3?5Unable?5to?5acqu@| [ DATA ] ; `string'
	IMPORT	|OSDS_DestroyLock|
	IMPORT	|OSDS_AcquireLock|

  00000			 AREA	 |.text| { |RM_DeInitService| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$RM_DeInitService|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_DeInitService| } ; comdat associative
|$T1499| DCD	|$L1498|
	DCD	0x40002a01

  00000			 AREA	 |.rdata| { |??_C@_0EE@JGMKFMGG@RM_DeInitService?3?5Unable?5to?5acqu@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EE@JGMKFMGG@RM_DeInitService?3?5Unable?5to?5acqu@| DCB "RM_DeInit"
	DCB	"Service: Unable to acquire lock %u (x%08x) (error=x%08x)"
	DCB	0xd, 0xa, 0x0				; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DB@NKHAILA@RM_DeInitService?3?5DeInit?5while?5n@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@NKHAILA@RM_DeInitService?3?5DeInit?5while?5n@| DCB "RM_DeInitS"
	DCB	"ervice: DeInit while not initialized", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |RM_DeInitService| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |RM_DeInitService| PROC

; 86   :     {

  00000		 |$L1498|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004		 |$M1496|

; 87   :         LOCK_STRUCT_T *plock;
; 88   :         int i;
; 89   :         OSDS_STATUS_T ret;
; 90   : 
; 91   :     if (!service_initialized)

  00004	e59f5098	 ldr         r5, [pc, #0x98]
  00008	e595345c	 ldr         r3, [r5, #0x45C]
  0000c	e3530000	 cmp         r3, #0

; 92   :         {
; 93   :         LOGMSG(("RM_DeInitService: DeInit while not initialized\r\n"));

  00010	059f0088	 ldreq       r0, [pc, #0x88]
  00014	0b000000	 bleq        xllp_LogMessage

; 94   :         }
; 95   :     else
; 96   :         DBGMSG(("RM_DeInitService:\r\n"));
; 97   :         // Close any locks that have been initialized and aren't currently locked (at least in this process context)
; 98   :     for (i = 0; i < DIMENSION(LockDB); i++)

  00018	e3a06000	 mov         r6, #0
  0001c	e1a04005	 mov         r4, r5
  00020	e3a07000	 mov         r7, #0
  00024		 |$L1286|

; 99   :         {
; 100  :         plock = &(LockDB[i]);
; 101  :         if (plock->lock == (RM_LOCK_HANDLE_T)0)

  00024	e5943000	 ldr         r3, [r4]
  00028	e3530000	 cmp         r3, #0
  0002c	0a000011	 beq         |$L1287|

; 102  :             continue;
; 103  :             // Note that it's possible other threads in the same process own one or more locks.
; 104  :             // Service deinit being called in this situation is probably a programming error, but just log it and continue.
; 105  :         ret = OSDS_AcquireLock(plock->lock, 0);

  00030	e5940000	 ldr         r0, [r4]
  00034	e3a01000	 mov         r1, #0
  00038	eb000000	 bl          OSDS_AcquireLock
  0003c	e3500000	 cmp         r0, #0

; 106  :         if (ret == OSDS_STATUS_SUCCESS)

  00040	1a000007	 bne         |$L1291|

; 107  :             {
; 108  :                 OSDS_LOCK_HANDLE_T hLock = plock->lock;

  00044	e5940000	 ldr         r0, [r4]

; 109  :             plock->lock = (RM_LOCK_HANDLE_T)0;
; 110  :             plock->owner = plock->owner_count = 0;

  00048	e1a03004	 mov         r3, r4
  0004c	e5847000	 str         r7, [r4]
  00050	e5a37008	 str         r7, [r3, #8]!
  00054	e2433004	 sub         r3, r3, #4
  00058	e5837000	 str         r7, [r3]

; 111  :             OSDS_DestroyLock(hLock);

  0005c	eb000000	 bl          OSDS_DestroyLock

; 112  :             DBGMSG(("RM_DeInitService: Lock %u (x%08x) released and destroyed\r\n", 
; 113  :                     Index2RID(i), hLock));
; 114  :             }
; 115  :         else

  00060	ea000004	 b           |$L1287|
  00064		 |$L1291|

; 116  :             LOGMSG(("RM_DeInitService: Unable to acquire lock %u (x%08x) (error=x%08x)\r\n", 
; 117  :                     Index2RID(i), plock->lock, ret));

  00064	e5942000	 ldr         r2, [r4]
  00068	e1a03000	 mov         r3, r0
  0006c	e59f0028	 ldr         r0, [pc, #0x28]
  00070	e2861001	 add         r1, r6, #1
  00074	eb000000	 bl          xllp_LogMessage
  00078		 |$L1287|
  00078	e2866001	 add         r6, r6, #1
  0007c	e356005d	 cmp         r6, #0x5D
  00080	e284400c	 add         r4, r4, #0xC
  00084	3affffe6	 bcc         |$L1286|

; 118  :         }
; 119  :     service_initialized = 0;

  00088	e3a03000	 mov         r3, #0
  0008c	e585345c	 str         r3, [r5, #0x45C]

; 120  :     return(RM_STATUS_SUCCESS);

  00090	e3a00000	 mov         r0, #0

; 121  :     } // RM_DeInitService

  00094	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  00098	e12fff1e	 bx          lr
  0009c		 |$L1501|
  0009c	00000000	 DCD         |??_C@_0EE@JGMKFMGG@RM_DeInitService?3?5Unable?5to?5acqu@|
  000a0	00000000	 DCD         |??_C@_0DB@NKHAILA@RM_DeInitService?3?5DeInit?5while?5n@|
  000a4	00000000	 DCD         |LockDB|
  000a8		 |$M1497|

			 ENDP  ; |RM_DeInitService|

	EXPORT	|??_C@_0EE@PJIOGGHH@RM_InitLock?$EAx?$CF08x?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5@| [ DATA ] ; `string'
	EXPORT	|??_C@_0BB@PPIDDGPM@RM_RESOURCE_?$CF03u?$AA@| [ DATA ] ; `string'
	EXPORT	|??_C@_0CK@GIPCOGHJ@RM_InitLock?3?5OSDS_CreateLock?$CI?$CFs?$CJ@| [ DATA ] ; `string'
	EXPORT	|??_C@_0CP@HOAONHLI@RM_InitLock?3?5?$CFs?1x?$CF08x?5OSDS_Acqui@| [ DATA ] ; `string'
	EXPORT	|??_C@_0DP@LLGLAGE@RM_InitLock?3?5?$CFd?1?$CFs?1x?$CF08x?5Collisi@| [ DATA ] ; `string'
	EXPORT	|??_C@_0DB@MHBAOEPO@RM_InitLock?3?5?$CFd?1?$CFs?5Already?5initi@| [ DATA ] ; `string'
	IMPORT	|xllp_snprintf|
	IMPORT	|OSDS_GetCurrentThreadID|
	IMPORT	|OSDS_CreateLock|
	IMPORT	|__security_cookie|
	IMPORT	|__security_check_cookie|

  00000			 AREA	 |.text| { |RM_InitLock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$RM_InitLock|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_InitLock| } ; comdat associative

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -