<div style="  ; ; ;; ">Hi list,</div><div style="  ; ; ;; "></div><div style="  ; ; ;; "><br></div><div style="  ; ; ;; ">In the source code arch/x86/boot/compressed/head_64.S, it described</div><div style="  ; ; ;; ">how compressed kernel is copied from the origin place to another pointed by rbx register.</div><div style="  ; ; ;; "><br></div><div style="  ; ; ;; ">But I'm confused about the copying code, why it needs to minus 8 from _bss when calculating</div><div style="  ; ; ;; ">_bss original and new addresses.</div><div style="  ; ; ;; "><br></div><div style="  ; ; ;; ">This is the source code.</div><div style="  ; ; ;; ">/*</div><div style="  ; ; ;; "> * Copy the compressed kernel to the end of our buffer</div><div style="  ; ; ;; "> * where decompression in place becomes safe.</div><div style="  ; ; ;; "> */</div><div style="  ; ; ;; "><span style="white-space: pre;">   </span>pushq<span style="white-space: pre;">      </span>%rsi</div><div style="  ; ; ;; "><span style="white-space: pre;">    </span>leaq<span style="white-space: pre;">       </span>(_bss-8)(%rip), %rsi</div><div style="  ; ; ;; "><span style="white-space: pre;">    </span>leaq<span style="white-space: pre;">       </span>(_bss-8)(%rbx), %rdi</div><div style="  ; ; ;; "><span style="white-space: pre;">    </span>movq<span style="white-space: pre;">       </span>$_bss /* - $startup_32 */, %rcx</div><div style="  ; ; ;; "><span style="white-space: pre;"> </span>shrq<span style="white-space: pre;">       </span>$3, %rcx</div><div style="  ; ; ;; "><span style="white-space: pre;">        </span>std</div><div style="  ; ; ;; "><span style="white-space: pre;">     </span>rep<span style="white-space: pre;">        </span>movsq</div><div style="  ; ; ;; "><span style="white-space: pre;">   </span>cld</div><div style="  ; ; ;; "><span style="white-space: pre;">     </span>popq<span style="white-space: pre;">       </span>%rsi</div><div style="  ; ; ;; "><br></div><div style="  ; ; ;; ">Thanks,</div><div style="  ; ; ;; ">Larry<br></div>