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