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

📄 resourcelock.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 4 页
字号:
	EXPORT	|??_C@_0DO@DJIPKCNH@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5not?5ow@| [ DATA ] ; `string'
	EXPORT	|??_C@_0EC@OCEIKBHJ@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5OSDS_R@| [ DATA ] ; `string'
	EXPORT	|??_C@_0EM@ILMIMIFK@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?5returni@| [ DATA ] ; `string'
	IMPORT	|OSDS_ReleaseLock|

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

  00000			 AREA	 |.pdata$$RM_ReleaseLock|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_ReleaseLock| } ; comdat associative
|$T1563| DCD	|$L1562|
	DCD	0x40005f02

  00000			 AREA	 |.rdata| { |??_C@_0CP@NGBKNBFM@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Resour@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CP@NGBKNBFM@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Resour@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x): ResourceID invalid", 0xd, 0xa, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_0EM@ILMIMIFK@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?5returni@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EM@ILMIMIFK@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?5returni@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x) returning x%08x (FAIL) owner=x%0"
	DCB	"8x, count=%u->%u", 0xd, 0xa, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_0EC@OCEIKBHJ@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5OSDS_R@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EC@OCEIKBHJ@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5OSDS_R@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x): OSDS_ReleaseLock(x%08x) failed("
	DCB	"x%08x)", 0xd, 0xa, 0x0			; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DO@DJIPKCNH@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5not?5ow@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DO@DJIPKCNH@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5not?5ow@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x): not owner (owner=x%08x, count=%"
	DCB	"u)", 0xd, 0xa, 0x0			; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DA@JBMNCEMD@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5lock?5h@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DA@JBMNCEMD@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5lock?5h@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x): lock handle is NULL", 0xd, 0xa, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DH@COMHCCMO@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Unable@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DH@COMHCCMO@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Unable@| DCB "R"
	DCB	"M_ReleaseLock(%u,x%08x): Unable to default threadid", 0xd
	DCB	0xa, 0x0				; `string'
; Function compile flags: /Ogsy

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

  00000		 |RM_ReleaseLock| PROC

