svn commit: r218745 - head/sys/boot/i386/boot2

Roman Divacky rdivacky at freebsd.org
Thu Feb 17 08:28:20 UTC 2011


I have some more WIP patches that shrink stuff some more,
plus I have clang/llvm changes that help too.. this will
get fixed

On Thu, Feb 17, 2011 at 01:52:11AM +0000, Alexander Best wrote:
> On Wed Feb 16 11, Warner Losh wrote:
> > Author: imp
> > Date: Wed Feb 16 18:05:10 2011
> > New Revision: 218745
> > URL: http://svn.freebsd.org/changeset/base/218745
> > 
> > Log:
> >   Remove reading of symbols from a.out loaded files.  Since we are tight
> >   on space for clang and a.out support is only needed for /boot/loader,
> >   they are excess bytes that serve no useful purpose other than to
> >   support really old kernels (FreeBSD < 3.2 or so).  Prefer clang
> >   support over support for these old kernels and remove this code.  We
> >   gain about 100 bytes of space this way.
> 
> sorry for my crappy previous attempt to reduce boot2's size. obviously
> the *.S files aren't the problem, because even with clang we're using GAS.
> so working on boot2.c is the only way of reducing the size.
> 
> i've managed to do so (even with another 4 bytes to spare) with the attached
> patch.
> 
> i did
> 
> otaku% grep -r bi_basemem *
> sys/boot/i386/boot2/boot2.c:    bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
> sys/boot/i386/boot2/machine/bootinfo.h:	u_int32_t	bi_basemem;
> sys/boot/i386/gptboot/gptboot.c:	bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
> sys/boot/i386/libi386/bootinfo32.c:    bi.bi_basemem = bios_basemem / 1024;
> sys/boot/i386/loader/main.c:	initial_bootinfo->bi_basemem = bios_basemem / 1024;
> sys/boot/i386/zfsboot/zfsboot.c:    bootinfo.bi_basemem = bios_basemem / 1024;
> sys/boot/pc98/boot2/boot2.c:    bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
> sys/boot/pc98/loader/main.c:	initial_bootinfo->bi_basemem = bios_basemem / 1024;
> sys/i386/include/bootinfo.h:	u_int32_t	bi_basemem;
> sys/mips/include/bootinfo.h:	u_int32_t	bi_basemem;
> 
> which led me to the conclusion that bootinfo.bi_basemem doesn't need to
> initialised, because it will always be set by the loader (as the XXX comment
> says).
> 
> turning ioctrl from uint8_t to int also saves a few bytes for whatever reason).
> removing x doesn't save any bytes, but gets rid of a warning (as noted in one
> of my messages).
> 
> cheers.
> alex
> 
> ...and sorry for the previous noise. :(
> 
> >   
> >   Reviewed by:	rdivacky@
> > 
> > Modified:
> >   head/sys/boot/i386/boot2/boot2.c
> > 
> > Modified: head/sys/boot/i386/boot2/boot2.c
> > ==============================================================================
> > --- head/sys/boot/i386/boot2/boot2.c	Wed Feb 16 17:50:21 2011	(r218744)
> > +++ head/sys/boot/i386/boot2/boot2.c	Wed Feb 16 18:05:10 2011	(r218745)
> > @@ -347,23 +347,6 @@ load(void)
> >  	p += roundup2(hdr.ex.a_text, PAGE_SIZE);
> >  	if (xfsread(ino, p, hdr.ex.a_data))
> >  	    return;
> > -	p += hdr.ex.a_data + roundup2(hdr.ex.a_bss, PAGE_SIZE);
> > -	bootinfo.bi_symtab = VTOP(p);
> > -	*(uint32_t*)p = hdr.ex.a_syms;
> > -	p += sizeof(hdr.ex.a_syms);
> > -	if (hdr.ex.a_syms) {
> > -	    if (xfsread(ino, p, hdr.ex.a_syms))
> > -		return;
> > -	    p += hdr.ex.a_syms;
> > -	    if (xfsread(ino, p, sizeof(int)))
> > -		return;
> > -	    x = *(uint32_t *)p;
> > -	    p += sizeof(int);
> > -	    x -= sizeof(int);
> > -	    if (xfsread(ino, p, x))
> > -		return;
> > -	    p += x;
> > -	}
> >      } else {
> >  	fs_off = hdr.eh.e_phoff;
> >  	for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
> > @@ -395,8 +378,8 @@ load(void)
> >  	    }
> >  	}
> >  	addr = hdr.eh.e_entry & 0xffffff;
> > +	bootinfo.bi_esymtab = VTOP(p);
> >      }
> > -    bootinfo.bi_esymtab = VTOP(p);
> >      bootinfo.bi_kernelname = VTOP(kname);
> >      bootinfo.bi_bios_dev = dsk.drive;
> >      __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
> 
> -- 
> a13x

> diff --git a/sys/boot/i386/boot2/boot2.c b/sys/boot/i386/boot2/boot2.c
> index 3849725..d572700 100644
> --- a/sys/boot/i386/boot2/boot2.c
> +++ b/sys/boot/i386/boot2/boot2.c
> @@ -135,7 +135,7 @@ static char kname[1024];
>  static uint16_t opts;
>  static int comspeed = SIOSPD;
>  static struct bootinfo bootinfo;
> -static uint8_t ioctrl = IO_KEYBOARD;
> +static int ioctrl = IO_KEYBOARD;
>  
>  void exit(int);
>  static void load(void);
> @@ -245,7 +245,7 @@ main(void)
>      dsk.slice = *(uint8_t *)PTOV(ARGS + 1) + 1;
>      bootinfo.bi_version = BOOTINFO_VERSION;
>      bootinfo.bi_size = sizeof(bootinfo);
> -    bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
> +    /* bootinfo.bi_basemem = 0;	XXX will be filled by loader or kernel */
>      bootinfo.bi_extmem = memsize();
>      bootinfo.bi_memsizes_valid++;
>  
> @@ -319,7 +319,7 @@ 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;
>  



More information about the svn-src-all mailing list