summaryrefslogtreecommitdiffstats
path: root/sys/boot/i386/boot2
diff options
context:
space:
mode:
authorrdivacky <rdivacky@FreeBSD.org>2011-03-10 16:40:13 +0000
committerrdivacky <rdivacky@FreeBSD.org>2011-03-10 16:40:13 +0000
commitf386257f6a9da229057eea15494e3cd20b4eb0c9 (patch)
tree45a6a718681a5485c22d795ec2f71d1f846f06da /sys/boot/i386/boot2
parentf26cdc3b9a6fd78a30cf5b1c23d3c8e4754e2ade (diff)
downloadFreeBSD-src-f386257f6a9da229057eea15494e3cd20b4eb0c9.zip
FreeBSD-src-f386257f6a9da229057eea15494e3cd20b4eb0c9.tar.gz
Some more shrinking.
o bunch of variables are turned into uint8_t o initial setting of namep[] in lookup() is removed as it's only overwritten a few lines down o kname is explicitly initialized in main() as BSS in boot2 is not zeroed o the setting and reading of "fmt" in load() is removed o buf in printf() is made static to save space Reviewed by: jhb Tested by: me and Fabian Keil <freebsd-listen fabiankeil de>
Diffstat (limited to 'sys/boot/i386/boot2')
-rw-r--r--sys/boot/i386/boot2/boot2.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/sys/boot/i386/boot2/boot2.c b/sys/boot/i386/boot2/boot2.c
index 5540dbe..6300545 100644
--- a/sys/boot/i386/boot2/boot2.c
+++ b/sys/boot/i386/boot2/boot2.c
@@ -125,17 +125,17 @@ static struct dsk {
unsigned drive;
unsigned type;
unsigned unit;
- unsigned slice;
- unsigned part;
+ uint8_t slice;
+ uint8_t part;
unsigned start;
int init;
} dsk;
static char cmd[512], cmddup[512];
-static const char *kname = NULL;
+static const char *kname;
static uint32_t opts;
static int comspeed = SIOSPD;
static struct bootinfo bootinfo;
-static unsigned ioctrl = IO_KEYBOARD;
+static uint8_t ioctrl = IO_KEYBOARD;
void exit(int);
static void load(void);
@@ -226,6 +226,7 @@ main(void)
uint8_t autoboot;
ino_t ino;
+ kname = NULL;
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
v86.ctl = V86_FLAGS;
v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
@@ -306,9 +307,8 @@ load(void)
static Elf32_Shdr es[2];
caddr_t p;
ino_t ino;
- uint32_t addr, x;
+ uint32_t addr;
int i, j;
- uint8_t fmt;
if (!(ino = lookup(kname))) {
if (!ls)
@@ -317,15 +317,8 @@ load(void)
}
if (xfsread(ino, &hdr, sizeof(hdr)))
return;
- if (N_GETMAGIC(hdr.ex) == ZMAGIC)
- fmt = 0;
- else if (IS_ELF(hdr.eh))
- fmt = 1;
- else {
- printf("Invalid %s\n", "format");
- return;
- }
- if (fmt == 0) {
+
+ if (N_GETMAGIC(hdr.ex) == ZMAGIC) {
addr = hdr.ex.a_entry & 0xffffff;
p = PTOV(addr);
fs_off = PAGE_SIZE;
@@ -334,7 +327,7 @@ load(void)
p += roundup2(hdr.ex.a_text, PAGE_SIZE);
if (xfsread(ino, p, hdr.ex.a_data))
return;
- } else {
+ } else if (IS_ELF(hdr.eh)) {
fs_off = hdr.eh.e_phoff;
for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
if (xfsread(ino, ep + j, sizeof(ep[0])))
@@ -366,7 +359,11 @@ load(void)
}
addr = hdr.eh.e_entry & 0xffffff;
bootinfo.bi_esymtab = VTOP(p);
+ } else {
+ printf("Invalid %s\n", "format");
+ return;
}
+
bootinfo.bi_kernelname = VTOP(kname);
bootinfo.bi_bios_dev = dsk.drive;
__exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
@@ -474,7 +471,8 @@ dskread(void *buf, unsigned lba, unsigned nblk)
struct dos_partition *dp;
struct disklabel *d;
char *sec;
- unsigned sl, i;
+ unsigned i;
+ uint8_t sl;
if (!dsk_meta) {
sec = dmadat->secbuf;
@@ -534,7 +532,7 @@ static void
printf(const char *fmt,...)
{
va_list ap;
- char buf[10];
+ static char buf[10];
char *s;
unsigned u;
int c;
OpenPOWER on IntegriCloud