<br />#ifndef CONFIG_ZBOOT_ROM<br /><br /> add r2, r2, r0<br /> add r3, r3, r0<br /> add sp, sp, r0<br /><br /> /*<br /> * Relocate all entries in the GOT table.<br /> */<br />1: ldr r1, [r6, #0] @ relocate entries in the GOT<br /> add r1, r1, r0 @ table. This fixes up the<br /> str r1, [r6], #4 @ C references.<br /> cmp r6, ip<br /> blo 1b<br />#else<br /><br /><br />1: ldr r1, [r6, #0] @ relocate entries in the GOT<br /> cmp r1, r2 @ entry <bss_start ||<br /> cmphs r3, r1 @ _end < entry<br /> addlo r1, r1, r0 @ table. This fixes up the<br /> str r1, [r6], #4 @ C references.<br /> cmp r6, ip<br /> blo 1b<br />#endif<br /><br />not_relocated: mov r0, #0<br />1: str r0, [r2], #4 @ clear bss<br /> str r0, [r2], #4<br /> str r0, [r2], #4<br /> str r0, [r2], #4<br /> cmp r2, r3<br /> blo 1b<br /><br /> <br /><br /> mov r1, sp @ malloc space above stack<br /> add r2, sp, #0x10000 @ 64k max<br /><br /><br /> cmp r4, r2<br /> bhs wont_overwrite<br /> add r0, r4, #4096*1024 @ 4MB largest kernel size<br /> cmp r0, r5<br /> bls wont_overwrite<br /><br /> mov r5, r2 @ decompress after malloc space<br /> mov r0, r5<br /> mov r3, r7<br /> bl decompress_kernel<br /><br /><br /><br />bhs、bls、blo、cmphs <br />根据程序来看bhs是大于跳转,bls是小于跳转,blo是不相等跳转,但是S3C44B0UsersManaual.pdf 和 DUI0068B_ADS1_2_Assembler.pdf都没提到过,指令也没有hs、ls、lo这样的suffix,难道是linux编译器特有的? |
|