############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 09/Dec/2007 21:14:55 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\googlecode\SieTextView\bookmark.c # # Command line = D:\Pasha\elf\googlecode\SieTextView\bookmark.c -D # # NEWSGOLD -D ELKA -lC D:\Pasha\elf\googlecode\SieText # # View\Release\List\ -lA D:\Pasha\elf\googlecode\SieTe # # xtView\Release\List\ -o D:\Pasha\elf\googlecode\SieT # # extView\Release\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None -I # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\googlecode\SieTextView\Release\List\boo # # kmark.lst # # Object file = D:\Pasha\elf\googlecode\SieTextView\Release\Obj\book # # mark.r79 # # # # # ############################################################################## D:\Pasha\elf\googlecode\SieTextView\bookmark.c 1 #include "..\inc\swilib.h" 2 #include "bookmark.h" 3 /* 4 =============================== 5 ΚιΗ© 6 =============================== 7 */ \ In segment CODE, align 4, keep-with-next 8 int openBMKFile(char *filename, unsigned int *ul, int st) { \ openBMKFile: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 9 char *ext = NULL; \ 00000010 0070A0E3 MOV R7,#+0 \ 00000014 0080A0E3 MOV R8,#+0 10 char *bmk = filename; \ 00000018 000000EA B ??openBMKFile_0 11 while ((bmk = strrchr(bmk, '.'))) { 12 if (bmk != ext) ext = bmk; \ ??openBMKFile_1: \ 0000001C 0080A0E1 MOV R8,R0 \ ??openBMKFile_0: \ 00000020 2E10A0E3 MOV R1,#+46 \ 00000024 170100EF SWI +279 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 08005011 CMPNE R0,R8 \ 00000030 F9FFFF1A BNE ??openBMKFile_1 13 else break; 14 } 15 if (!ext) ext = filename; \ 00000034 000058E3 CMP R8,#+0 \ 00000038 0480A001 MOVEQ R8,R4 16 17 bmk = malloc(ext - filename + 5); \ 0000003C 048048E0 SUB R8,R8,R4 \ 00000040 050088E2 ADD R0,R8,#+5 \ 00000044 140000EF SWI +20 \ 00000048 0090A0E1 MOV R9,R0 18 strncpy(bmk, filename, ext - filename); \ 0000004C 0820A0E1 MOV R2,R8 \ 00000050 0410A0E1 MOV R1,R4 \ 00000054 160100EF SWI +278 19 bmk[ext - filename] = '\0'; 20 strcat(bmk, ".bmk"); \ 00000058 2C109FE5 LDR R1,??openBMKFile_2 ;; `?` \ 0000005C 0970C8E7 STRB R7,[R8, +R9] \ 00000060 0900A0E1 MOV R0,R9 \ 00000064 170000EF SWI +23 21 unsigned int attrib; 22 attrib = A_BIN; \ 00000068 801CA0E3 MOV R1,#+32768 23 if (st) attrib += A_ReadWrite + A_Create + A_Truncate; \ 0000006C 000056E3 CMP R6,#+0 \ 00000070 0210A013 MOVNE R1,#+2 \ 00000074 831C8113 ORRNE R1,R1,#0x8300 24 else attrib += A_ReadOnly; 25 return fopen(bmk, attrib, P_READ + P_WRITE, ul); \ 00000078 0530A0E1 MOV R3,R5 \ 0000007C 602FA0E3 MOV R2,#+384 \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 0A0000EF SWI +10 \ 00000088 F083BDE8 POP {R4-R9,PC} ;; return \ ??openBMKFile_2: \ 0000008C ........ DC32 `?` 26 } 27 \ In segment CODE, align 4, keep-with-next 28 int* readAddrInt(char *filename, int *bmkfd, unsigned int *ul, int *len, int flag) { //¶ΑΘ΅ΚιΗ© \ readAddrInt: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0080A0E1 MOV R8,R0 \ 0000000C 1C909DE5 LDR R9,[SP, #+28] \ 00000010 0250A0E1 MOV R5,R2 \ 00000014 0360A0E1 MOV R6,R3 29 *len = 0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 000086E5 STR R0,[R6, #+0] 30 int* result = malloc(BOOK_NUM); \ 00000020 6400A0E3 MOV R0,#+100 \ 00000024 140000EF SWI +20 \ 00000028 0070A0E1 MOV R7,R0 31 if (*bmkfd > 0) fclose(*bmkfd, ul); \ 0000002C 000094E5 LDR R0,[R4, #+0] \ 00000030 010050E3 CMP R0,#+1 \ 00000034 010000BA BLT ??readAddrInt_0 \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 0D0000EF SWI +13 32 *bmkfd = openBMKFile(filename, ul, 0); \ ??readAddrInt_0: \ 00000040 0020A0E3 MOV R2,#+0 \ 00000044 0510A0E1 MOV R1,R5 \ 00000048 0800A0E1 MOV R0,R8 \ 0000004C ........ BL openBMKFile \ 00000050 000084E5 STR R0,[R4, #+0] 33 34 if (*bmkfd < 0 && flag == 1) { \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0600005A BPL ??readAddrInt_1 \ 0000005C 010059E3 CMP R9,#+1 \ 00000060 3700001A BNE ??readAddrInt_2 35 *bmkfd = openBMKFile(filename, ul, 1); \ 00000064 0120A0E3 MOV R2,#+1 \ 00000068 0510A0E1 MOV R1,R5 \ 0000006C 0800A0E1 MOV R0,R8 \ 00000070 ........ BL openBMKFile \ 00000074 000084E5 STR R0,[R4, #+0] 36 } 37 38 if (*bmkfd < 0) return result; \ ??readAddrInt_1: \ 00000078 000094E5 LDR R0,[R4, #+0] \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 2F00004A BMI ??readAddrInt_2 39 char* buff = malloc(BOOK_NUM << 2); \ 00000084 640FA0E3 MOV R0,#+400 \ 00000088 140000EF SWI +20 \ 0000008C 0090A0E1 MOV R9,R0 40 int bmk = 0, offset = 0, read = 0; \ 00000090 0080A0E3 MOV R8,#+0 \ 00000094 190000EA B ??readAddrInt_3 41 while (lseek(*bmkfd, offset, S_SET, ul, ul) == offset) { 42 if ((read = fread(*bmkfd, buff, BOOK_NUM, ul)) > 0) { \ ??readAddrInt_4: \ 00000098 000094E5 LDR R0,[R4, #+0] \ 0000009C 0530A0E1 MOV R3,R5 \ 000000A0 6420A0E3 MOV R2,#+100 \ 000000A4 0910A0E1 MOV R1,R9 \ 000000A8 0B0000EF SWI +11 \ 000000AC 010050E3 CMP R0,#+1 \ 000000B0 0E0000BA BLT ??readAddrInt_5 43 for (int i = 0; i < read;) { \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 0920A0E1 MOV R2,R9 44 bmk = (buff[i + 3] << 24) | buff[i + 2] << 16 | buff[i + 1] << 8 | buff[i]; 45 result[i >> 2] = bmk; \ ??readAddrInt_6: \ 000000BC 03C0D2E5 LDRB R12,[R2, #+3] \ 000000C0 02E0D2E5 LDRB LR,[R2, #+2] \ 000000C4 4131A0E1 ASR R3,R1,#+2 46 i += 4; \ 000000C8 041081E2 ADD R1,R1,#+4 \ 000000CC 0EE8A0E1 LSL LR,LR,#+16 \ 000000D0 0CCC8EE1 ORR R12,LR,R12, LSL #+24 \ 000000D4 01E0D2E5 LDRB LR,[R2, #+1] 47 } \ 000000D8 000051E1 CMP R1,R0 \ 000000DC 0EC48CE1 ORR R12,R12,LR, LSL #+8 \ 000000E0 ........ LDRB LR,[R2], #+4 \ 000000E4 0CC08EE1 ORR R12,LR,R12 \ 000000E8 03C187E7 STR R12,[R7, +R3, LSL #+2] \ 000000EC F2FFFFBA BLT ??readAddrInt_6 48 } 49 offset += (BOOK_NUM << 2); 50 *len += (read >> 2); \ ??readAddrInt_5: \ 000000F0 001096E5 LDR R1,[R6, #+0] \ 000000F4 648F88E2 ADD R8,R8,#+400 \ 000000F8 400181E0 ADD R0,R1,R0, ASR #+2 \ 000000FC 000086E5 STR R0,[R6, #+0] 51 } \ ??readAddrInt_3: \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 01002DE9 PUSH {R0} \ 00000108 000094E5 LDR R0,[R4, #+0] \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 0020A0E3 MOV R2,#+0 \ 00000114 0810A0E1 MOV R1,R8 \ 00000118 0F0000EF SWI +15 \ 0000011C 080050E1 CMP R0,R8 \ 00000120 04D08DE2 ADD SP,SP,#+4 \ 00000124 DBFFFF0A BEQ ??readAddrInt_4 52 mfree(buff); \ 00000128 0900A0E1 MOV R0,R9 \ 0000012C 150000EF SWI +21 53 fclose(*bmkfd, ul); \ 00000130 000094E5 LDR R0,[R4, #+0] \ 00000134 0510A0E1 MOV R1,R5 \ 00000138 0D0000EF SWI +13 54 *bmkfd = -1; \ 0000013C 0000E0E3 MVN R0,#+0 \ 00000140 000084E5 STR R0,[R4, #+0] 55 return result; \ ??readAddrInt_2: \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 F083BDE8 POP {R4-R9,PC} ;; return 56 } 57 \ In segment CODE, align 4, keep-with-next 58 int writeAddrInt(char *filename, int *bmkfd, unsigned int *ul, int *bmk, int len, int flag) { \ writeAddrInt: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 1C709DE5 LDR R7,[SP, #+28] \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 20109DE5 LDR R1,[SP, #+32] \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 0340A0E1 MOV R4,R3 59 if (flag == 2) return 0; \ 00000018 020051E3 CMP R1,#+2 \ 0000001C 0900000A BEQ ??writeAddrInt_0 60 if (*bmkfd <= 0) *bmkfd = openBMKFile(filename, ul, 1); \ 00000020 001095E5 LDR R1,[R5, #+0] \ 00000024 010051E3 CMP R1,#+1 \ 00000028 030000AA BGE ??writeAddrInt_1 \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 ........ BL openBMKFile \ 00000038 000085E5 STR R0,[R5, #+0] 61 if (*bmkfd <= 0) return 0; \ ??writeAddrInt_1: \ 0000003C 000095E5 LDR R0,[R5, #+0] \ 00000040 010050E3 CMP R0,#+1 \ 00000044 010000AA BGE ??writeAddrInt_2 \ ??writeAddrInt_0: \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C F083BDE8 POP {R4-R9,PC} 62 int bufflen = len << 2; \ ??writeAddrInt_2: \ 00000050 0781A0E1 LSL R8,R7,#+2 63 char* buff = malloc(bufflen); \ 00000054 0800A0E1 MOV R0,R8 \ 00000058 140000EF SWI +20 \ 0000005C 0090A0E1 MOV R9,R0 64 int j = 0; \ 00000060 0000A0E3 MOV R0,#+0 65 for (int i = 0; i < bufflen;) { \ 00000064 0010A0E3 MOV R1,#+0 \ 00000068 010058E3 CMP R8,#+1 \ 0000006C 110000BA BLT ??writeAddrInt_3 \ 00000070 0920A0E1 MOV R2,R9 66 if (j < len) { \ ??writeAddrInt_4: \ 00000074 070050E1 CMP R0,R7 \ 00000078 0E0000AA BGE ??writeAddrInt_3 67 buff[i++] = (char) (bmk[j] & 0xff); \ 0000007C 003094E5 LDR R3,[R4, #+0] 68 buff[i++] = (char) ((bmk[j] >> 8) & 0xff); 69 buff[i++] = (char) ((bmk[j] >> 16) & 0xff); 70 buff[i++] = (char) ((bmk[j++] >> 24) & 0xff); \ 00000080 010080E2 ADD R0,R0,#+1 \ 00000084 ........ STRB R3,[R2], #+1 \ 00000088 003094E5 LDR R3,[R4, #+0] \ 0000008C 041081E2 ADD R1,R1,#+4 \ 00000090 4334A0E1 ASR R3,R3,#+8 \ 00000094 ........ STRB R3,[R2], #+1 \ 00000098 003094E5 LDR R3,[R4, #+0] 71 } 72 else 73 break; 74 } \ 0000009C 080051E1 CMP R1,R8 \ 000000A0 4338A0E1 ASR R3,R3,#+16 \ 000000A4 ........ STRB R3,[R2], #+1 \ 000000A8 ........ LDR R3,[R4], #+4 \ 000000AC 433CA0E1 ASR R3,R3,#+24 \ 000000B0 ........ STRB R3,[R2], #+1 \ 000000B4 EEFFFFBA BLT ??writeAddrInt_4 75 lseek(*bmkfd, 0, S_SET, ul, ul); \ ??writeAddrInt_3: \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 0630A0E1 MOV R3,R6 \ 000000C4 0020A0E3 MOV R2,#+0 \ 000000C8 000095E5 LDR R0,[R5, #+0] \ 000000CC 0010A0E3 MOV R1,#+0 \ 000000D0 0F0000EF SWI +15 76 77 if (fwrite(*bmkfd, buff, bufflen, ul)) { \ 000000D4 000095E5 LDR R0,[R5, #+0] \ 000000D8 0630A0E1 MOV R3,R6 \ 000000DC 0820A0E1 MOV R2,R8 \ 000000E0 0910A0E1 MOV R1,R9 \ 000000E4 0C0000EF SWI +12 \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 04D08DE2 ADD SP,SP,#+4 \ 000000F0 0900A0E1 MOV R0,R9 \ 000000F4 0200000A BEQ ??writeAddrInt_5 78 mfree(buff); \ 000000F8 150000EF SWI +21 79 return 1; \ 000000FC 0100A0E3 MOV R0,#+1 \ 00000100 F083BDE8 POP {R4-R9,PC} 80 } 81 mfree(buff); \ ??writeAddrInt_5: \ 00000104 150000EF SWI +21 82 return 0; \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C F083BDE8 POP {R4-R9,PC} 83 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2E626D6B00 DC8 ".bmk" \ 00000005 000000 DC8 0, 0, 0 84 /* 85 =============================== 86 end 87 =============================== 88 */ Maximum stack usage in bytes: Function CSTACK -------- ------ openBMKFile 28 readAddrInt 32 writeAddrInt 32 Segment part sizes: Function/Label Bytes -------------- ----- openBMKFile 144 readAddrInt 332 writeAddrInt 272 ? 8 Others 12 760 bytes in segment CODE 8 bytes in segment DATA_C 748 bytes of CODE memory (+ 12 bytes shared) 8 bytes of CONST memory Errors: none Warnings: none