вт, 14 авг. 2018 г., 9:11 Cao jin <caoj.f...@cn.fujitsu.com>:

> Hi,
>
>   I am learning these code, and now have 2 questions:
>
> 1. at the bottom of relocator_common.S, there is:
>
> LOCAL(jump_vector):
>         /* Jump location. Is filled by the code */
>         .long   0
>         .long   CODE_SEGMENT
>
> Since it is offset & segment selector value, why is not ".word
> CODE_SEGMENT", is there any subtle difference?
>
i386 is little endian, so effectively it just reserves 2 bytes more and
fills them with zeros.

>
> 2. in relocator16.S, after "RELOAD_GDT", the other segment registers are
> updated two times with DATA_SEGMENT & PSEUDO_REAL_DSEG, they are pretty
> close, there is no memory read/write between them, so why we need the
> updates with DATA_SEGMENT?
>
It's derived from older code that may have had accesses there. But it was
tested on many CPUs and changing it risks triggering obscure bug in an
obscure CPU

>
> --
> Sincerely,
> Cao jin
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to