Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Oct 2010 02:17:27 -0700
From:      Jeremy Chadwick <freebsd@jdc.parodius.com>
To:        Pawel Jakub Dawidek <pjd@FreeBSD.org>
Cc:        freebsd-stable@freebsd.org, freebsd-arch@freebsd.org
Subject:   Re: Can't build boot blocks after new GPT attributes added
Message-ID:  <20101027091727.GA44893@icarus.home.lan>
In-Reply-To: <20101027080817.GC1848@garage.freebsd.pl>
References:  <20101027074401.GA18014@icarus.home.lan> <20101027080817.GC1848@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 27, 2010 at 10:08:17AM +0200, Pawel Jakub Dawidek wrote:
> On Wed, Oct 27, 2010 at 12:44:02AM -0700, Jeremy Chadwick wrote:
> > The below commit has broken the ability to build system boot blocks
> > (including pxeldr) the "historic way"[1]:
> > 
> > http://freshbsd.org/2010/10/17/20/10/00
> > 
> > The breakage on RELENG_8 (dated as of a few minutes ago):
> > 
> > ========================================
> > # rm -fr /usr/obj/*
> > # cd /sys/boot
> > # make clean
> > [...]
> > # make
> > [...]
> > cc -DBOOTPROG=\"gptboot\"  -Os  -fno-guess-branch-probability  -fomit-frame-pointer  -fno-unit-at-a-time  -mno-align-long-strings  -mrtd  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3  -DGPT  -DUFS1_AND_UFS2  -DSIOPRT=0x3f8  -DSIOFMT=0x3  -DSIOSPD=9600  -I/usr/src/sys/boot/i386/gptboot/../../common  -I/usr/src/sys/boot/i386/gptboot/../common  -I/usr/src/sys/boot/i386/gptboot/../btx/lib -I.  -I/usr/src/sys/boot/i386/gptboot/../boot2  -Wall -Waggregate-return -Wbad-function-cast -Wcast-align  -Wmissing-declarations -Wmissing-prototypes -Wnested-externs  -Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings  -Winline --param max-inline-insns-single=100 -ffreestanding -mpreferred-stack-boundary=2  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -m32 -march=i386 -std=gnu99   -c /usr/src/sys/boot/i386/gptboot/../../common/gpt.c
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c: In function 'gptfind':
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:128: error: 'GPT_ENT_ATTR_BOOTME' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:128: error: (Each undeclared identifier is reported only once
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:128: error: for each function it appears in.)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:130: error: 'GPT_ENT_ATTR_BOOTONCE' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c: In function 'gptbootfailed':
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:217: error: 'GPT_ENT_ATTR_BOOTONCE' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:222: error: 'GPT_ENT_ATTR_BOOTFAILED' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c: In function 'gptbootconv':
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:249: error: 'GPT_ENT_ATTR_BOOTME' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:250: error: 'GPT_ENT_ATTR_BOOTONCE' undeclared (first use in this function)
> > /usr/src/sys/boot/i386/gptboot/../../common/gpt.c:251: error: 'GPT_ENT_ATTR_BOOTFAILED' undeclared (first use in this function)
> > *** Error code 1
> > 
> > Stop in /usr/src/sys/boot/i386/gptboot.
> > *** Error code 1
> > 
> > Stop in /usr/src/sys/boot/i386.
> > *** Error code 1
> > 
> > Stop in /usr/src/sys/boot.
> > ========================================
> > 
> > Please advise.  If there is a new/correct method, then I'd like to know
> > what it is, in addition to the Handbook needing to be updated.
> > 
> > [1]: http://www.freebsd.org/doc/handbook/serialconsole-setup.html
> >      (See Section 26.6.5.2)
> 
> Well, your problem is that gptboot.c is including gpt.h not from your
> source tree, but from /usr/include/sys/, which has an old version of
> this header file. This can be easly fixed by extending CFLAGS in one of
> the Makefiles (which is already done in HEAD), but I'm afraid this
> procedure is incorrect (and never was correct). Apart from including
> wrong files it also links to wrong libraries, etc.
> 
> The proper way is to:
> 
> 	# cd /usr/src
> 	# make buildenv
> 	# cd sys/boot
> 	# make clean && make && make install

Thanks for the tip -- the CFLAGS change in a Makefile sounds like the
solution, since the latter (re: "proper way") didn't work (exact same
problem).  The Makefile adjustment you mention for HEAD is here:

http://freshbsd.org/2010/10/08/10/27/52

But there's no mention of an MFC date in the commit message.  Can this
be MFC'd?

For now, "make buildworld" works as a workaround (pull the bootstrap
binaries needed out of /usr/obj).

-- 
| Jeremy Chadwick                                   jdc@parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101027091727.GA44893>