Date: Mon, 12 Sep 2011 10:36:54 +0300 From: Andriy Gapon <avg@FreeBSD.org> To: FreeBSD-Current <freebsd-current@FreeBSD.org>, freebsd-fs@FreeBSD.org Subject: archaic/useless CFLAGS options for x86 boot blocks Message-ID: <4E6DB696.1080608@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
This email is in part inspired by the following problem: http://article.gmane.org/gmane.os.freebsd.current/135292 So "harmful" could also be added to the subject line. So here is my proposal. Part I. ZFS and GPT bootblocks. I believe that we do not need here any extra optimizations and happy dances that seem to be carried over from boot2. I think that just the -Os should be sufficient of optimization flags. Maybe even that is not really required. Rationale: - these boot blocks are not as nearly space-constrained as boot2 - using untypical flags increases chances of hitting compiler bugs, especially for those compilers where we are stuck with unsupported / locally-maintained versions or where a compiler is maturing yet - assembly / machine code and debugging may become easier Additionally, the '/align/d' '/nop/d' filtering of the intermediate assembly file seems to be not needed for zfsboot. Part II. The original boot2. My testing shows that -Os -fomit-frame-pointer are sufficient to produce a small enough boot2 image (~300 bytes remain available with gcc, 51 bytes for clang). -mrtd -mregparm=3 do not change size with gcc, but with clang they increase _available_ space to 79 bytes. The '/align/d' '/nop/d' filtering seems to shave off only 7 bytes here. Not suggesting anything, just an observation... Part III. History. It seems that all those optimization related options were introduced very long time ago when the compiler(s) were quite different from what they are now. So, some re-evaluation may be (long over)due. For example, -fno-unit-at-a-time is definitely an anti-optmization option and it was introduced to fight some gcc bugs way back in 2004 (r132870). Its merits have never been re-evaluated after switch to gcc 4.2, it seems. -fno-guess-branch-probability and -mno-align-long-strings are even less obvious options (see e.g. r108149). Finally, here is a diff: http://people.freebsd.org/~avg/boot-cflags.diff All the boot blocks are boot tested in qemu. boot2 is also tested with -mrtd -mregparm removed. -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E6DB696.1080608>