source code like this:
-----------------------------------------------------------------------------------------------------
.section ".reset", "ax", %progbits
.code16
.globl _start
_start:
.byte 0xe9
.int _start16bit - ( . + 2 )
/* Note: The above jump is hand coded to work around bugs in binutils.
* 5 byte are used for a 3 byte instruction. This works because x86
* is little endian and allows us to use supported 32bit relocations
* instead of the weird 16 bit relocations that binutils does not
* handle consistently between versions because they are used so rarely.
*/
.previous
-----------------------------------------------------------------------------------------------------
I tried to modify the code and passed test (use qemu test).
My code like this:
-----------------------------------------------------------------------------------------------------
.section ".reset", "ax", %progbits
.code16
.globl _start
_start:
jmp _start16bit
.previous
-----------------------------------------------------------------------------------------------------
What is the meaning of hand coding? In 16-bit mode, the last two bytes are
ignored.
------------------
王翔
安全研究员
广州市腾御安信息科技有限公司
广州市天河区珠江新城华穗路406号保利克洛维二期中景A座1020-1024--
coreboot mailing list: [email protected]
https://mail.coreboot.org/mailman/listinfo/coreboot