--- /dev/null
+commit b8924c1aed512aa40cf28a43635df383880f771d
+Author: Michael Brown <mcb30@ipxe.org>
+Date: Wed Mar 16 19:30:42 2011 +0000
+
+ [build] Allow workaround-specific flags to override default flags
+
+ Signed-off-by: Michael Brown <mcb30@ipxe.org>
+
+diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
+index 709f8de..78e78c9 100644
+--- a/src/Makefile.housekeeping
++++ b/src/Makefile.housekeeping
+@@ -109,6 +109,10 @@ VERYCLEANUP += .toolcheck
+ # Check for various tool workarounds
+ #
+
++WORKAROUND_CFLAGS :=
++WORKAROUND_ASFLAGS :=
++WORKAROUND_LDFLAGS :=
++
+ # Make syntax does not allow use of comma or space in certain places.
+ # This ugly workaround is suggested in the manual.
+ #
+@@ -119,7 +123,7 @@ SPACE := $(EMPTY) $(EMPTY)
+ # Check for an old version of gas (binutils 2.9.1)
+ #
+ OLDGAS := $(shell $(AS) --version | grep -q '2\.9\.1' && $(ECHO) -DGAS291)
+-CFLAGS += $(OLDGAS)
++WORKAROUND_CFLAGS += $(OLDGAS)
+ oldgas :
+ @$(ECHO) $(oldgas)
+
+@@ -131,7 +135,7 @@ ifeq ($(CCTYPE),gcc)
+ SP_TEST = $(CC) -fno-stack-protector -x c -c /dev/null \
+ -o /dev/null >/dev/null 2>&1
+ SP_FLAGS := $(shell $(SP_TEST) && $(ECHO) '-fno-stack-protector')
+-CFLAGS += $(SP_FLAGS)
++WORKAROUND_CFLAGS += $(SP_FLAGS)
+ endif
+
+ # gcc 4.4 generates .eh_frame sections by default, which distort the
+@@ -141,7 +145,7 @@ ifeq ($(CCTYPE),gcc)
+ CFI_TEST = $(CC) -fno-dwarf2-cfi-asm -x c -c /dev/null \
+ -o /dev/null >/dev/null 2>&1
+ CFI_FLAGS := $(shell $(CFI_TEST) && $(ECHO) '-fno-dwarf2-cfi-asm')
+-CFLAGS += $(CFI_FLAGS)
++WORKAROUND_CFLAGS += $(CFI_FLAGS)
+ endif
+
+ # Some versions of gas choke on division operators, treating them as
+@@ -150,7 +154,7 @@ endif
+ #
+ DIVIDE_TEST = $(AS) --divide /dev/null -o /dev/null 2>/dev/null
+ DIVIDE_FLAGS := $(shell $(DIVIDE_TEST) && $(ECHO) '--divide')
+-ASFLAGS += $(DIVIDE_FLAGS)
++WORKAROUND_ASFLAGS += $(DIVIDE_FLAGS)
+
+ ###############################################################################
+ #
+@@ -375,9 +379,9 @@ CFLAGS += -diag-disable 1419 # Missing prototypes
+ CFLAGS += -diag-disable 1599 # Hidden variables
+ CFLAGS += -Wall -Wmissing-declarations
+ endif
+-CFLAGS += $(EXTRA_CFLAGS)
+-ASFLAGS += $(EXTRA_ASFLAGS)
+-LDFLAGS += $(EXTRA_LDFLAGS)
++CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS)
++ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS)
++LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS)
+
+ # Inhibit -Werror if NO_WERROR is specified on make command line
+ #
--- /dev/null
+commit fe61f6de0dd5d39ac3de5e8e18742f9bd0aafad7
+Author: Gilles Espinasse <g.esp@free.fr>
+Date: Tue Mar 29 15:30:11 2011 +0100
+
+ [build] Fix compilation when gcc is patched to default to -fPIE -Wl,-pie
+
+ Signed-off-by: Gilles Espinasse <g.esp@free.fr>
+ Modified-by: Michael Brown <mcb30@ipxe.org>
+ Signed-off-by: Michael Brown <mcb30@ipxe.org>
+
+diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
+index 57e52c0..c184351 100644
+--- a/src/Makefile.housekeeping
++++ b/src/Makefile.housekeeping
+@@ -138,6 +138,17 @@ SP_FLAGS := $(shell $(SP_TEST) && $(ECHO) '-fno-stack-protector')
+ WORKAROUND_CFLAGS += $(SP_FLAGS)
+ endif
+
++# Some widespread patched versions of gcc include -fPIE -Wl,-pie by
++# default. Note that gcc will exit *successfully* if it fails to
++# recognise an option that starts with "no", so we have to test for
++# output on stderr instead of checking the exit status.
++#
++ifeq ($(CCTYPE),gcc)
++PIE_TEST = [ -z "`$(CC) -fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1`" ]
++PIE_FLAGS := $(shell $(PIE_TEST) && $(ECHO) '-fno-PIE -nopie')
++WORKAROUND_CFLAGS += $(PIE_FLAGS)
++endif
++
+ # gcc 4.4 generates .eh_frame sections by default, which distort the
+ # output of "size". Inhibit this.
+ #