[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch
From: |
Thomas Schwinge |
Subject: |
Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch] |
Date: |
Sun, 5 Nov 2006 22:34:56 +0100 |
User-agent: |
Mutt/1.5.6+20040907i |
Hello!
> CVSROOT: /cvsroot/hurd
> Module name: gnumach
> Branch: gnumach-1-branch
> Changes by: Samuel Thibault <sthibaul> 06/11/05 20:39:25
>
> [...]
> 2006-11-05 Barry deFreese <bddebian@comcast.net>
>
> [task #5878 --- ``Backport code from GNU Mach's trunk to
> gnumach-1-branch: i386_set_gdt, i386_get_gdt'']
>
> [...]
> * i386/i386/user_ldt.c (i386_set_gdt, i386_get_gdt): New
> functions.
Since this is a back-port from OSKit Mach's code, it might be interesting
to explain the following divergences from the OSKit code --- perhaps
Roland would like to have these changes explained, as he's written the
original code, if I recall correctly:
#v+
@@ -221,16 +223,16 @@ i386_set_ldt(thread, first_selector, des
[...]
- else if (thread == current_thread()) {
- struct x86_desc template = {0, 0, 0, ACC_P, 0, 0 ,0};
+ else {
+ struct real_descriptor template = {0, 0, 0, ACC_P, 0, 0 ,0};
#v-
The following differences might be caused simply by the OSKit Mach code
being different from the GNU Mach one, but you can confirm that more
easily than I could do right now.
#v+
@@ -411,46 +413,45 @@ i386_set_gdt (thread_t thread, int *sele
if (*selector == -1)
{
- for (idx = sel_idx (USER_GDT); idx < sel_idx (USER_GDT) + USER_GDT_SLOTS;
- ++idx)
+ for (idx = 0; idx < USER_GDT_SLOTS; ++idx)
if ((thread->pcb->ims.user_gdt[idx].access & ACC_P) == 0)
{
- *selector = (idx << 3) | SEL_PL_U;
+ *selector = ((idx + sel_idx(USER_GDT)) << 3) | SEL_PL_U;
break;
}
- if (idx == sel_idx (USER_GDT) + USER_GDT_SLOTS)
+ if (idx == USER_GDT_SLOTS)
return KERN_NO_SPACE; /* ? */
}
else if ((*selector & (SEL_LDT|SEL_PL)) != SEL_PL_U
- || sel_idx (*selector) < USER_GDT
- || sel_idx (*selector) >= USER_GDT + USER_GDT_SLOTS)
+ || sel_idx (*selector) < sel_idx(USER_GDT)
+ || sel_idx (*selector) >= sel_idx(USER_GDT) + USER_GDT_SLOTS)
return KERN_INVALID_ARGUMENT;
else
- idx = sel_idx (*selector);
+ idx = sel_idx (*selector) - sel_idx(USER_GDT);
- if ((desc->access & ACC_P) == 0)
+ if ((desc.access & ACC_P) == 0)
memset (&thread->pcb->ims.user_gdt[idx], 0,
sizeof thread->pcb->ims.user_gdt[idx]);
- else if ((desc->access & (ACC_TYPE|ACC_PL)) != (ACC_TYPE_USER|ACC_PL_U))
+ else if ((desc.access & (ACC_TYPE_USER|ACC_PL)) != (ACC_TYPE_USER|ACC_PL_U))
return KERN_INVALID_ARGUMENT;
else
- thread->pcb->ims.user_gdt[idx] = *desc;
+ thread->pcb->ims.user_gdt[idx] = desc;
return KERN_SUCCESS;
}
[...]
[i386_get_gdt]
if ((selector & (SEL_LDT|SEL_PL)) != SEL_PL_U
- || sel_idx (selector) < USER_GDT
- || sel_idx (selector) >= USER_GDT + USER_GDT_SLOTS)
+ || sel_idx (selector) < sel_idx(USER_GDT)
+ || sel_idx (selector) >= sel_idx(USER_GDT) + USER_GDT_SLOTS)
return KERN_INVALID_ARGUMENT;
- *desc = thread->pcb->ims.user_gdt[sel_idx (selector)];
+ *desc = thread->pcb->ims.user_gdt[sel_idx (selector) - sel_idx(USER_GDT)];
#v-
Please also add a note to the ChangeLog that this commit is a back-port,
see the Roland McGrath ChangeLog entry from 2006-05-14 for an idea how
this might look like.
> * linux/dev/include/linux/head.h: New file.
Please move that file to `linux/src/include/linux/head.h' (and then add a
proper ChangeLog entry for that file). I'm not going to follow the `src'
vs. `dev' distinction any further.
Thanks for completing this task!
Regards,
Thomas
signature.asc
Description: Digital signature
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch],
Thomas Schwinge <=
- Test suite for GNU Mach (was: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch]), Thomas Schwinge, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Roland McGrath, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Samuel Thibault, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Samuel Thibault, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Thomas Schwinge, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Roland McGrath, 2006/11/05
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Jeroen Dekkers, 2006/11/06
- Re: gnumach ChangeLog i386/i386/gdt.h i386/i386/pcb... [gnumach-1-branch], Roland McGrath, 2006/11/06