[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: questions about relocator16.S
From: |
Cao jin |
Subject: |
Re: questions about relocator16.S |
Date: |
Thu, 16 Aug 2018 10:59:42 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
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 <address@hidden
> <mailto:address@hidden>>:
>
> 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