############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 12/Aug/2008 18:43:54 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\feanor\bashorg\conf_loader.c # # Command line = D:\Pasha\elf\feanor\bashorg\conf_loader.c -D # # NEWSGOLD -D ELKA -lC D:\Pasha\elf\feanor\bashorg\Rel # # ease_ELKA\List\ -o D:\Pasha\elf\feanor\bashorg\Relea # # se_ELKA\Obj\ -s9 --no_unroll --no_clustering # # --cpu_mode arm --endian little --cpu ARM7TDMI # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl4tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\feanor\bashorg\Release_ELKA\List\conf_l # # oader.lst # # Object file = D:\Pasha\elf\feanor\bashorg\Release_ELKA\Obj\conf_lo # # ader.r79 # # # # # ############################################################################## D:\Pasha\elf\feanor\bashorg\conf_loader.c 1 #include "swilib.h" 2 #include "cfg_items.h" 3 #include "conf_loader.h" 4 5 #pragma segment="CONFIG_C" \ In segment CODE, align 4, keep-with-next 6 int LoadConfigData(const char *fname) 7 { \ LoadConfigData: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0040A0E1 MOV R4,R0 8 int f; 9 unsigned int ul; 10 char *buf; 11 int result=0; \ 0000000C 0050A0E3 MOV R5,#+0 12 void *cfg; 13 14 extern const CFG_HDR cfghdr0; //first var in CONFIG 15 cfg=(void*)&cfghdr0; 16 17 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); \ 00000010 D8609FE5 LDR R6,??LoadConfigData_0 ;; SFE(CONFIG_C) - SFB(CONFIG_C) 18 19 if (!(buf=malloc(len))) return -1; \ 00000014 0600A0E1 MOV R0,R6 \ 00000018 140000EF SWI +20 \ 0000001C 0070B0E1 MOVS R7,R0 \ 00000020 0500E001 MVNEQ R0,R5 \ 00000024 2F00000A BEQ ??LoadConfigData_1 20 if ((f=fopen(fname,A_ReadOnly+A_BIN,0,&ul))!=-1) \ 00000028 0D30A0E1 MOV R3,SP \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 801CA0E3 MOV R1,#+32768 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 0A0000EF SWI +10 \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 AC909FE5 LDR R9,??LoadConfigData_0+0x4 ;; cfghdr0 \ 00000044 05A0E0E1 MVN R10,R5 \ 00000048 0A0058E1 CMP R8,R10 \ 0000004C 1000000A BEQ ??LoadConfigData_2 21 { 22 if (fread(f,buf,len,&ul)==len) \ 00000050 0D30A0E1 MOV R3,SP \ 00000054 0620A0E1 MOV R2,R6 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0B0000EF SWI +11 \ 00000060 060050E1 CMP R0,R6 \ 00000064 0700001A BNE ??LoadConfigData_3 23 { 24 memcpy(cfg,buf,len); \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 1E0100EF SWI +286 25 fclose(f,&ul); \ ??LoadConfigData_4: \ 00000078 0D10A0E1 MOV R1,SP \ 0000007C 0800A0E1 MOV R0,R8 \ 00000080 0D0000EF SWI +13 \ 00000084 140000EA B ??LoadConfigData_5 26 } 27 else 28 { 29 fclose(f,&ul); \ ??LoadConfigData_3: \ 00000088 0D10A0E1 MOV R1,SP \ 0000008C 0800A0E1 MOV R0,R8 \ 00000090 0D0000EF SWI +13 30 goto L_SAVENEWCFG; 31 } 32 } 33 else 34 { 35 L_SAVENEWCFG: 36 if ((f=fopen(fname,A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))!=-1) \ ??LoadConfigData_2: \ 00000094 0D30A0E1 MOV R3,SP \ 00000098 602FA0E3 MOV R2,#+384 \ 0000009C 0210A0E3 MOV R1,#+2 \ 000000A0 C01F81E3 ORR R1,R1,#0x300 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 0A0000EF SWI +10 \ 000000AC 0080A0E1 MOV R8,R0 \ 000000B0 0A0058E1 CMP R8,R10 \ 000000B4 0700000A BEQ ??LoadConfigData_6 37 { 38 if (fwrite(f,cfg,len,&ul)!=len) result=-1; \ 000000B8 0D30A0E1 MOV R3,SP \ 000000BC 0620A0E1 MOV R2,R6 \ 000000C0 0910A0E1 MOV R1,R9 \ 000000C4 0C0000EF SWI +12 \ 000000C8 060050E1 CMP R0,R6 \ 000000CC E9FFFF0A BEQ ??LoadConfigData_4 \ 000000D0 0A50A0E1 MOV R5,R10 39 fclose(f,&ul); \ 000000D4 E7FFFFEA B ??LoadConfigData_4 40 } 41 else 42 result=-1; \ ??LoadConfigData_6: \ 000000D8 0A50A0E1 MOV R5,R10 43 } 44 mfree(buf); \ ??LoadConfigData_5: \ 000000DC 0700A0E1 MOV R0,R7 \ 000000E0 150000EF SWI +21 45 return(result); \ 000000E4 0500A0E1 MOV R0,R5 \ ??LoadConfigData_1: \ 000000E8 F247BDE8 POP {R1,R4-R10,LR} \ 000000EC 1EFF2FE1 BX LR ;; return \ ??LoadConfigData_0: \ 000000F0 ........ DC32 SFE(CONFIG_C) - SFB(CONFIG_C) \ 000000F4 ........ DC32 cfghdr0 46 } 47 \ In segment CODE, align 4, keep-with-next 48 void InitConfig() 49 { \ InitConfig: \ 00000000 00402DE9 PUSH {LR} 50 if (LoadConfigData("0:\\ZBin\\etc\\bashorgru.bcfg")<0) \ 00000004 18009FE5 LDR R0,??InitConfig_0 ;; `?` \ 00000008 ........ BL LoadConfigData \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100005A BPL ??InitConfig_1 51 { 52 LoadConfigData("4:\\ZBin\\etc\\bashorgru.bcfg"); \ 00000014 0C009FE5 LDR R0,??InitConfig_0+0x4 ;; `?` \ 00000018 ........ BL LoadConfigData 53 } 54 } \ ??InitConfig_1: \ 0000001C 0040BDE8 POP {LR} \ 00000020 1EFF2FE1 BX LR ;; return \ ??InitConfig_0: \ 00000024 ........ DC32 `?` \ 00000028 ........ DC32 `?` \ In segment CONFIG_C, align 1 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 343A5C5A4269 DC8 "4:\\ZBin\\etc\\bashorgru.bcfg" \ 6E5C6574635C \ 626173686F72 \ 6772752E6263 \ 666700 \ 0000001B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C5A4269 DC8 "0:\\ZBin\\etc\\bashorgru.bcfg" \ 6E5C6574635C \ 626173686F72 \ 6772752E6263 \ 666700 \ 0000001B 00 DC8 0 Maximum stack usage in bytes: Function CSTACK -------- ------ InitConfig 4 LoadConfigData 36 Segment part sizes: Function/Label Bytes -------------- ----- LoadConfigData 248 InitConfig 44 ? 28 ? 28 Others 8 300 bytes in segment CODE 56 bytes in segment DATA_C 292 bytes of CODE memory (+ 8 bytes shared) 56 bytes of CONST memory Errors: none Warnings: none