############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jun/2010 15:34:25 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = F:\SVN\cn\KeyExten\main.c # # Command line = F:\SVN\cn\KeyExten\main.c -D NEWSGOLD -lC # # F:\SVN\cn\KeyExten\NSG\List\ -o # # F:\SVN\cn\KeyExten\NSG\Obj\ -s9 --no_unroll # # --no_clustering --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None --dlib_config "F:\software\Embedded # # Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" -I # # "F:\software\Embedded Workbench 4.0 # # Evaluation\ARM\INC\" --inline_threshold=2 # # List file = F:\SVN\cn\KeyExten\NSG\List\main.lst # # Object file = F:\SVN\cn\KeyExten\NSG\Obj\main.r79 # # # # # ############################################################################## F:\SVN\cn\KeyExten\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "conf_loader.h" 4 \ In segment DATA_Z, align 4, align-sorted 5 CSM_DESC icsmd; \ icsmd: \ 00000000 DS8 40 6 //int (*old_icsm_onMessage)(CSM_RAM*,GBS_MSG*); 7 //void (*old_icsm_onClose)(CSM_RAM*); \ In segment DATA_I, align 4, align-sorted 8 int e=2; \ e: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_C, align 4, align-sorted 9 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 10 extern void kill_data(void *p, void (*func_p)(void *)); 11 12 typedef struct 13 { 14 CSM_RAM csm; 15 }MAIN_CSM; 16 17 extern const unsigned int K1ST; 18 extern const unsigned int K1; 19 extern const unsigned int K2ST; 20 extern const unsigned int K2; 21 extern const unsigned int K3ST; 22 extern const unsigned int K3; 23 extern const unsigned int K4ST; 24 extern const unsigned int K4; 25 extern const unsigned int K5ST; 26 extern const unsigned int K5; 27 extern const unsigned int K6ST; 28 extern const unsigned int K6; 29 extern const unsigned int KENTER; 30 extern const unsigned int KSL; 31 extern const unsigned int KSR; 32 extern const unsigned int KG; 33 extern const unsigned int KR; 34 extern const unsigned int KUP; 35 extern const unsigned int KDN; 36 extern const unsigned int KL; 37 extern const unsigned int KRI; 38 extern const unsigned int K_1; 39 extern const unsigned int K_2; 40 extern const unsigned int K_3; 41 extern const unsigned int K_4; 42 extern const unsigned int K_5; 43 extern const unsigned int K_6; 44 extern const unsigned int K_7; 45 extern const unsigned int K_8; 46 extern const unsigned int K_9; 47 extern const unsigned int KX; 48 extern const unsigned int K_0; 49 extern const unsigned int KJ; 50 extern const unsigned int KVU; 51 extern const unsigned int KVD; 52 extern const unsigned int ENA_M_B; 53 54 55 \ In segment CODE, align 4, keep-with-next 56 int my_keyhook(int submsg, int msg) 57 { 58 extern const char *successed_config_filename; 59 int MYKST[29]={0x1A,0x01,0x04,0x3B,0x3C,0x3D,0x3E,0x0C,K1ST,K2ST,K3ST,K4ST,0x0D,0x0E,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x0B,0x2A,0x23,K5ST,K6ST}; \ my_keyhook: \ 00000000 DC329FE5 LDR R3,??my_keyhook_0 ;; `?='a')&&(c<='z')) c+='A'-'a'; 110 return(c); 111 } 112 \ In segment CODE, align 4, keep-with-next 113 int strcmp_nocase(const char *s1,const char *s2) 114 { 115 int i; 116 int c; 117 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 0020D0E5 LDRB R2,[R0, #+0] \ 00000004 610052E3 CMP R2,#+97 \ 00000008 010000BA BLT ??strcmp_nocase_1 \ 0000000C 7B0052E3 CMP R2,#+123 \ 00000010 202042B2 SUBLT R2,R2,#+32 \ ??strcmp_nocase_1: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 0230A0E1 MOV R3,R2 \ 00000020 61005CE3 CMP R12,#+97 \ 00000024 010000BA BLT ??strcmp_nocase_2 \ 00000028 7B005CE3 CMP R12,#+123 \ 0000002C 20C04CB2 SUBLT R12,R12,#+32 \ ??strcmp_nocase_2: \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 0C2052E0 SUBS R2,R2,R12 \ 00000038 0100001A BNE ??strcmp_nocase_3 \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 EEFFFF1A BNE ??strcmp_nocase_0 118 return(i); \ ??strcmp_nocase_3: \ 00000044 0200A0E1 MOV R0,R2 \ 00000048 1EFF2FE1 BX LR ;; return 119 } 120 121 /* 122 int MyIDLECSM_onMessage(CSM_RAM* data,GBS_MSG* msg) 123 { 124 int csm_result; 125 csm_result = old_icsm_onMessage(data, msg); 126 127 if(msg->msg == MSG_RECONFIGURE_REQ) 128 { 129 extern const char *successed_config_filename; 130 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 131 { 132 ShowMSG(1,(int)"KeyExten config updated!"); 133 InitConfig(); 134 } 135 } 136 return csm_result; 137 } 138 139 void MyIDLECSM_onClose(CSM_RAM *data) 140 { 141 extern void seqkill(void *data, void(*next_in_seq)(CSM_RAM *), void *data_to_kill, void *seqkiller); 142 extern void *ELF_BEGIN; 143 RemoveKeybMsgHook((void *)my_keyhook); 144 seqkill(data,old_icsm_onClose,&ELF_BEGIN,SEQKILLER_ADR()); 145 } 146 */ \ In segment CODE, align 4, keep-with-next 147 int maincsm_onmessage(CSM_RAM* data,GBS_MSG* msg) 148 { \ maincsm_onmessage: \ 00000000 00402DE9 PUSH {LR} 149 if(msg->msg == MSG_RECONFIGURE_REQ) \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 AF20A0E3 MOV R2,#+175 \ 0000000C DE2C82E3 ORR R2,R2,#0xDE00 \ 00000010 020050E1 CMP R0,R2 \ 00000014 0900001A BNE ??maincsm_onmessage_0 150 { 151 extern const char *successed_config_filename; 152 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000018 ........ LDR R0,??DataTable1 ;; successed_config_filename \ 0000001C 0C1091E5 LDR R1,[R1, #+12] \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 ........ BL strcmp_nocase \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300001A BNE ??maincsm_onmessage_0 153 { 154 ShowMSG(1,(int)"KeyExten config updated!"); \ 00000030 10109FE5 LDR R1,??maincsm_onmessage_1 ;; `?` \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 480100EF SWI +328 155 InitConfig(); \ 0000003C ........ _BLF InitConfig,??InitConfig??rA 156 } 157 } 158 return(1); \ ??maincsm_onmessage_0: \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 0080BDE8 POP {PC} ;; return \ ??maincsm_onmessage_1: \ 00000048 ........ DC32 `?` 159 } 160 \ In segment CODE, align 4, keep-with-next 161 static void maincsm_oncreate(CSM_RAM *data) 162 { 163 } \ maincsm_oncreate: \ 00000000 1EFF2FE1 BX LR ;; return 164 \ In segment CODE, align 4, keep-with-next 165 static void Killer(void) 166 { 167 extern void *ELF_BEGIN; 168 //extern void seqkill(void *data, void(*next_in_seq)(CSM_RAM *), void *data_to_kill, void *seqkiller); 169 RemoveKeybMsgHook((void *)my_keyhook); \ Killer: \ 00000000 ........ LDR R0,??DataTable3 ;; my_keyhook \ 00000004 00402DE9 PUSH {LR} \ 00000008 2D0100EF SWI +301 170 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 0000000C 158000EF SWI +32789 \ 00000010 0010A0E1 MOV R1,R0 \ 00000014 04009FE5 LDR R0,??Killer_0 ;; ELF_BEGIN \ 00000018 0040BDE8 POP {LR} ;; Pop \ 0000001C ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??Killer_0: \ 00000020 ........ DC32 ELF_BEGIN 171 //seqkill(data,old_icsm_onClose,&ELF_BEGIN,SEQKILLER_ADR()); 172 } 173 \ In segment CODE, align 4, keep-with-next 174 static void maincsm_onclose(CSM_RAM *csm) 175 { 176 SUBPROC((void *)Killer); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; Killer \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 177 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 Killer 178 \ In segment DATA_Z, align 4, align-sorted 179 static unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 180 181 static const struct 182 { 183 CSM_DESC maincsm; 184 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted 185 }MAINCSM = \ MAINCSM: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000001C 280000000100 DC32 40, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000038 8B00 DC16 139 \ 0000003A 0000 DC8 0, 0 186 { 187 { 188 maincsm_onmessage, 189 maincsm_oncreate, 190 #ifdef NEWSGOLD 191 0, 192 0, 193 0, 194 0, 195 #endif 196 maincsm_onclose, 197 sizeof(MAIN_CSM), 198 1, 199 &minus11 200 }, 201 { 202 maincsm_name_body, 203 NAMECSM_MAGIC1, 204 NAMECSM_MAGIC2, 205 0x0, 206 139 207 } 208 }; 209 210 static void UpdateCSMname(void) 211 { 212 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"KeyExtern"); 213 } 214 \ In segment CODE, align 4, keep-with-next 215 int main(void) 216 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 217 CSM_RAM *save_cmpc; 218 char dummy[sizeof(MAIN_CSM)]; 219 InitConfig(); 220 UpdateCSMname(); \ 00000004 70409FE5 LDR R4,??main_0 ;; MAINCSM \ 00000008 28D04DE2 SUB SP,SP,#+40 \ 0000000C ........ _BLF InitConfig,??InitConfig??rA \ 00000010 68109FE5 LDR R1,??main_0+0x4 ;; `?` \ 00000014 280084E2 ADD R0,R4,#+40 \ 00000018 240100EF SWI +292 221 LockSched(); \ 0000001C 460100EF SWI +326 222 223 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] 224 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] 225 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 226 CSM_root()->csm_q->current_msg_processing_csm=save_cmpc; \ 00000058 068100EF SWI +33030 \ 0000005C 080090E5 LDR R0,[R0, #+8] \ 00000060 045080E5 STR R5,[R0, #+4] 227 AddKeybMsgHook((void *)my_keyhook); \ 00000064 ........ LDR R0,??DataTable3 ;; my_keyhook \ 00000068 2B0100EF SWI +299 228 229 UnlockSched(); \ 0000006C 470100EF SWI +327 230 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 28D08DE2 ADD SP,SP,#+40 \ 00000078 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_0: \ 0000007C ........ DC32 MAINCSM \ 00000080 ........ DC32 `?` 231 } \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 my_keyhook \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 02000000 DC32 2 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4B6579457874 DC8 "KeyExten config updated!" \ 656E20636F6E \ 666967207570 \ 646174656421 \ 00 \ 00000019 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4B6579457874 DC8 "KeyExtern" \ 65726E00 \ 0000000A 0000 DC8 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ Killer 4 main 56 maincsm_onclose 4 maincsm_oncreate 0 maincsm_onmessage 4 my_keyhook 240 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- icsmd 40 e 4 minus11 4 my_keyhook 892 ??strcmp_nocase_0 76 maincsm_onmessage 76 maincsm_oncreate 4 Killer 36 maincsm_onclose 20 maincsm_name_body 280 MAINCSM 60 main 132 ??DataTable1 4 ??DataTable3 4 ? 4 ? 28 ? 12 Others 76 1 296 bytes in segment CODE 220 bytes in segment DATA_C 4 bytes in segment DATA_I 4 bytes in segment DATA_ID 320 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 244 bytes of CODE memory (+ 76 bytes shared) 224 bytes of CONST memory 324 bytes of DATA memory Errors: none Warnings: none