📄 resourcelock.cod
字号:
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 + -