On Thu, Dec 3, 2015 at 9:08 AM, Barret Rhoden <[email protected]> wrote:

>  .text
>  _alltraps:
>         cld
> -       swapgs                  # harmless if we were already in the kernel
>         pushq %r15
>         pushq %r14
>         pushq %r13
> @@ -367,32 +366,14 @@ _alltraps:
>         pushq %rbx
>         pushq %rax
>         cmpw $GD_KT, 0x90(%rsp) # 0x90 - diff btw tf_cs and tf_rax
>

Look at what Linux does for those magic offsets. They are auto-generated
from proper C structs.
This have the twofold advantage that changes to structure do not cause ASM
breakages, and they also have nice names, WRT magic numbers.


+       je trap_all_tf
> +       # this is a user TF.  we need to swapgs to get the kernel's gs and
> mark the
> +       # context as partial
> +       swapgs                                  # user's GS is now in
> MSR_KERNEL_GS_BASE
> +       movl $0x1, 0xac(%rsp)   # 0xac - diff btw tf_padding0 and tf_rax
>

Ditto.


@@ -436,32 +416,14 @@ _allirqs:
>         pushq %rbx
>         pushq %rax
>         cmpw $GD_KT, 0x90(%rsp) # 0x90 - diff btw tf_cs and tf_rax
>

Ditto.


+       # this is a user TF.  we need to swapgs to get the kernel's gs and
> mark the
> +       # context as partial
> +       swapgs                                  # user's GS is now in
> MSR_KERNEL_GS_BASE
> +       movl $0x1, 0xac(%rsp)   # 0xac - diff btw tf_padding0 and tf_rax
>

Ditto.


        # cld is handled by the SFMASK
> -       swapgs
> +       swapgs                                  # user's GS is now in
> MSR_KERNEL_GS_BASE
>         movq %gs:0, %rsp
>

Ditto.



>         # Saving the FPU callee-saved state for now.  Might be able to
> have the
>         # preempt handler deal with it.
> -       pushq $0                        # space for mxcsr and fpucw
> +       pushq $0                                # space for mxcsr, fpucw,
> and padding0
> +       movw $0x1, 0x6(%rsp)    # tf_padding0 = 1, partial context
>

Ditto.

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to