(unknown charset) archaic/useless CFLAGS options for x86 boot blocks

From: (unknown charset) Andriy Gapon <avg_at_FreeBSD.org>
Date: Mon, 12 Sep 2011 10:36:54 +0300
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
Received on Mon Sep 12 2011 - 05:37:00 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:17 UTC