public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2]
@ 2020-06-03 23:39 Andrew Fish
  2020-06-04  0:37 ` [edk2-devel] " Michael D Kinney
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Fish @ 2020-06-03 23:39 UTC (permalink / raw)
  To: edk2-devel-groups-io

The x86 instructions do limit then base, but the code is storing base, then limit. Does anyone remember if this is properly defined some place?

Thanks,

Andrew Fish

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2]
  2020-06-03 23:39 Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2] Andrew Fish
@ 2020-06-04  0:37 ` Michael D Kinney
  2020-06-04  0:56   ` Andrew Fish
  0 siblings, 1 reply; 5+ messages in thread
From: Michael D Kinney @ 2020-06-04  0:37 UTC (permalink / raw)
  To: devel@edk2.groups.io, afish@apple.com, Kinney, Michael D

Hi Andrew,

Are you referring to the order the fields are filled in by the C code
before the x86 instruction is executed?  I do not think that matters.  

Thanks,

Mike

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On
> Behalf Of Andrew Fish via groups.io
> Sent: Wednesday, June 3, 2020 4:39 PM
> To: edk2-devel-groups-io <devel@edk2.groups.io>
> Subject: [edk2-devel] Does anyone know the definition of
> EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
> 
> The x86 instructions do limit then base, but the code is
> storing base, then limit. Does anyone remember if this
> is properly defined some place?
> 
> Thanks,
> 
> Andrew Fish
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2]
  2020-06-04  0:37 ` [edk2-devel] " Michael D Kinney
@ 2020-06-04  0:56   ` Andrew Fish
  2020-06-04  1:43     ` Michael D Kinney
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Fish @ 2020-06-04  0:56 UTC (permalink / raw)
  To: edk2-devel-groups-io, Mike Kinney



> On Jun 3, 2020, at 5:37 PM, Michael D Kinney <michael.d.kinney@intel.com> wrote:
> 
> Hi Andrew,
> 
> Are you referring to the order the fields are filled in by the C code
> before the x86 instruction is executed?  I do not think that matters.
> 

Mike,

The instructions point to a blob of data that is not UINTN aligned. These register point to a limit then base address. If you execute the instruction you get 2 bytes of limit and 4 or 8 bytes of data. But Idtr[0] is base and Intro[1] is limit, so reversed from the instruction order. What defines index 0 vs. index 1 data contents?

Thanks,

Andrew Fish

> Thanks,
> 
> Mike
> 
>> -----Original Message-----
>> From: devel@edk2.groups.io <devel@edk2.groups.io> On
>> Behalf Of Andrew Fish via groups.io
>> Sent: Wednesday, June 3, 2020 4:39 PM
>> To: edk2-devel-groups-io <devel@edk2.groups.io>
>> Subject: [edk2-devel] Does anyone know the definition of
>> EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
>> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
>> 
>> The x86 instructions do limit then base, but the code is
>> storing base, then limit. Does anyone remember if this
>> is properly defined some place?
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2]
  2020-06-04  0:56   ` Andrew Fish
@ 2020-06-04  1:43     ` Michael D Kinney
  2020-06-04  1:47       ` Andrew Fish
  0 siblings, 1 reply; 5+ messages in thread
From: Michael D Kinney @ 2020-06-04  1:43 UTC (permalink / raw)
  To: Andrew Fish, edk2-devel-groups-io, Kinney, Michael D

Hi Andrew,

I see the following assembly that reads GDTR and IDTR from
CPU and saves them into the context structure:

;; UINT32  Gdtr[2], Idtr[2];
    sub     esp, 8
    sidt    [esp]
    mov     eax, [esp + 2]
    xchg    eax, [esp]
    and     eax, 0xFFFF
    mov     [esp+4], eax

    sub     esp, 8
    sgdt    [esp]
    mov     eax, [esp + 2]
    xchg    eax, [esp]
    and     eax, 0xFFFF
    mov     [esp+4], eax

This data structure is defined in UEFI Spec, but I do not
see a detailed description of these 2 arrays and the meaning
of each entry.  Seems like a gap in the spec description.

Mike

> -----Original Message-----
> From: Andrew Fish <afish@apple.com>
> Sent: Wednesday, June 3, 2020 5:57 PM
> To: edk2-devel-groups-io <devel@edk2.groups.io>; Kinney,
> Michael D <michael.d.kinney@intel.com>
> Subject: Re: [edk2-devel] Does anyone know the
> definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
> 
> 
> 
> > On Jun 3, 2020, at 5:37 PM, Michael D Kinney
> <michael.d.kinney@intel.com> wrote:
> >
> > Hi Andrew,
> >
> > Are you referring to the order the fields are filled
> in by the C code
> > before the x86 instruction is executed?  I do not
> think that matters.
> >
> 
> Mike,
> 
> The instructions point to a blob of data that is not
> UINTN aligned. These register point to a limit then base
> address. If you execute the instruction you get 2 bytes
> of limit and 4 or 8 bytes of data. But Idtr[0] is base
> and Intro[1] is limit, so reversed from the instruction
> order. What defines index 0 vs. index 1 data contents?
> 
> Thanks,
> 
> Andrew Fish
> 
> > Thanks,
> >
> > Mike
> >
> >> -----Original Message-----
> >> From: devel@edk2.groups.io <devel@edk2.groups.io> On
> >> Behalf Of Andrew Fish via groups.io
> >> Sent: Wednesday, June 3, 2020 4:39 PM
> >> To: edk2-devel-groups-io <devel@edk2.groups.io>
> >> Subject: [edk2-devel] Does anyone know the definition
> of
> >> EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
> >> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
> >>
> >> The x86 instructions do limit then base, but the code
> is
> >> storing base, then limit. Does anyone remember if
> this
> >> is properly defined some place?
> >>
> >> Thanks,
> >>
> >> Andrew Fish
> >>
> >
> >
> > 
> >


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2]
  2020-06-04  1:43     ` Michael D Kinney
