mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 12:00:19 +03:00
Enable -fstack-protector for EFI builds, where binary size is less critical than for BIOS builds. The stack cookie must be constructed immediately on entry, which prohibits the use of any viable entropy source. Construct a cookie by XORing together various mildly random quantities to produce a value that will at least not be identical on each run. On detecting a stack corruption, attempt to call Exit() with an appropriate error. If that fails, then lock up the machine since there is no other safe action that can be taken. The old conditional check for support of -fno-stack-protector is omitted since this flag dates back to GCC 4.1. Signed-off-by: Michael Brown <mcb30@ipxe.org>
55 lines
1.4 KiB
Makefile
55 lines
1.4 KiB
Makefile
# -*- makefile -*- : Force emacs to use Makefile mode
|
|
|
|
# Enable stack protection if available
|
|
#
|
|
SPG_TEST = $(CC) -fstack-protector-strong -mstack-protector-guard=global \
|
|
-x c -c /dev/null -o /dev/null >/dev/null 2>&1
|
|
SPG_FLAGS := $(shell $(SPG_TEST) && $(ECHO) '-fstack-protector-strong ' \
|
|
'-mstack-protector-guard=global')
|
|
CFLAGS += $(SPG_FLAGS)
|
|
|
|
# The EFI linker script
|
|
#
|
|
LDSCRIPT = scripts/efi.lds
|
|
|
|
# Retain relocation information for elf2efi
|
|
#
|
|
LDFLAGS += -q -S
|
|
|
|
# Media types.
|
|
#
|
|
NON_AUTO_MEDIA += efi
|
|
NON_AUTO_MEDIA += efidrv
|
|
NON_AUTO_MEDIA += drv.efi
|
|
NON_AUTO_MEDIA += efirom
|
|
|
|
# Include SNP driver in the all-drivers build
|
|
#
|
|
DRIVERS_net += snp
|
|
|
|
# Rules for building EFI files
|
|
#
|
|
$(BIN)/%.efi : $(BIN)/%.efi.tmp $(ELF2EFI)
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)$(ELF2EFI) --subsystem=10 $< $@
|
|
|
|
$(BIN)/%.efidrv : $(BIN)/%.efidrv.tmp $(ELF2EFI)
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)$(ELF2EFI) --subsystem=11 $< $@
|
|
|
|
$(BIN)/%.drv.efi : $(BIN)/%.efidrv
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)$(CP) $< $@
|
|
|
|
$(BIN)/%.efirom : $(BIN)/%.efidrv $(EFIROM)
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)$(EFIROM) -v $(TGT_PCI_VENDOR) -d $(TGT_PCI_DEVICE) $< $@
|
|
|
|
$(BIN)/efidrv.cab : $(BIN)/alldrv.efis # $(ALL_drv.efi) is not yet defined
|
|
$(QM)$(ECHO) " [CAB] $@"
|
|
$(Q)$(LCAB) -n -q $(ALL_drv.efi) $@
|
|
|
|
$(BIN)/%.usb : $(BIN)/%.efi
|
|
$(QM)$(ECHO) " [GENEFIDSK] $@"
|
|
$(Q)bash util/genefidsk -o $@ -b $(EFI_BOOT_FILE) $<
|