[ipxe-devel] gcc defaults to pie ?

Michael Brown mcb30 at ipxe.org
Wed Jan 31 17:17:40 UTC 2018

On 31/01/18 17:05, Joakim Tjernlund wrote:
> On Thu, 1970-01-01 at 00:00 +0000, Michael Brown wrote:
>> There's logic within arch/i386/Makefile which is supposed to autodetect
>> compilers that do this and specify the appropriate combination of "do
>> not use PIE" options.  We may need to expand this to handle whatever
>> Gentoo has done.
> Does that apply to every file that is built? arch/i386/Makefile feel specific for
> i386.

It applies to every file built for the (standard) i386 BIOS build.

To hit an error relating to "code model kernel" I think you must be 
trying to build for the x86_64-pcbios platform, since that's the only 
place I can find that we use an explicit -mcmodel=kernel.

The x86_64-pcbios platform is fairly obscure: it produces code that runs 
in 64-bit long mode but using 16-bit BIOS calls for console I/O and 
providing 16-bit real-mode entry points for PXE NBPs.  You only really 
need this platform if you are going to end up with your PCI BARs 
allocated above 4GB.

>> There's similar logic in Makefile.housekeeping to disable
>> -fstack-protector if needed.
> I see that, should Makefile.housekeeping include -U_FORTIFY_SOURCE then?

I don't think so.  The FORTIFY_SOURCE macro will be completely ignored 
by all of the iPXE source files, and there are no external libraries 
linked in anyway.

> Also, ATM one cannot pass flags into ipxe due to:
> CFLAGS		:=
> can it be changed to
> CFLAGS		?=

You can use EXTRA_CFLAGS to insert additional flags.  These will be 
placed after CFLAGS, which makes it possible to use EXTRA_CFLAGS to 
override Makefile-generated flags.


More information about the ipxe-devel mailing list