@ 2020-06-04  1:47       ` Andrew Fish
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Fish @ 2020-06-04  1:47 UTC (permalink / raw)
  To: Mike Kinney; +Cc: edk2-devel-groups-io



> On Jun 3, 2020, at 6:43 PM, Kinney, Michael D <michael.d.kinney@intel.com> wrote:
> 
> Hi Andrew,
> 
> I see the following assembly that reads GDTR and IDTR from
> CPU and saves them into the context structure:
> 
> ;; UINT32  Gdtr[2], Idtr[2];
>    sub     esp, 8
>    sidt    [esp]
>    mov     eax, [esp + 2]
>    xchg    eax, [esp]
>    and     eax, 0xFFFF
>    mov     [esp+4], eax
> 
>    sub     esp, 8
>    sgdt    [esp]
>    mov     eax, [esp + 2]
>    xchg    eax, [esp]
>    and     eax, 0xFFFF
>    mov     [esp+4], eax
> 
> This data structure is defined in UEFI Spec, but I do not
> see a detailed description of these 2 arrays and the meaning
> of each entry.  Seems like a gap in the spec description.
> 

Mike,

Yea that is what I saw too, but I had code code doing the opposite and passing the context over did not go well. I can think of at least 3 ways ti could be mapped? Match the instruction, Base 1st, Limit 1st. 

Thanks,

Andrew Fish

> Mike
> 
>> -----Original Message-----
>> From: Andrew Fish <afish@apple.com>
>> Sent: Wednesday, June 3, 2020 5:57 PM
>> To: edk2-devel-groups-io <devel@edk2.groups.io>; Kinney,
>> Michael D <michael.d.kinney@intel.com>
>> Subject: Re: [edk2-devel] Does anyone know the
>> definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
>> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
>> 
>> 
>> 
>>> On Jun 3, 2020, at 5:37 PM, Michael D Kinney
>> <michael.d.kinney@intel.com> wrote:
>>> 
>>> Hi Andrew,
>>> 
>>> Are you referring to the order the fields are filled
>> in by the C code
>>> before the x86 instruction is executed?  I do not
>> think that matters.
>>> 
>> 
>> Mike,
>> 
>> The instructions point to a blob of data that is not
>> UINTN aligned. These register point to a limit then base
>> address. If you execute the instruction you get 2 bytes
>> of limit and 4 or 8 bytes of data. But Idtr[0] is base
>> and Intro[1] is limit, so reversed from the instruction
>> order. What defines index 0 vs. index 1 data contents?
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> Thanks,
>>> 
>>> Mike
>>> 
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On
>>>> Behalf Of Andrew Fish via groups.io
>>>> Sent: Wednesday, June 3, 2020 4:39 PM
>>>> To: edk2-devel-groups-io <devel@edk2.groups.io>
>>>> Subject: [edk2-devel] Does anyone know the definition
>> of
>>>> EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and
>>>> EFI_SYSTEM_CONTEXT_X64.Idtr[2]
>>>> 
>>>> The x86 instructions do limit then base, but the code
>> is
>>>> storing base, then limit. Does anyone remember if
>> this
>>>> is properly defined some place?
>>>> 
>>>> Thanks,
>>>> 
>>>> Andrew Fish
>>>> 
>>> 
>>> 
>>> 
>>> 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-06-04  1:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-03 23:39 Does anyone know the definition of EFI_SYSTEM_CONTEXT_X64.Gdtr[2] and EFI_SYSTEM_CONTEXT_X64.Idtr[2] Andrew Fish
2020-06-04  0:37 ` [edk2-devel] " Michael D Kinney
2020-06-04  0:56   ` Andrew Fish
2020-06-04  1:43     ` Michael D Kinney
2020-06-04  1:47       ` Andrew Fish

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox