📄 resourcelock.cod
字号:
|$T1518| DCD |$L1517|
DCD 0x40006b02
00000 AREA |.rdata| { |??_C@_0DB@MHBAOEPO@RM_InitLock?3?5?$CFd?1?$CFs?5Already?5initi@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@MHBAOEPO@RM_InitLock?3?5?$CFd?1?$CFs?5Already?5initi@| DCB "RM"
DCB "_InitLock: %d/%s Already initialized (x%08x)", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DP@LLGLAGE@RM_InitLock?3?5?$CFd?1?$CFs?1x?$CF08x?5Collisi@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DP@LLGLAGE@RM_InitLock?3?5?$CFd?1?$CFs?1x?$CF08x?5Collisi@| DCB "R"
DCB "M_InitLock: %d/%s/x%08x Collision during Init (hLock=x%0"
DCB "8x)", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CP@HOAONHLI@RM_InitLock?3?5?$CFs?1x?$CF08x?5OSDS_Acqui@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CP@HOAONHLI@RM_InitLock?3?5?$CFs?1x?$CF08x?5OSDS_Acqui@| DCB "RM_"
DCB "InitLock: %s/x%08x OSDS_AcquireLock ERROR", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CK@GIPCOGHJ@RM_InitLock?3?5OSDS_CreateLock?$CI?$CFs?$CJ@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CK@GIPCOGHJ@RM_InitLock?3?5OSDS_CreateLock?$CI?$CFs?$CJ@| DCB "RM"
DCB "_InitLock: OSDS_CreateLock(%s) failed", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0EE@PJIOGGHH@RM_InitLock?$EAx?$CF08x?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EE@PJIOGGHH@RM_InitLock?$EAx?$CF08x?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5@| DCB "R"
DCB "M_InitLock@x%08x(%u,x%08x,%u): lock=x%08x, owner=x%08x, "
DCB "count=%u", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BB@PPIDDGPM@RM_RESOURCE_?$CF03u?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BB@PPIDDGPM@RM_RESOURCE_?$CF03u?$AA@| DCB "RM_RESOURCE_%03u", 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |RM_InitLock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |RM_InitLock| PROC
; 124 : {
00000 |$L1517|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd034 sub sp, sp, #0x34
00008 |$M1515|
00008 e1a09002 mov r9, r2
0000c e1a07001 mov r7, r1
00010 e1a08000 mov r8, r0
00014 e59f318c ldr r3, [pc, #0x18C]
00018 e5933000 ldr r3, [r3]
0001c e58d3030 str r3, [sp, #0x30]
; 125 : LOCK_STRUCT_T *plock;
; 126 : unsigned char name[32];
; 127 :
; 128 : plock = &(LockDB[RID2Index(ResourceID)]);
00020 e59fe17c ldr lr, [pc, #0x17C]
00024 e0883088 add r3, r8, r8, lsl #1
; 129 : LOGMSG(("RM_InitLock@x%08x(%u,x%08x,%u): lock=x%08x, owner=x%08x, count=%u\r\n",
; 130 : RM_InitLock, ResourceID, threadid, timeout_in_ms, plock->lock, plock->owner, plock->owner_count));
00028 e59f1170 ldr r1, [pc, #0x170]
0002c e08e3103 add r3, lr, r3, lsl #2
00030 e243600c sub r6, r3, #0xC
00034 e5965008 ldr r5, [r6, #8]
00038 e5964004 ldr r4, [r6, #4]
0003c e596e000 ldr lr, [r6]
00040 e59f0154 ldr r0, [pc, #0x154]
00044 e1a03007 mov r3, r7
00048 e1a02008 mov r2, r8
0004c e58de004 str lr, [sp, #4]
00050 e58d500c str r5, [sp, #0xC]
00054 e58d4008 str r4, [sp, #8]
00058 e58d9000 str r9, [sp]
0005c eb000000 bl xllp_LogMessage
; 131 : xllp_snprintf(name, sizeof(name)-1, "RM_RESOURCE_%03u", ResourceID);
00060 e59f2130 ldr r2, [pc, #0x130]
00064 e1a03008 mov r3, r8
00068 e3a0101f mov r1, #0x1F
0006c e28d0010 add r0, sp, #0x10
00070 eb000000 bl xllp_snprintf
; 132 : if (plock->lock == (RM_LOCK_HANDLE_T)0)
00074 e5963000 ldr r3, [r6]
00078 e3530000 cmp r3, #0
0007c 1a000035 bne |$L1314|
; 133 : {
; 134 : OSDS_LOCK_HANDLE_T hLock;
; 135 : int ret;
; 136 : hLock = OSDS_CreateLock(name);
00080 e28d0010 add r0, sp, #0x10
00084 eb000000 bl OSDS_CreateLock
00088 e1b04000 movs r4, r0
; 137 : if (hLock == (RM_LOCK_HANDLE_T)0)
0008c 1a000006 bne |$L1318|
; 138 : {
; 139 : LOGMSG(("RM_InitLock: OSDS_CreateLock(%s) failed\r\n", name));
00090 e59f00fc ldr r0, [pc, #0xFC]
00094 e28d1010 add r1, sp, #0x10
00098 eb000000 bl xllp_LogMessage
; 140 : return(RM_STATUS_ERROR);
0009c e59d0030 ldr r0, [sp, #0x30]
000a0 |$L1323|
; 154 : else
; 155 : return(RM_STATUS_ERROR);
000a0 eb000000 bl __security_check_cookie
000a4 e3a00004 mov r0, #4
000a8 ea000033 b |$L1306|
000ac |$L1318|
; 141 : }
; 142 : else
; 143 : DBGMSG(("RM_InitLock: OSDS_CreateLock(%s) success (x%08x)\r\n", name, hLock));
; 144 : // Acquire the lock to prevent conflict during lock initialization.
; 145 : ret = OSDS_AcquireLock(hLock, timeout_in_ms);
000ac e1a01009 mov r1, r9
000b0 e1a00004 mov r0, r4
000b4 eb000000 bl OSDS_AcquireLock
000b8 e1b05000 movs r5, r0
; 146 : if (ret != OSDS_STATUS_SUCCESS)
000bc 0a00000d beq |$L1321|
; 147 : {
; 148 : LOGMSG(("RM_InitLock: %s/x%08x OSDS_AcquireLock ERROR\r\n", name, hLock, ret));
000c0 e59f00c8 ldr r0, [pc, #0xC8]
000c4 e1a03005 mov r3, r5
000c8 e1a02004 mov r2, r4
000cc e28d1010 add r1, sp, #0x10
000d0 eb000000 bl xllp_LogMessage
; 149 : // We wont put the handle in LockDB, so destroy the lock to avoid resource leak.
; 150 : OSDS_DestroyLock(hLock);
000d4 e1a00004 mov r0, r4
000d8 eb000000 bl OSDS_DestroyLock
; 151 : RM_Dump_LockDB();
000dc eb000000 bl RM_Dump_LockDB
; 152 : if (ret == OSDS_STATUS_TIMEOUT)
000e0 e3550001 cmp r5, #1
; 153 : return(RM_STATUS_TIMEOUT);
000e4 e59d0030 ldr r0, [sp, #0x30]
000e8 1affffec bne |$L1323|
000ec eb000000 bl __security_check_cookie
000f0 e3a00001 mov r0, #1
000f4 ea000020 b |$L1306|
000f8 |$L1321|
; 156 : }
; 157 : else
; 158 : DBGMSG(("RM_InitLock: %s/x%08x Created and Locked\r\n", name, hLock));
; 159 :
; 160 : // At this point the lock exists and we've acquired it.
; 161 : // However, check again that we haven't collided with another thread
; 162 : if (plock->lock != (RM_LOCK_HANDLE_T)0)
000f8 e5963000 ldr r3, [r6]
000fc e3530000 cmp r3, #0
00100 0a00000b beq |$L1327|
; 163 : {
; 164 : LOGMSG(("RM_InitLock: %d/%s/x%08x Collision during Init (hLock=x%08x)\r\n", ResourceID, name, plock->lock, hLock));
00104 e5963000 ldr r3, [r6]
00108 e59f007c ldr r0, [pc, #0x7C]
0010c e28d2010 add r2, sp, #0x10
00110 e1a01008 mov r1, r8
00114 e58d4000 str r4, [sp]
00118 eb000000 bl xllp_LogMessage
; 165 : if (hLock != plock->lock)
0011c e5963000 ldr r3, [r6]
00120 e1540003 cmp r4, r3
00124 0a000010 beq |$L1331|
; 166 : OSDS_DestroyLock(hLock);
00128 e1a00004 mov r0, r4
0012c eb000000 bl OSDS_DestroyLock
; 167 : // Return success because the lock has now been initialized.
; 168 : // The caller can determine if the lock is owned by checking the owner field.
; 169 : RM_Dump_LockDB();
; 170 : return(RM_STATUS_SUCCESS);
00130 ea00000d b |$L1331|
00134 |$L1327|
; 171 : }
; 172 : if (threadid == 0)
00134 e3570000 cmp r7, #0
00138 1a000001 bne |$L1330|
; 173 : threadid = OSDS_GetCurrentThreadID();
0013c eb000000 bl OSDS_GetCurrentThreadID
00140 e1a07000 mov r7, r0
00144 |$L1330|
; 174 : plock->owner = threadid;
; 175 : plock->owner_count = 1;
00144 e3a03001 mov r3, #1
00148 e5867004 str r7, [r6, #4]
0014c e5863008 str r3, [r6, #8]
; 176 : plock->lock = hLock;
00150 e5864000 str r4, [r6]
; 177 : DBGMSG(("RM_InitLock: Lock %d/%s/x%08x initialized and locked (owner=x%08x, count=%d)\r\n",
; 178 : ResourceID, name, plock->lock, plock->owner, plock->owner_count));
; 179 : }
; 180 : else
00154 ea000004 b |$L1331|
00158 |$L1314|
; 181 : LOGMSG(("RM_InitLock: %d/%s Already initialized (x%08x)\r\n", ResourceID, name, plock->lock));
00158 e5963000 ldr r3, [r6]
0015c e59f0024 ldr r0, [pc, #0x24]
00160 e28d2010 add r2, sp, #0x10
00164 e1a01008 mov r1, r8
00168 eb000000 bl xllp_LogMessage
0016c |$L1331|
; 182 :
; 183 : RM_Dump_LockDB();
0016c eb000000 bl RM_Dump_LockDB
; 184 : return(RM_STATUS_SUCCESS);
00170 e59d0030 ldr r0, [sp, #0x30]
00174 eb000000 bl __security_check_cookie
00178 e3a00000 mov r0, #0
0017c |$L1306|
; 185 : } // RM_InitLock
0017c e28dd034 add sp, sp, #0x34
00180 e8bd43f0 ldmia sp!, {r4 - r9, lr}
00184 e12fff1e bx lr
00188 |$L1520|
00188 00000000 DCD |??_C@_0DB@MHBAOEPO@RM_InitLock?3?5?$CFd?1?$CFs?5Already?5initi@|
0018c 00000000 DCD |??_C@_0DP@LLGLAGE@RM_InitLock?3?5?$CFd?1?$CFs?1x?$CF08x?5Collisi@|
00190 00000000 DCD |??_C@_0CP@HOAONHLI@RM_InitLock?3?5?$CFs?1x?$CF08x?5OSDS_Acqui@|
00194 00000000 DCD |??_C@_0CK@GIPCOGHJ@RM_InitLock?3?5OSDS_CreateLock?$CI?$CFs?$CJ@|
00198 00000000 DCD |??_C@_0BB@PPIDDGPM@RM_RESOURCE_?$CF03u?$AA@|
0019c 00000000 DCD |??_C@_0EE@PJIOGGHH@RM_InitLock?$EAx?$CF08x?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5@|
001a0 00000000 DCD |RM_InitLock|
001a4 00000000 DCD |LockDB|
001a8 00000000 DCD |__security_cookie|
001ac |$M1516|
ENDP ; |RM_InitLock|
EXPORT |RM_AcquireLock|
EXPORT |??_C@_0DC@PKHJPFLI@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5Res@| [ DATA ] ; `string'
EXPORT |??_C@_0DK@JIPOKLCL@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5Una@| [ DATA ] ; `string'
EXPORT |??_C@_0DF@CCLAEEHA@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?5owne@| [ DATA ] ; `string'
EXPORT |??_C@_0DH@BCEOFBJ@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5TIM@| [ DATA ] ; `string'
EXPORT |??_C@_0DL@LEBBLINE@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5ERR@| [ DATA ] ; `string'
EXPORT |??_C@_0EL@JPPLNKFL@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?5retu@| [ DATA ] ; `string'
00000 AREA |.text| { |RM_AcquireLock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$RM_AcquireLock|, PDATA, SELECTION=5, ASSOC=|.text| { |RM_AcquireLock| } ; comdat associative
|$T1543| DCD |$L1542|
DCD 0x40006f02
00000 AREA |.rdata| { |??_C@_0DC@PKHJPFLI@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5Res@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DC@PKHJPFLI@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5Res@| DCB "R"
DCB "M_AcquireLock(%u,x%08x,%u): ResourceID invalid", 0xd, 0xa
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0EL@JPPLNKFL@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?5retu@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EL@JPPLNKFL@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?5retu@| DCB "R"
DCB "M_AcquireLock(%u,x%08x,%u) returning x%08x (FAIL) owner="
DCB "x%08x, count=%u", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DL@LEBBLINE@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5ERR@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DL@LEBBLINE@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5ERR@| DCB "R"
DCB "M_AcquireLock(%u,x%08x,%u): ERROR x%08x acquiring x%08x", 0xd
DCB 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DH@BCEOFBJ@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5TIM@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DH@BCEOFBJ@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?3?5TIM@| DCB "R"
DCB "M_AcquireLock(%u,x%08x,%u): TIMEOUT acquiring x%08x", 0xd
DCB 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DF@CCLAEEHA@RM_AcquireLock?$CI?$CFu?0x?$CF08x?0?$CFu?$CJ?5owne@| }, DATA, READONLY, SELECTION=2 ; comdat any
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -