############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 21/Mar/2009 21:21:19 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\main # # .c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\main # # .c -lC D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smil # # es\Release\List\ -o D:\pasha\elf\_MY_PROJECT_\_NATIC # # Q2\check_smiles\Release\Obj\ -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\Rele # # ase\List\main.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\Rele # # ase\Obj\main.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\main.c 1 #include "..\inc\swilib.h" 2 #include "..\readimg.h" 3 #include "..\externals.h" 4 #include "..\conf_loader.h" 5 #include "../inc/naticq_ipc.h" 6 #include "check_ipc.h" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 585461736B00 DC8 "XTask" \ 00000006 0000 DC8 0, 0 \ char const __data ipc_my_name[8] \ ipc_my_name: \ 00000008 436865636B65 DC8 "Checker" \ 7200 \ char const __data ipc_send_name[7] \ ipc_send_name: \ 00000010 4E6174494351 DC8 "NatICQ" \ 00 \ 00000017 00 DC8 0 7 #include "smiles_loader.h" 8 #include "../inc/xtask_ipc.h" 9 #include "../strings.h" \ In segment DATA_C, align 4, align-sorted 10 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 11 12 typedef struct 13 { 14 CSM_RAM csm; 15 }MAIN_CSM; 16 \ In segment DATA_Z, align 4, align-sorted 17 CSM_RAM *under_idle; \ under_idle: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 18 IPC_REQ gipc; \ gipc: \ 00000000 DS8 12 19 20 extern void kill_data(void *p, void (*func_p)(void *)); 21 22 #pragma inline=forced 23 24 int toupper(int c) 25 { 26 if ((c>='a')&&(c<='z')) c+='A'-'a'; 27 return(c); 28 } 29 30 31 int maincsm_id; \ maincsm_id: \ 0000000C DS8 4 \ In segment CODE, align 4, keep-with-next 32 void CheckDoubleRun(void) 33 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 34 int csm_id; 35 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable4 ;; gipc \ 00000008 080094E5 LDR R0,[R4, #+8] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 0F00000A BEQ ??CheckDoubleRun_0 36 { 37 gipc.name_to=IPC_XTASK_NAME; \ 00000014 ........ LDR R1,??DataTable5 ;; `?` 38 gipc.name_from=ipc_my_name; 39 gipc.data=(void *)csm_id; \ 00000018 080084E5 STR R0,[R4, #+8] \ 0000001C 001084E5 STR R1,[R4, #+0] \ 00000020 081081E2 ADD R1,R1,#+8 \ 00000024 041084E5 STR R1,[R4, #+4] 40 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000028 0430A0E1 MOV R3,R4 \ 0000002C 0220A0E3 MOV R2,#+2 \ 00000030 FC1F82E3 ORR R1,R2,#0x3F0 \ 00000034 0900A0E3 MOV R0,#+9 \ 00000038 420C80E3 ORR R0,R0,#0x4200 \ 0000003C 000100EF SWI +256 41 LockSched(); \ 00000040 460100EF SWI +326 42 CloseCSM(maincsm_id); \ 00000044 0C0094E5 LDR R0,[R4, #+12] \ 00000048 FC0100EF SWI +508 43 //ShowMSG(1,(int)LG_ALREADY_STARTED); 44 UnlockSched(); \ 0000004C 470100EF SWI +327 \ 00000050 1080BDE8 POP {R4,PC} 45 } 46 else 47 { 48 extern void InitXStatusesImg(void); 49 extern void ProcessNextImg(void); 50 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 00000054 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 51 ProcessNextImg(); \ 00000058 1040BDE8 POP {R4,LR} ;; Pop \ 0000005C ........ _BF ProcessNextImg,??ProcessNextImg??rA ;; tailcall 52 //InitSmiles(); Это вызовется из InitXStatusesImg 53 } 54 } 55 56 extern void ProcessNextSmile(void); 57 extern void ProcessNextXStatImg(void); 58 \ In segment CODE, align 4, keep-with-next 59 int maincsm_onmessage(CSM_RAM* data,GBS_MSG* msg) 60 { \ maincsm_onmessage: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 61 MAIN_CSM *csm=(MAIN_CSM*)data; ^ Warning[Pe177]: variable "csm" was declared but never referenced 62 { 63 //IPC 64 if (msg->msg==MSG_IPC) \ 00000004 F240A0E3 MOV R4,#+242 \ 00000008 C04F84E3 ORR R4,R4,#0x300 \ 0000000C 0170A0E1 MOV R7,R1 \ 00000010 F200D7E1 LDRSH R0,[R7, #+2] \ 00000014 040050E1 CMP R0,R4 \ 00000018 3900001A BNE ??maincsm_onmessage_1 65 { 66 IPC_REQ *ipc; 67 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000001C 086097E5 LDR R6,[R7, #+8] \ 00000020 000056E3 CMP R6,#+0 \ 00000024 3600000A BEQ ??maincsm_onmessage_1 68 { 69 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000028 ........ LDR R5,??DataTable5 ;; `?` \ 0000002C 000096E5 LDR R0,[R6, #+0] \ 00000030 081085E2 ADD R1,R5,#+8 \ 00000034 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 3000001A BNE ??maincsm_onmessage_1 70 { 71 switch (msg->submess) \ 00000040 042097E5 LDR R2,[R7, #+4] \ 00000044 041096E5 LDR R1,[R6, #+4] \ 00000048 ........ LDR R3,??DataTable4 ;; gipc \ 0000004C 0900A0E3 MOV R0,#+9 \ 00000050 420C80E3 ORR R0,R0,#0x4200 \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 0A0052E3 CMP R2,#+10 \ 0000005C 2800008A BHI ??maincsm_onmessage_1 \ 00000060 017F8FE2 ADR R7,??maincsm_onmessage_0 \ 00000064 0270D7E7 LDRB R7,[R7, R2] \ 00000068 07F18FE0 ADD PC,PC,R7, LSL #+2 \ ??maincsm_onmessage_0: \ 0000006C 131B2025 DC8 +19,+27,+32,+37 \ 00000070 25252525 DC8 +37,+37,+37,+37 \ 00000074 25020D00 DC8 +37,+2,+13,+0 72 { 73 case IPC_SEND_ICONS: 74 { 75 extern ICONS *iconstop; 76 gipc.name_to=ipc_send_name; \ ??maincsm_onmessage_2: \ 00000078 101085E2 ADD R1,R5,#+16 \ 0000007C 001083E5 STR R1,[R3, #+0] 77 gipc.name_from=ipc_my_name; \ 00000080 081085E2 ADD R1,R5,#+8 \ 00000084 041083E5 STR R1,[R3, #+4] 78 gipc.data = iconstop; \ 00000088 7C109FE5 LDR R1,??maincsm_onmessage_3 ;; iconstop 79 GBS_SendMessage(MMI_CEPID,MSG_IPC,1,&gipc); \ ??maincsm_onmessage_4: \ 0000008C 0120A0E3 MOV R2,#+1 \ 00000090 001091E5 LDR R1,[R1, #+0] \ 00000094 081083E5 STR R1,[R3, #+8] \ 00000098 0410A0E1 MOV R1,R4 \ 0000009C 000100EF SWI +256 \ 000000A0 0B0000EA B ??maincsm_onmessage_5 80 } 81 break; 82 case IPC_SEND_XICON: 83 { 84 extern ICONS *xiconstop; 85 gipc.name_to=ipc_send_name; \ ??maincsm_onmessage_6: \ 000000A4 101085E2 ADD R1,R5,#+16 \ 000000A8 001083E5 STR R1,[R3, #+0] 86 gipc.name_from=ipc_my_name; \ 000000AC 081085E2 ADD R1,R5,#+8 \ 000000B0 041083E5 STR R1,[R3, #+4] 87 gipc.data = xiconstop; \ 000000B4 54109FE5 LDR R1,??maincsm_onmessage_3+0x4 ;; xiconstop \ 000000B8 F3FFFFEA B ??maincsm_onmessage_4 88 GBS_SendMessage(MMI_CEPID,MSG_IPC,1,&gipc); 89 } 90 break; 91 92 case IPC_CHECK_DOUBLERUN: 93 //Если приняли свое собственное сообщение, значит запускаем чекер 94 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_7: \ 000000BC 080085E2 ADD R0,R5,#+8 \ 000000C0 000051E1 CMP R1,R0 95 { 96 SUBPROC((void *)CheckDoubleRun); \ 000000C4 48009F05 LDREQ R0,??maincsm_onmessage_3+0x8 ;; CheckDoubleRun \ 000000C8 0C00000A BEQ ??maincsm_onmessage_8 97 } 98 else ipc->data=(void *)maincsm_id; \ 000000CC 0C0093E5 LDR R0,[R3, #+12] \ 000000D0 080086E5 STR R0,[R6, #+8] \ ??maincsm_onmessage_5: \ 000000D4 0100A0E3 MOV R0,#+1 \ 000000D8 F080BDE8 POP {R4-R7,PC} 99 break; 100 case IPC_SMILE_PROCESSED: 101 //Только собственные смайлы ;) 102 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_9: \ 000000DC 080085E2 ADD R0,R5,#+8 \ 000000E0 000051E1 CMP R1,R0 \ 000000E4 0600001A BNE ??maincsm_onmessage_1 103 { 104 SUBPROC((void *)ProcessNextSmile); \ 000000E8 28009FE5 LDR R0,??maincsm_onmessage_3+0xC ;; ProcessNextSmile \ 000000EC 030000EA B ??maincsm_onmessage_8 105 } 106 break; 107 case IPC_XSTATUSIMG_PROCESSED: 108 //Только собственные иксстатусы ;) 109 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000F0 080085E2 ADD R0,R5,#+8 \ 000000F4 000051E1 CMP R1,R0 \ 000000F8 0100001A BNE ??maincsm_onmessage_1 110 { 111 SUBPROC((void *)ProcessNextXStatImg); \ 000000FC 18009FE5 LDR R0,??maincsm_onmessage_3+0x10 ;; ProcessNextXStatImg \ ??maincsm_onmessage_8: \ 00000100 710100EF SWI +369 112 } 113 break; 114 } 115 } 116 } 117 } 118 } 119 120 /* 121 if (msg->msg==MSG_RECONFIGURE_REQ) 122 { 123 extern const char *successed_config_filename; 124 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 125 { 126 InitConfig(); 127 } 128 }*/ 129 return (1); \ ??maincsm_onmessage_1: \ 00000104 0100A0E3 MOV R0,#+1 \ 00000108 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_onmessage_3: \ 0000010C ........ DC32 iconstop \ 00000110 ........ DC32 xiconstop \ 00000114 ........ DC32 CheckDoubleRun \ 00000118 ........ DC32 ProcessNextSmile \ 0000011C ........ DC32 ProcessNextXStatImg 130 } 131 \ In segment CODE, align 4, keep-with-next 132 static void maincsm_oncreate(CSM_RAM *data) 133 { 134 gipc.name_to=ipc_my_name; \ maincsm_oncreate: \ 00000000 ........ LDR R3,??DataTable4 ;; gipc \ 00000004 ........ LDR R0,??DataTable5 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 081080E2 ADD R1,R0,#+8 \ 00000010 001083E5 STR R1,[R3, #+0] 135 gipc.name_from=ipc_my_name; \ 00000014 080080E2 ADD R0,R0,#+8 \ 00000018 040083E5 STR R0,[R3, #+4] 136 gipc.data=(void *)-1; \ 0000001C 0000E0E3 MVN R0,#+0 \ 00000020 080083E5 STR R0,[R3, #+8] 137 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 00000024 0120A0E3 MOV R2,#+1 \ 00000028 F210A0E3 MOV R1,#+242 \ 0000002C C01F81E3 ORR R1,R1,#0x300 \ 00000030 0900A0E3 MOV R0,#+9 \ 00000034 420C80E3 ORR R0,R0,#0x4200 \ 00000038 000100EF SWI +256 138 } \ 0000003C 0080BDE8 POP {PC} ;; return 139 \ In segment CODE, align 4, keep-with-next 140 static void Killer(void) 141 { \ Killer: \ 00000000 00402DE9 PUSH {LR} 142 extern void *ELF_BEGIN; 143 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??Killer_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??Killer_0: \ 00000018 ........ DC32 ELF_BEGIN 144 } 145 \ In segment CODE, align 4, keep-with-next 146 static void maincsm_onclose(CSM_RAM *csm) 147 { \ maincsm_onclose: \ 00000000 00402DE9 PUSH {LR} 148 extern void FreeIconList(); 149 FreeIconList(); \ 00000004 ........ _BLF FreeIconList,??FreeIconList??rA 150 SUBPROC((void *)Killer); \ 00000008 04009FE5 LDR R0,??maincsm_onclose_0 ;; Killer \ 0000000C 710100EF SWI +369 151 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000014 ........ DC32 Killer 152 \ In segment DATA_Z, align 4, align-sorted 153 static unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 154 155 static const struct 156 { 157 CSM_DESC maincsm; 158 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted 159 }MAINCSM = \ MAINCSM: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 40, 1 \ ............ \ 280000000100 \ 0000 \ 00000014 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 00000028 8B00 DC16 139 \ 0000002A 0000 DC8 0, 0 160 { 161 { 162 maincsm_onmessage, 163 maincsm_oncreate, 164 #ifdef NEWSGOLD 165 0, 166 0, 167 0, 168 0, 169 #endif 170 maincsm_onclose, 171 sizeof(MAIN_CSM), 172 1, 173 &minus11 174 }, 175 { 176 maincsm_name_body, 177 NAMECSM_MAGIC1, 178 NAMECSM_MAGIC2, 179 0x0, 180 139 181 } 182 }; 183 184 static void UpdateCSMname(void) 185 { 186 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"NSD"); 187 } 188 \ In segment CODE, align 4, keep-with-next 189 int main() 190 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 191 InitConfig(); 192 CSM_RAM *save_cmpc; 193 char dummy[sizeof(MAIN_CSM)]; 194 UpdateCSMname(); \ 00000004 74409FE5 LDR R4,??main_0+0x4 ;; MAINCSM \ 00000008 28D04DE2 SUB SP,SP,#+40 \ 0000000C ........ _BLF InitConfig,??InitConfig??rA \ 00000010 191F8FE2 ADR R1,??main_0 ;; "NSD" \ 00000014 180084E2 ADD R0,R4,#+24 \ 00000018 240100EF SWI +292 195 LockSched(); \ 0000001C 460100EF SWI +326 196 save_cmpc=CSM_root()->csm_q->current_msg_processing_csm; \ 00000020 068100EF SWI +33030 \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 045090E5 LDR R5,[R0, #+4] 197 CSM_root()->csm_q->current_msg_processing_csm=CSM_root()->csm_q->csm.first; \ 0000002C 068100EF SWI +33030 \ 00000030 0060A0E1 MOV R6,R0 \ 00000034 068100EF SWI +33030 \ 00000038 080090E5 LDR R0,[R0, #+8] \ 0000003C 081096E5 LDR R1,[R6, #+8] \ 00000040 080090E5 LDR R0,[R0, #+8] 198 maincsm_id = CreateCSM(&MAINCSM.maincsm,dummy,0); \ 00000044 0020A0E3 MOV R2,#+0 \ 00000048 040081E5 STR R0,[R1, #+4] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 070100EF SWI +263 \ 00000058 24109FE5 LDR R1,??main_0+0x8 ;; gipc + 12 \ 0000005C 000081E5 STR R0,[R1, #+0] 199 CSM_root()->csm_q->current_msg_processing_csm=save_cmpc; \ 00000060 068100EF SWI +33030 \ 00000064 080090E5 LDR R0,[R0, #+8] \ 00000068 045080E5 STR R5,[R0, #+4] 200 UnlockSched(); \ 0000006C 470100EF SWI +327 201 202 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 28D08DE2 ADD SP,SP,#+40 \ 00000078 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_0: \ 0000007C 4E534400 DC8 "NSD" \ 00000080 ........ DC32 MAINCSM \ 00000084 ........ DC32 gipc + 12 203 } \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 gipc \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ 00000000 4E534400 DC8 "NSD" Maximum stack usage in bytes: Function CSTACK -------- ------ CheckDoubleRun 8 Killer 4 main 56 maincsm_onclose 4 maincsm_oncreate 4 maincsm_onmessage 20 Segment part sizes: Function/Label Bytes -------------- ----- ? 24 minus11 4 under_idle 4 gipc 16 CheckDoubleRun 96 maincsm_onmessage 288 maincsm_oncreate 64 Killer 28 maincsm_onclose 24 maincsm_name_body 280 MAINCSM 44 main 136 ??DataTable4 4 ??DataTable5 4 ? 4 Others 108 740 bytes in segment CODE 76 bytes in segment DATA_C 300 bytes in segment DATA_Z 12 bytes in segment INITTAB 644 bytes of CODE memory (+ 108 bytes shared) 76 bytes of CONST memory 300 bytes of DATA memory Errors: none Warnings: 1