[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