; 316  :     {

  00000		 |$L1562|
  00000	e92d41f0	 stmdb       sp!, {r4 - r8, lr}
  00004	e24dd010	 sub         sp, sp, #0x10
  00008		 |$M1560|
  00008	e1a06001	 mov         r6, r1
  0000c	e1a07000	 mov         r7, r0

; 317  :         int LockIndex;
; 318  :         LOCK_STRUCT_T *plock;
; 319  :         unsigned int owncount;
; 320  :         RM_STATUS_T ret = RM_STATUS_SUCCESS;
; 321  :     
; 322  :     DBGMSG(("RM_ReleaseLock(%u,x%08x)\r\n\r", ResourceID, threadid));
; 323  :     LockIndex = RID2Index(ResourceID);

  00010	e2573001	 subs        r3, r7, #1

; 324  :     if ((LockIndex < 0) || (LockIndex >= DIMENSION(LockDB)))

  00014	4a000048	 bmi         |$L1399|
  00018	e353005d	 cmp         r3, #0x5D
  0001c	2a000046	 bcs         |$L1399|

; 328  :         }
; 329  :     plock = &(LockDB[LockIndex]);

  00020	e59f2150	 ldr         r2, [pc, #0x150]
  00024	e0833083	 add         r3, r3, r3, lsl #1

; 330  :     if (!service_initialized)
; 331  :         {
; 332  :         }
; 333  :     if (threadid == 0)

  00028	e3560000	 cmp         r6, #0
  0002c	e0824103	 add         r4, r2, r3, lsl #2
  00030	1a00000a	 bne         |$L1408|

; 334  :         {
; 335  :             RM_THREADID_T tid;
; 336  :         tid = OSDS_GetCurrentThreadID();

  00034	eb000000	 bl          OSDS_GetCurrentThreadID
  00038	e3500000	 cmp         r0, #0

; 337  :         if (tid == 0)

  0003c	1a000006	 bne         |$L1405|

; 338  :             {
; 339  :             LOGMSG(("RM_ReleaseLock(%u,x%08x): Unable to default threadid\r\n", ResourceID, threadid));

  00040	e59f012c	 ldr         r0, [pc, #0x12C]
  00044	e3a02000	 mov         r2, #0
  00048	e1a01007	 mov         r1, r7
  0004c	eb000000	 bl          xllp_LogMessage

; 340  :             ret = RM_STATUS_ERROR;
; 341  :             goto ReleaseLock_end;

  00050	e59d800c	 ldr         r8, [sp, #0xC]

; 376  :                 ret = RM_STATUS_ERROR;

  00054	e3a05004	 mov         r5, #4

; 377  :                 goto ReleaseLock_end;

  00058	ea000018	 b           |$L1548|
  0005c		 |$L1405|

; 342  :             }
; 343  :         else
; 344  :             {
; 345  :             DBGMSG(("RM_ReleaseLock(%u,x%08x): threadid->x%08x\r\n", ResourceID, threadid, tid));
; 346  :             threadid = tid;

  0005c	e1a06000	 mov         r6, r0
  00060		 |$L1408|

; 347  :             }
; 348  :         }
; 349  :     owncount = plock->owner_count;

  00060	e5948008	 ldr         r8, [r4, #8]

; 350  :     if (plock->lock == (RM_LOCK_HANDLE_T)0)

  00064	e5943000	 ldr         r3, [r4]
  00068	e3530000	 cmp         r3, #0
  0006c	1a000008	 bne         |$L1410|

; 351  :         {
; 352  :         LOGMSG(("RM_ReleaseLock(%u,x%08x): lock handle is NULL\r\n", ResourceID, threadid));

  00070	e59f00f8	 ldr         r0, [pc, #0xF8]
  00074	e1a02006	 mov         r2, r6
  00078	e1a01007	 mov         r1, r7
  0007c	eb000000	 bl          xllp_LogMessage

; 353  :         plock->owner = plock->owner_count = 0;

  00080	e3a03000	 mov         r3, #0
  00084	e5843008	 str         r3, [r4, #8]
  00088	e5843004	 str         r3, [r4, #4]
  0008c		 |$L1416|

; 378  :                 }
; 379  :             DBGMSG(("RM_ReleaseLock(%u,x%08x): OSDS_ReleaseLock(x%08x) success\r\n", 
; 380  :                      ResourceID, threadid, plock->lock));
; 381  :             }
; 382  :         ret = RM_STATUS_SUCCESS;

  0008c	e3a05000	 mov         r5, #0
  00090		 |$ReleaseLock_end$1407|

; 383  :         }
; 384  : //--------------
; 385  : ReleaseLock_end:
; 386  : //--------------
; 387  :     if (ret != RM_STATUS_SUCCESS)

  00090	ea00002e	 b           |$L1391|
  00094		 |$L1410|

; 354  :         ret = RM_STATUS_SUCCESS;
; 355  :         goto ReleaseLock_end;
; 356  :         }
; 357  :     
; 358  :     if (plock->owner != threadid)

  00094	e5943004	 ldr         r3, [r4, #4]
  00098	e1530006	 cmp         r3, r6
  0009c	0a000012	 beq         |$L1412|

; 359  :         {
; 360  :         LOGMSG(("RM_ReleaseLock(%u,x%08x): not owner (owner=x%08x, count=%u)\r\n", 
; 361  :                  ResourceID, threadid, plock->owner, plock->owner_count));

  000a0	e5942008	 ldr         r2, [r4, #8]
  000a4	e5943004	 ldr         r3, [r4, #4]
  000a8	e59f00bc	 ldr         r0, [pc, #0xBC]
  000ac	e58d2000	 str         r2, [sp]
  000b0	e1a02006	 mov         r2, r6
  000b4	e1a01007	 mov         r1, r7
  000b8	eb000000	 bl          xllp_LogMessage

; 362  :         ret = RM_STATUS_NOT_OWNER;

  000bc	e3a05002	 mov         r5, #2
  000c0		 |$L1548|

; 388  :         LOGMSG(("RM_ReleaseLock(%u,x%08x) returning x%08x (FAIL) owner=x%08x, count=%u->%u\r\n", 
; 389  :                  ResourceID, threadid, ret, plock->owner, owncount, plock->owner_count));

  000c0	e594e008	 ldr         lr, [r4, #8]
  000c4	e5942004	 ldr         r2, [r4, #4]
  000c8	e59f0098	 ldr         r0, [pc, #0x98]
  000cc	e1a03005	 mov         r3, r5
  000d0	e58d2000	 str         r2, [sp]
  000d4	e1a02006	 mov         r2, r6
  000d8	e1a01007	 mov         r1, r7
  000dc	e58de008	 str         lr, [sp, #8]
  000e0	e58d8004	 str         r8, [sp, #4]
  000e4	eb000000	 bl          xllp_LogMessage

; 390  :     else
; 391  :         DBGMSG(("RM_ReleaseLock(%u,x%08x) returning x%08x (success) owner=x%08x, count=%u->%u\r\n", 
; 392  :                  ResourceID, threadid, ret, plock->owner, owncount, plock->owner_count));
; 393  :     return(ret);

  000e8	ea000018	 b           |$L1391|
  000ec		 |$L1412|

; 363  :         goto ReleaseLock_end;
; 364  :         }
; 365  :     else
; 366  :         {
; 367  :         plock->owner_count--;

  000ec	e5943008	 ldr         r3, [r4, #8]
  000f0	e2433001	 sub         r3, r3, #1
  000f4	e5843008	 str         r3, [r4, #8]

; 368  :         if (plock->owner_count == 0)

  000f8	e5943008	 ldr         r3, [r4, #8]
  000fc	e3530000	 cmp         r3, #0
  00100	1affffe1	 bne         |$L1416|

; 369  :             {
; 370  :             plock->owner = 0;

  00104	e3a03000	 mov         r3, #0
  00108	e5843004	 str         r3, [r4, #4]

; 371  :             ret = OSDS_ReleaseLock(plock->lock);

  0010c	e5940000	 ldr         r0, [r4]
  00110	eb000000	 bl          OSDS_ReleaseLock
  00114	e1b0e000	 movs        lr, r0

; 372  :             if (ret != OSDS_STATUS_SUCCESS)

  00118	0affffdb	 beq         |$L1416|

; 373  :                 {
; 374  :                 LOGMSG(("RM_ReleaseLock(%u,x%08x): OSDS_ReleaseLock(x%08x) failed(x%08x)\r\n", 
; 375  :                          ResourceID, threadid, plock->lock, ret));

  0011c	e5943000	 ldr         r3, [r4]
  00120	e59f003c	 ldr         r0, [pc, #0x3C]
  00124	e1a02006	 mov         r2, r6
  00128	e1a01007	 mov         r1, r7
  0012c	e58de000	 str         lr, [sp]
  00130	eb000000	 bl          xllp_LogMessage

; 376  :                 ret = RM_STATUS_ERROR;

  00134	e3a05004	 mov         r5, #4

; 377  :                 goto ReleaseLock_end;

  00138	eaffffe0	 b           |$L1548|
  0013c		 |$L1399|

; 325  :         {
; 326  :         LOGMSG(("RM_ReleaseLock(%u,x%08x): ResourceID invalid\r\n", (int)ResourceID, threadid));

  0013c	e59f001c	 ldr         r0, [pc, #0x1C]
  00140	e1a02006	 mov         r2, r6
  00144	e1a01007	 mov         r1, r7
  00148	eb000000	 bl          xllp_LogMessage

; 327  :         return(RM_STATUS_INVALID_ARGUMENT);

  0014c	e3a05003	 mov         r5, #3
  00150		 |$L1391|

; 390  :     else
; 391  :         DBGMSG(("RM_ReleaseLock(%u,x%08x) returning x%08x (success) owner=x%08x, count=%u->%u\r\n", 
; 392  :                  ResourceID, threadid, ret, plock->owner, owncount, plock->owner_count));
; 393  :     return(ret);

  00150	e1a00005	 mov         r0, r5

; 394  :     } // RM_ReleaseLock

  00154	e28dd010	 add         sp, sp, #0x10
  00158	e8bd41f0	 ldmia       sp!, {r4 - r8, lr}
  0015c	e12fff1e	 bx          lr
  00160		 |$L1565|
  00160	00000000	 DCD         |??_C@_0CP@NGBKNBFM@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Resour@|
  00164	00000000	 DCD         |??_C@_0EC@OCEIKBHJ@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5OSDS_R@|
  00168	00000000	 DCD         |??_C@_0EM@ILMIMIFK@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?5returni@|
  0016c	00000000	 DCD         |??_C@_0DO@DJIPKCNH@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5not?5ow@|
  00170	00000000	 DCD         |??_C@_0DA@JBMNCEMD@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5lock?5h@|
  00174	00000000	 DCD         |??_C@_0DH@COMHCCMO@RM_ReleaseLock?$CI?$CFu?0x?$CF08x?$CJ?3?5Unable@|
  00178	00000000	 DCD         |LockDB|
  0017c		 |$M1561|

			 ENDP  ; |RM_ReleaseLock|

	END

⌨️ 快捷键说明

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