[syslinux:master] chain.c32: pass partition number to stage2 of Grub Legacy

syslinux-bot for Gert Hulselmans gerth at zytor.com
Sun Jun 27 18:54:12 PDT 2010


Commit-ID:  8c3bfcedff660798039129e66c29a440c7b5a464
Gitweb:     http://syslinux.zytor.com/commit/8c3bfcedff660798039129e66c29a440c7b5a464
Author:     Gert Hulselmans <gerth at zytor.com>
AuthorDate: Mon, 28 Jun 2010 03:11:48 +0200
Committer:  Shao Miller <shao.miller at yrdsb.edu.on.ca>
CommitDate: Sun, 27 Jun 2010 18:25:44 -0700

chain.c32: pass partition number to stage2 of Grub Legacy

Grub Legacy stage2 will read the install_partition variable from
memory address 0x8208.
We only need to change the value at 0x820a to the correct partition
number:
  -1:   whole drive (default)
  0-3:  primary partitions
  4-*:  logical partitions

Signed-off-by: Gert Hulselmans <gerth at zytor.com>


---
 com32/modules/chain.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/com32/modules/chain.c b/com32/modules/chain.c
index a76d275..4f5baf1 100644
--- a/com32/modules/chain.c
+++ b/com32/modules/chain.c
@@ -123,11 +123,11 @@ static struct options {
     uint16_t seg;
     bool isolinux;
     bool cmldr;
+    bool grub;
     bool grldr;
     bool swap;
     bool hide;
     bool sethidden;
-    bool grub;
 } opt;
 
 struct data_area {
@@ -1585,10 +1585,13 @@ int main(int argc, char *argv[])
 	if (opt.grub) {
 	    regs.ip = 0x200;	/* jump 0x200 bytes into the loadfile */
 
-	    /* 0xffffff00 seems to be GRUB ways to record that it's
-	       "root" is the whole disk (and not a partition). */
-	    *(uint32_t *) ((unsigned char *)data[ndata].data + 0x208) =
-		0xffffff00ul;
+	    /* GRUB's stage2 wants the partition number in the install_partition
+	     * variable, located at memory address 0x8208.
+	     * We only need to change the value of memory address 0x820a too:
+	     *   -1:   whole drive (default)
+	     *   0-3:  primary partitions
+	     *   4-*:  logical partitions */
+	    ((uint8_t*) data[ndata].data)[0x20a] = (uint8_t)(whichpart - 1);
 	}
 
 	ndata++;



More information about the Syslinux-commits mailing list