aboutsummaryrefslogtreecommitdiff
path: root/sbin/bsdlabel/bsdlabel.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2004-03-15 23:10:34 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2004-03-15 23:10:34 +0000
commitc8785325a63257efc5e01744cac13e9c20ccd6c4 (patch)
tree0377ac8eef436c81d91f5f1ff64bd93feca52b63 /sbin/bsdlabel/bsdlabel.c
parent659dc72f992cb05a627ba6473ad73a47f639d72d (diff)
downloadsrc-c8785325a63257efc5e01744cac13e9c20ccd6c4.tar.gz
src-c8785325a63257efc5e01744cac13e9c20ccd6c4.zip
When installing boot blocks into an Alpha BSD label, setup the location,
length, and flags fields at the end of the SRM boot sector so that SRM can find the bootstrap code. This fixes bsdlabel -m alpha to generate bootable disklabels. Reviewed by: phk
Notes
Notes: svn path=/head/; revision=127044
Diffstat (limited to 'sbin/bsdlabel/bsdlabel.c')
-rw-r--r--sbin/bsdlabel/bsdlabel.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sbin/bsdlabel/bsdlabel.c b/sbin/bsdlabel/bsdlabel.c
index 094e84a38430..8ad7def65b24 100644
--- a/sbin/bsdlabel/bsdlabel.c
+++ b/sbin/bsdlabel/bsdlabel.c
@@ -327,6 +327,7 @@ readboot(void)
{
int fd, i;
struct stat st;
+ uint64_t *p;
if (xxboot == NULL)
xxboot = "/boot/boot";
@@ -338,6 +339,15 @@ readboot(void)
i = read(fd, bootarea + 512, st.st_size);
if (i != st.st_size)
err(1, "read error %s", xxboot);
+
+ /*
+ * Set the location and length so SRM can find the
+ * boot blocks.
+ */
+ p = (uint64_t *)bootarea;
+ p[60] = (st.st_size + secsize - 1) / secsize;
+ p[61] = 1;
+ p[62] = 0;
return;
} else if ((!alphacksum) && st.st_size <= BBSIZE) {
i = read(fd, bootarea, st.st_size);