patch-2.4.21 linux-2.4.21/arch/x86_64/ia32/ia32_binfmt.c
Next file: linux-2.4.21/arch/x86_64/ia32/ia32_ioctl.c
Previous file: linux-2.4.21/arch/x86_64/ia32/fpu32.c
Back to the patch index
Back to the overall index
- Lines: 46
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/arch/x86_64/ia32/ia32_binfmt.c
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/arch/x86_64/ia32/ia32_binfmt.c linux-2.4.21/arch/x86_64/ia32/ia32_binfmt.c
@@ -25,7 +25,9 @@
#define IA32_EMULATOR 1
-#define IA32_PAGE_OFFSET 0xFFFFF000
+#define ELF_NAME "elf/i386"
+
+#define IA32_PAGE_OFFSET 0xFFFFe000
#define IA32_STACK_TOP IA32_PAGE_OFFSET
#define ELF_ET_DYN_BASE (IA32_PAGE_OFFSET/3 + 0x1000000)
@@ -163,11 +165,13 @@
#define ELF_PLAT_INIT(r) elf32_init(r)
#define setup_arg_pages(bprm) ia32_setup_arg_pages(bprm)
+extern void load_gs_index(unsigned);
+
#undef start_thread
#define start_thread(regs,new_rip,new_rsp) do { \
- __asm__("movl %0,%%fs": :"r" (0)); \
- __asm__("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS)); \
- wrmsrl(MSR_KERNEL_GS_BASE, 0); \
+ asm volatile("movl %0,%%fs": :"r" (0)); \
+ load_gs_index(0); \
+ asm volatile("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS)); \
(regs)->rip = (new_rip); \
(regs)->rsp = (new_rsp); \
(regs)->eflags = 0x200; \
@@ -203,6 +207,8 @@
regs->rax = 0;
regs->rbx = 0;
regs->rbp = 0;
+ regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 = regs->r13 =
+ regs->r14 = regs->r15 = 0;
me->thread.fs = 0;
me->thread.gs = 0;
me->thread.fsindex = 0;
@@ -237,7 +243,7 @@
mpnt->vm_mm = current->mm;
mpnt->vm_start = PAGE_MASK & (unsigned long) bprm->p;
mpnt->vm_end = IA32_STACK_TOP;
- mpnt->vm_page_prot = PAGE_COPY;
+ mpnt->vm_page_prot = PAGE_COPY_EXEC;
mpnt->vm_flags = VM_STACK_FLAGS;
mpnt->vm_ops = NULL;
mpnt->vm_pgoff = 0;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)