All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Millan <rmh@aybabtu.com>
To: grub-devel@gnu.org
Subject: [PATCH] access gdtdesc on segment 0 unconditionally (Re: [PATCH] i386-qemu port)
Date: Mon, 22 Jun 2009 00:53:32 +0200	[thread overview]
Message-ID: <20090621225332.GB2360@thorin> (raw)
In-Reply-To: <20090621181748.GA21152@thorin>

[-- Attachment #1: Type: text/plain, Size: 798 bytes --]


In this line of code in real_to_prot():

	DATA32  ADDR32  lgdt    %cs:gdtdesc

GAS generates an absolute address for `gdtdesc' (not relative to segment),
and so for the code to work %cs must be zero.  In current usage of
real_to_prot(), %cs is always zero because we jump to 0x0:0x82xx early on.

However, in other situations this is not possible.  On i386-qemu, before
moving to i386 mode the code we're running is in the 0xf0000-0x100000
range, which is inaccessible from segment 0.

This patch changes this to access gdtdesc from segment 0 unconditionally.

-- 
Robert Millan

  The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
  how) you may access your data; but nobody's threatening your freedom: we
  still allow you to remove your data and not access it at all."

[-- Attachment #2: cs_in_real_to_prot.diff --]
[-- Type: text/x-diff, Size: 1092 bytes --]

2009-06-22  Robert Millan  <rmh.grub@aybabtu.com>

	* kern/i386/pc/startup.S (real_to_prot): Access `gdtdesc' using
	segment 0x0 unconditionally, because the reference generated by
	GAS is an absolute address.

Index: kern/i386/pc/startup.S
===================================================================
--- kern/i386/pc/startup.S	(revision 2353)
+++ kern/i386/pc/startup.S	(working copy)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
+ *  Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -313,13 +313,9 @@
 	cli
 
 	/* load the GDT register */
-#ifdef APPLE_CC
-	mov %cs, %ax
-	mov %ax, %ds
-	DATA32	ADDR32	lgdt	gdtdesc
-#else
-	DATA32	ADDR32	lgdt	%cs:gdtdesc
-#endif
+	xorw	%ax, %ax
+	movw	%ax, %ds
+	DATA32	ADDR32	lgdt	%ds:gdtdesc
 
 	/* turn on protected mode */
 	movl	%cr0, %eax

  parent reply	other threads:[~2009-06-21 22:53 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-21 18:17 [PATCH] i386-qemu port Robert Millan
2009-06-21 18:50 ` does module area require alignment? (Re: [PATCH] i386-qemu port) Robert Millan
2009-06-21 19:08   ` Pavel Roskin
2009-06-21 19:33     ` Robert Millan
2009-06-22 12:31       ` [PATCH] define GRUB_MOD_ALIGN to 0 on non-ieee1275 (Re: does module area require alignment? (Re: [PATCH] i386-qemu port)) Robert Millan
2009-06-22 19:43         ` Pavel Roskin
2009-06-22 20:41           ` Robert Millan
2009-06-22 20:51             ` Pavel Roskin
2009-06-22 21:22               ` Robert Millan
2009-06-22 21:45                 ` Pavel Roskin
2009-06-22 22:31                   ` Robert Millan
2009-06-22 19:51       ` does module area require alignment? (Re: [PATCH] i386-qemu port) Pavel Roskin
2009-06-22 22:50         ` Vladimir 'phcoder' Serbinenko
2009-06-23  0:10           ` Pavel Roskin
2009-06-21 18:54 ` [PATCH] move grub_stop() " Robert Millan
2009-06-21 19:05   ` Pavel Roskin
2009-06-21 19:25     ` Robert Millan
2009-06-22  2:14       ` Pavel Roskin
2009-06-22 10:10         ` Robert Millan
2009-06-22 16:16           ` Pavel Roskin
2009-06-22 18:05             ` Robert Millan
2009-06-21 19:00 ` [PATCH] i386-qemu port Pavel Roskin
2009-06-21 19:30   ` Robert Millan
2009-06-22 12:45     ` Robert Millan
2009-06-21 20:34   ` Robert Millan
2009-06-21 20:40     ` Vladimir 'phcoder' Serbinenko
2009-06-21 19:19 ` [PATCH] rename kernel.elf to kernel.img (Re: [PATCH] i386-qemu port) Robert Millan
2009-06-22  2:20   ` Pavel Roskin
2009-06-22 10:27     ` Robert Millan
2009-06-21 19:52 ` [PATCH] swap real_to_prot() and prot_to_real() " Robert Millan
2009-06-22  1:56   ` Pavel Roskin
2009-06-22 10:45     ` Robert Millan
2009-06-21 20:22 ` [PATCH] i386-qemu port Robert Millan
2009-06-22  1:50   ` Pavel Roskin
2009-06-22 10:57     ` Robert Millan
2009-06-21 22:53 ` Robert Millan [this message]
2009-06-22  1:22   ` [PATCH] access gdtdesc on segment 0 unconditionally (Re: [PATCH] i386-qemu port) Pavel Roskin
2009-06-22  9:52     ` Robert Millan
2009-06-22 19:39       ` Pavel Roskin
2009-06-22 20:52         ` Robert Millan
2009-06-22 21:32           ` Robert Millan
2009-06-22 21:44             ` Pavel Roskin
2009-06-22 22:43               ` Robert Millan
2009-06-23  0:53                 ` Pavel Roskin
2009-06-23 11:02                   ` Robert Millan
2009-06-22 21:36           ` Pavel Roskin
2009-06-22 22:52             ` Robert Millan
2009-06-22 10:26     ` about Apple compiler (Re: [PATCH] access gdtdesc on segment 0 unconditionally (Re: [PATCH] i386-qemu port)) Robert Millan
2009-06-22 16:10       ` Pavel Roskin
2009-06-22 15:02 ` [PATCH] s/GRUB_MEMORY_MACHINE_LINK_ADDR/GRUB_KERNEL_MACHINE_LINK_ADDR/g (Re: [PATCH] i386-qemu port) Robert Millan
2009-06-22 19:00   ` Pavel Roskin
2009-06-22 23:07 ` clean patch for i386-qemu port " Robert Millan
2009-06-23  1:29   ` Pavel Roskin
2009-06-23 11:38     ` Robert Millan
2009-06-23 12:13       ` Robert Millan
2009-06-24  1:00         ` Robert Millan
2009-06-24 23:10           ` [PATCH] fix for loading modules from read-only memory area (Re: clean patch for i386-qemu port (Re: [PATCH] i386-qemu port)) Robert Millan
2009-06-25 19:53             ` Pavel Roskin
2009-06-25 20:31               ` Robert Millan
2009-06-25 20:51                 ` Pavel Roskin
2009-06-26 14:41                   ` Robert Millan
2009-06-26 16:44                     ` Pavel Roskin
2009-06-26 17:03                       ` Robert Millan
2009-06-26 17:16                         ` Pavel Roskin
2009-06-26 17:43                           ` Robert Millan
2009-06-26 19:52                             ` Pavel Roskin
2009-06-26 22:26                             ` Pavel Roskin
2009-06-26 23:57                               ` Robert Millan
2009-06-27  3:08                                 ` Pavel Roskin
2009-06-27 11:18                                   ` Robert Millan
2009-06-29  3:48                                     ` Pavel Roskin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090621225332.GB2360@thorin \
    --to=rmh@aybabtu.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.