diff options
Diffstat (limited to 'src/cpu/x86/16bit/reset16.inc')
-rw-r--r-- | src/cpu/x86/16bit/reset16.inc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/cpu/x86/16bit/reset16.inc b/src/cpu/x86/16bit/reset16.inc new file mode 100644 index 0000000000..d36c94085e --- /dev/null +++ b/src/cpu/x86/16bit/reset16.inc @@ -0,0 +1,21 @@ + .section ".reset" + .code16 +.globl reset_vector +reset_vector: +#if _ROMBASE >= 0xffff0000 + /* jmp _start */ + .byte 0xe9 + .int _start - ( . + 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 consistenly between versions because they are used so rarely. + */ +#else +# error _ROMBASE is an unsupported value +#endif + . = 0x8; + .code32 + jmp protected_start + .previous |