lt;kernelnewbies@kernelnewbies.org>;
Subject: Re: A question about decompressing kernel on boot
leaq(_bss-8)(%rip), %rsi
leaq(_bss-8)(%rbx), %rdi
movq$_bss /* - $startup_32 */, %rcx
shrq$3, %rcx
std
rep movsq
leaq (_bss-8)(%rip), %rsi
leaq (_bss-8)(%rbx), %rdi
movq $_bss /* - $startup_32 */, %rcx
shrq $3, %rcx
std
rep movsq
cld
The movsq instruction copys 8 bytes each time and for the first time it will copy [_bss-8, _bss) to the new location. If we don't minus 8, the data in [_bss,
Hi list,
In the source code arch/x86/boot/compressed/head_64.S, it described
how compressed kernel is copied from the origin place to another pointed by rbx
register.
But I'm confused about the copying code, why it needs to minus 8 from _bss when
calculating
_bss original and new addresses.