Sorry I don't see reply in time because I am not on the TO or CC list. On 08/14/2018 04:36 PM, Vladimir 'phcoder' Serbinenko wrote: > > > вт, 14 авг. 2018 г., 9:11 Cao jin <caoj.f...@cn.fujitsu.com > <mailto: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. >
Yes, I think so. > > 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 > I see. Thanks very much for your explanation, Vladimir:) -- Sincerely, Cao jin _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel