Date: Thu, 8 Mar 2012 15:01:21 -0500 From: Jung-uk Kim <jkim@FreeBSD.org> To: freebsd-current@FreeBSD.org Cc: Peter Wemm <peter@freebsd.org>, Jia-Shiun Li <jiashiun@gmail.com> Subject: Re: boot2 overflow when building with clang Message-ID: <201203081501.22912.jkim@FreeBSD.org> In-Reply-To: <201203081046.19330.jhb@freebsd.org> References: <CAHNYxxM%2BJSVZZG9KGRa%2BVAEj2yzkHTFv%2BtBZioXJ9G-3L2vUUQ@mail.gmail.com> <201203071919.01511.jkim@FreeBSD.org> <201203081046.19330.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 08 March 2012 10:46 am, John Baldwin wrote: > On Wednesday, March 07, 2012 7:18:56 pm Jung-uk Kim wrote: > > On Tuesday 06 March 2012 11:51 pm, Jia-Shiun Li wrote: > > > I am not familiar with boot2, but it looks like allocated size > > > for boot2 is not enough to hold code generated by clang. > > > Reverting r232570 fixes it. > > > > > > ===> sys/boot/i386/boot2 (all) > > > objcopy -S -O binary boot1.out boot1 > > > dd if=/dev/zero of=boot2.ldr bs=512 count=1 > > > clang -Os -fno-guess-branch-probability -fomit-frame-pointer > > > -fno-unit-at-a-time -mno-align-long-strings -mrtd > > > -mregparm=3 -DUSE_XREAD -DUFS1_AND_UFS2 -DFLAGS=0x80 > > > -DSIOPRT=0x3f8 -DSIOFMT=0x3 -DSIOSPD=9600 > > > -I/usr/src/sys/boot/i386/boot2/../../common > > > -I/usr/src/sys/boot/i386/boot2/../btx/lib -I. -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 -mllvm > > > -stack-alignment=8 -mllvm -inline-threshold=3 -mllvm > > > -enable-load-pre=false -ffreestanding > > > -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse > > > -mno-sse2 -mno-sse3 -msoft-float -std=gnu99 -S -o > > > boot2.s.tmp > > > /usr/src/sys/boot/i386/boot2/boot2.c > > > sed -e '/align/d' -e '/nop/d' < boot2.s.tmp > boot2.s > > > rm -f boot2.s.tmp > > > clang -c boot2.s > > > clang -Os -fno-guess-branch-probability -fomit-frame-pointer > > > -fno-unit-at-a-time -mno-align-long-strings -mrtd > > > -mregparm=3 -DUSE_XREAD -DUFS1_AND_UFS2 -DFLAGS=0x80 > > > -DSIOPRT=0x3f8 -DSIOFMT=0x3 -DSIOSPD=9600 > > > -I/usr/src/sys/boot/i386/boot2/../../common > > > -I/usr/src/sys/boot/i386/boot2/../btx/lib -I. -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 -mllvm > > > -stack-alignment=8 -mllvm -inline-threshold=3 -mllvm > > > -enable-load-pre=false -ffreestanding > > > -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse > > > -mno-sse2 -mno-sse3 -msoft-float -std=gnu99 -c > > > /usr/src/sys/boot/i386/boot2/sio.S > > > ld -static -N --gc-sections -nostdlib -Ttext 0x2000 -o > > > boot2.out > > > /usr/obj/usr/src/sys/boot/i386/boot2/../btx/lib/crt0.o boot2.o > > > sio.o objcopy -S -O binary boot2.out boot2.bin > > > btxld -v -E 0x2000 -f bin -b > > > /usr/obj/usr/src/sys/boot/i386/boot2/../btx/btx/btx -l > > > boot2.ldr -o boot2.ld -P 1 boot2.bin > > > kernel: ver=1.02 size=690 load=9000 entry=9010 map=16M > > > pgctl=1:1 client: fmt=bin size=15a1 text=0 data=0 bss=0 entry=0 > > > output: fmt=bin size=1e31 text=200 data=1c31 org=0 entry=0 > > > -49 bytes available > > > *** [boot2] Error code 1 > > > > > > Stop in /usr/src/sys/boot/i386/boot2. > > > *** [all] Error code 1 > > > > > > Stop in /usr/src/sys/boot/i386. > > > *** [all] Error code 1 > > > > > > Stop in /usr/src/sys/boot. > > > *** [all] Error code 1 > > > > > > Stop in /usr/src/sys. > > > *** [sys.all__D] Error code 1 > > > > > > Stop in /usr/src. > > > *** [everything] Error code 1 > > > > > > Stop in /usr/src. > > > *** [buildworld] Error code 1 > > > > > > Stop in /usr/src. > > > > Here is a patch to work around the problem: > > > > http://people.freebsd.org/~jkim/boot2.diff > > > > Please note this patch creates two separate boot codes, one for > > UFS1 and one for UFS2. To generate previous boot code (i.e., > > UFS1+UFS2) with GCC, clean objects, add the following line to > > your /etc/make.conf, rebuild, and install: > > > > BOOT2_UFS=UFS1_AND_UFS2 > > I would really rather not go this route. That is going to cause a > lot of pain and suffering for users. Well, I disagree but don't worrry, I won't commit it today. ;-) Just in case, I updated the patch to build UFS1+UFS2 boot2 by default for GCC as Peter suggested. Also, I have created a project branch on SVN to increase UFS2 boot block size. http://svnweb.freebsd.org/base/projects/bigbb/ Jung-uk Kim
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203081501.22912.jkim>