aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2021-02-12 21:56:53 +0000
committerMichael Brown <mcb30@ipxe.org>2021-02-12 22:08:41 +0000
commitb539e9a7e95c3a481c686ffcf310c87bc1e19707 (patch)
tree14bf7edb993b7608e75ff1f40fac89615d52d2d7
parentdf16df2c857a8f7ab5cc3e76656e4f85c15d4a7a (diff)
downloadipxe-b539e9a7e95c3a481c686ffcf310c87bc1e19707.zip
ipxe-b539e9a7e95c3a481c686ffcf310c87bc1e19707.tar.gz
ipxe-b539e9a7e95c3a481c686ffcf310c87bc1e19707.tar.bz2
[build] Remove support for building with the Intel C compiler
Support for building with the Intel C compiler (icc) was added in 2009 in the expectation that UEFI support would eventually involve compiling iPXE to EFI Byte Code. EFI Byte Code has never found any widespread use: no widely available compilers can emit it, Microsoft refuses to sign EFI Byte Code binaries for UEFI Secure Boot, and I have personally never encountered any examples of EFI Byte Code in the wild. The support for using the Intel C compiler has not been tested in over a decade, and would almost certainly require modification to work with current releases of the compiler. Simplify the build process by removing this old legacy code. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/Makefile1
-rw-r--r--src/Makefile.housekeeping57
-rw-r--r--src/include/ipxe/efi/efi.h5
-rw-r--r--src/include/ipxe/tables.h71
-rw-r--r--src/util/.gitignore1
-rw-r--r--src/util/iccfix.c157
6 files changed, 5 insertions, 287 deletions
diff --git a/src/Makefile b/src/Makefile
index 758db7e..60be873 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -48,7 +48,6 @@ ELF2EFI32 := ./util/elf2efi32
ELF2EFI64 := ./util/elf2efi64
EFIROM := ./util/efirom
EFIFATBIN := ./util/efifatbin
-ICCFIX := ./util/iccfix
EINFO := ./util/einfo
GENKEYMAP := ./util/genkeymap.pl
DOXYGEN := doxygen
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index bade2da..8e769c6 100644
--- a/src/Makefile.housekeeping
+++ b/src/Makefile.housekeeping
@@ -76,9 +76,7 @@ CCDEFS := $(shell $(CC) -E -x c -c /dev/null -dM | cut -d" " -f2)
ccdefs:
@$(ECHO) $(CCDEFS)
-ifeq ($(filter __ICC,$(CCDEFS)),__ICC)
-CCTYPE := icc
-else
+ifeq ($(filter __GNUC__,$(CCDEFS)),__GNUC__)
CCTYPE := gcc
endif
cctype:
@@ -466,32 +464,6 @@ CFLAGS += -fcommon
CFLAGS += -Wall -W -Wformat-nonliteral
HOST_CFLAGS += -Wall -W -Wformat-nonliteral
endif
-ifeq ($(CCTYPE),icc)
-CFLAGS += -fno-builtin
-CFLAGS += -no-ip
-CFLAGS += -no-gcc
-CFLAGS += -diag-disable 111 # Unreachable code
-CFLAGS += -diag-disable 128 # Unreachable loop
-CFLAGS += -diag-disable 170 # Array boundary checks
-CFLAGS += -diag-disable 177 # Unused functions
-CFLAGS += -diag-disable 181 # printf() format checks
-CFLAGS += -diag-disable 188 # enum strictness
-CFLAGS += -diag-disable 193 # Undefined preprocessor identifiers
-CFLAGS += -diag-disable 280 # switch ( constant )
-CFLAGS += -diag-disable 310 # K&R parameter lists
-CFLAGS += -diag-disable 424 # Extra semicolon
-CFLAGS += -diag-disable 589 # Declarations mid-code
-CFLAGS += -diag-disable 593 # Unused variables
-CFLAGS += -diag-disable 810 # Casting ints to smaller ints
-CFLAGS += -diag-disable 981 # Sequence point violations
-CFLAGS += -diag-disable 1292 # Ignored attributes
-CFLAGS += -diag-disable 1338 # void pointer arithmetic
-CFLAGS += -diag-disable 1361 # Variable-length arrays
-CFLAGS += -diag-disable 1418 # Missing prototypes
-CFLAGS += -diag-disable 1419 # Missing prototypes
-CFLAGS += -diag-disable 1599 # Hidden variables
-CFLAGS += -Wall -Wmissing-declarations
-endif
CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS)
ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS)
LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS)
@@ -555,16 +527,6 @@ OBJ_CFLAGS = $(CFLAGS_$(OBJECT)) -DOBJECT=$(subst -,_,$(OBJECT))
$(BIN)/%.flags :
@$(ECHO) $(OBJ_CFLAGS)
-# ICC requires postprocessing objects to fix up table alignments
-#
-ifeq ($(CCTYPE),icc)
-POST_O = && $(ICCFIX) $@
-POST_O_DEPS := $(ICCFIX)
-else
-POST_O :=
-POST_O_DEPS :=
-endif
-
# Debug level calculations
#
DBGLVL_MAX = -DDBGLVL_MAX=$(firstword $(subst ., ,$(1)))
@@ -574,9 +536,9 @@ DBGLVL = $(call DBGLVL_MAX,$(1)) $(call DBGLVL_DFLT,$(1))
# Rules for specific object types.
#
COMPILE_c = $(CC) $(CFLAGS) $(CFLAGS_c) $(OBJ_CFLAGS)
-RULE_c = $(Q)$(COMPILE_c) -c $< -o $@ $(POST_O)
+RULE_c = $(Q)$(COMPILE_c) -c $< -o $@
RULE_c_to_ids.o = $(Q)$(ECHO_E) '$(OBJ_IDS_ASM_NL)' | $(ASSEMBLE_S) -o $@
-RULE_c_to_dbg%.o= $(Q)$(COMPILE_c) $(call DBGLVL,$*) -c $< -o $@ $(POST_O)
+RULE_c_to_dbg%.o= $(Q)$(COMPILE_c) $(call DBGLVL,$*) -c $< -o $@
RULE_c_to_c = $(Q)$(COMPILE_c) -E -c $< > $@
RULE_c_to_s = $(Q)$(COMPILE_c) -S -g0 -c $< -o $@
@@ -919,7 +881,7 @@ endef
# $(3) is the source base name (e.g. "rtl8139")
#
define rules_template_parts
-$$(BIN)/$(3).o : $(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)
+$$(BIN)/$(3).o : $(1) $$(MAKEDEPS) $$($(3)_DEPS)
$$(QM)$(ECHO) " [BUILD] $$@"
$$(RULE_$(2))
BOBJS += $$(BIN)/$(3).o
@@ -934,7 +896,7 @@ endef
# $(4) is the destination type (e.g. "dbg%.o")
#
define rules_template_target
-$$(BIN)/$(3).$(4) : $(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)
+$$(BIN)/$(3).$(4) : $(1) $$(MAKEDEPS) $$($(3)_DEPS)
$$(QM)$(ECHO) " [BUILD] $$@"
$$(RULE_$(2)_to_$(4))
$(TGT)_OBJS += $$(BIN)/$(3).$(4)
@@ -1475,15 +1437,6 @@ CLEANUP += $(EFIFATBIN)
###############################################################################
#
-# The ICC fixup utility
-#
-$(ICCFIX) : util/iccfix.c $(MAKEDEPS)
- $(QM)$(ECHO) " [HOSTCC] $@"
- $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -o $@ $<
-CLEANUP += $(ICCFIX)
-
-###############################################################################
-#
# The error usage information utility
#
$(EINFO) : util/einfo.c $(MAKEDEPS)
diff --git a/src/include/ipxe/efi/efi.h b/src/include/ipxe/efi/efi.h
index c8c069c..a83fa0f 100644
--- a/src/include/ipxe/efi/efi.h
+++ b/src/include/ipxe/efi/efi.h
@@ -29,11 +29,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
/* EFI headers redefine ARRAY_SIZE */
#undef ARRAY_SIZE
-/* EFI headers expect ICC to define __GNUC__ */
-#if defined ( __ICC ) && ! defined ( __GNUC__ )
-#define __GNUC__ 1
-#endif
-
/* EFI headers think your compiler uses the MS ABI by default on X64 */
#if __x86_64__
#define EFIAPI __attribute__((ms_abi))
diff --git a/src/include/ipxe/tables.h b/src/include/ipxe/tables.h
index 60f8efd..28a87da 100644
--- a/src/include/ipxe/tables.h
+++ b/src/include/ipxe/tables.h
@@ -444,75 +444,4 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
pointer >= table_start ( table ) ; \
pointer-- )
-/******************************************************************************
- *
- * Intel's C compiler chokes on several of the constructs used in this
- * file. The workarounds are ugly, so we use them only for an icc
- * build.
- *
- */
-#define ICC_ALIGN_HACK_FACTOR 128
-#ifdef __ICC
-
-/*
- * icc miscompiles zero-length arrays by inserting padding to a length
- * of two array elements. We therefore have to generate the
- * __table_entries() symbols by hand in asm.
- *
- */
-#undef __table_entries
-#define __table_entries( table, idx ) ( { \
- extern __table_type ( table ) \
- __table_temp_sym ( idx, __LINE__ ) [] \
- __table_entry ( table, idx ) \
- asm ( __table_entries_sym ( table, idx ) ); \
- __asm__ ( ".ifndef %c0\n\t" \
- ".section " __table_section ( table, idx ) "\n\t" \
- ".align %c1\n\t" \
- "\n%c0:\n\t" \
- ".previous\n\t" \
- ".endif\n\t" \
- : : "i" ( __table_temp_sym ( idx, __LINE__ ) ), \
- "i" ( __table_alignment ( table ) ) ); \
- __table_temp_sym ( idx, __LINE__ ); } )
-#define __table_entries_sym( table, idx ) \
- "__tbl_" __table_name ( table ) "_" #idx
-#define __table_temp_sym( a, b ) \
- ___table_temp_sym( __table_, a, _, b )
-#define ___table_temp_sym( a, b, c, d ) a ## b ## c ## d
-
-/*
- * icc ignores __attribute__ (( aligned (x) )) when it is used to
- * decrease the compiler's default choice of alignment (which may be
- * higher than the alignment actually required by the structure). We
- * work around this by forcing the alignment to a large multiple of
- * the required value (so that we are never attempting to decrease the
- * default alignment) and then postprocessing the object file to
- * reduce the alignment back down to the "real" value.
- *
- */
-#undef __table_alignment
-#define __table_alignment( table ) \
- ( ICC_ALIGN_HACK_FACTOR * __alignof__ ( __table_type ( table ) ) )
-
-/*
- * Because of the alignment hack, we must ensure that the compiler
- * never tries to place multiple objects within the same section,
- * otherwise the assembler will insert padding to the (incorrect)
- * alignment boundary. Do this by appending the line number to table
- * section names.
- *
- * Note that we don't need to worry about padding between array
- * elements, since the alignment is declared on the variable (i.e. the
- * whole array) rather than on the type (i.e. on all individual array
- * elements).
- */
-#undef __table_section
-#define __table_section( table, idx ) \
- ".tbl." __table_name ( table ) "." __table_str ( idx ) \
- "." __table_xstr ( __LINE__ )
-#define __table_xstr( x ) __table_str ( x )
-
-#endif /* __ICC */
-
#endif /* _IPXE_TABLES_H */
diff --git a/src/util/.gitignore b/src/util/.gitignore
index 33bedef..b4cb136 100644
--- a/src/util/.gitignore
+++ b/src/util/.gitignore
@@ -6,5 +6,4 @@ elf2efi32
elf2efi64
efirom
efifatbin
-iccfix
einfo
diff --git a/src/util/iccfix.c b/src/util/iccfix.c
deleted file mode 100644
index 528bf4b..0000000
--- a/src/util/iccfix.c
+++ /dev/null
@@ -1,157 +0,0 @@
-#include <stdint.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <elf.h>
-#include <ipxe/tables.h>
-
-#define DEBUG 0
-
-#define eprintf(...) fprintf ( stderr, __VA_ARGS__ )
-
-#define dprintf(...) do { \
- if ( DEBUG ) \
- fprintf ( stderr, __VA_ARGS__ ); \
- } while ( 0 )
-
-#ifdef SELF_INCLUDED
-
-/**
- * Fix up ICC alignments
- *
- * @v elf ELF header
- * @ret rc Return status code
- *
- * See comments in tables.h for an explanation of why this monstrosity
- * is necessary.
- */
-static int ICCFIX ( void *elf ) {
- ELF_EHDR *ehdr = elf;
- ELF_SHDR *shdr = ( elf + ehdr->e_shoff );
- size_t shentsize = ehdr->e_shentsize;
- unsigned int shnum = ehdr->e_shnum;
- ELF_SHDR *strtab = ( ( ( void * ) shdr ) +
- ( ehdr->e_shstrndx * shentsize ) );
- char *strings = ( elf + strtab->sh_offset );
-
- for ( ; shnum-- ; shdr = ( ( ( void * ) shdr ) + shentsize ) ) {
- char *name = ( strings + shdr->sh_name );
- unsigned long align = shdr->sh_addralign;
- unsigned long new_align;
-
- if ( ( strncmp ( name, ".tbl.", 5 ) == 0 ) &&
- ( align >= ICC_ALIGN_HACK_FACTOR ) ) {
- new_align = ( align / ICC_ALIGN_HACK_FACTOR );
- shdr->sh_addralign = new_align;
- dprintf ( "Section \"%s\": alignment %ld->%ld\n",
- name, align, new_align );
- }
- }
- return 0;
-}
-
-#else /* SELF_INCLUDED */
-
-#define SELF_INCLUDED
-
-/* Include iccfix32() function */
-#define ELF_EHDR Elf32_Ehdr
-#define ELF_SHDR Elf32_Shdr
-#define ICCFIX iccfix32
-#include "iccfix.c"
-#undef ELF_EHDR
-#undef ELF_SHDR
-#undef ICCFIX
-
-/* Include iccfix64() function */
-#define ELF_EHDR Elf64_Ehdr
-#define ELF_SHDR Elf64_Shdr
-#define ICCFIX iccfix64
-#include "iccfix.c"
-#undef ELF_EHDR
-#undef ELF_SHDR
-#undef ICCFIX
-
-static int iccfix ( const char *filename ) {
- int fd;
- struct stat stat;
- void *elf;
- unsigned char *eident;
- int rc;
-
- /* Open and mmap file */
- fd = open ( filename, O_RDWR );
- if ( fd < 0 ) {
- eprintf ( "Could not open %s: %s\n",
- filename, strerror ( errno ) );
- rc = -1;
- goto err_open;
- }
- if ( fstat ( fd, &stat ) < 0 ) {
- eprintf ( "Could not determine size of %s: %s\n",
- filename, strerror ( errno ) );
- rc = -1;
- goto err_fstat;
- }
- elf = mmap ( NULL, stat.st_size, ( PROT_READ | PROT_WRITE ),
- MAP_SHARED, fd, 0 );
- if ( elf == MAP_FAILED ) {
- eprintf ( "Could not map %s: %s\n",
- filename, strerror ( errno ) );
- rc = -1;
- goto err_mmap;
- }
-
- /* Perform fixups */
- eident = elf;
- switch ( eident[EI_CLASS] ) {
- case ELFCLASS32:
- rc = iccfix32 ( elf );
- break;
- case ELFCLASS64:
- rc = iccfix64 ( elf );
- break;
- default:
- eprintf ( "Unknown ELF class %d in %s\n",
- eident[EI_CLASS], filename );
- rc = -1;
- break;
- }
-
- munmap ( elf, stat.st_size );
- err_mmap:
- err_fstat:
- close ( fd );
- err_open:
- return rc;
-}
-
-int main ( int argc, char **argv ) {
- int i;
- int rc;
-
- /* Parse command line */
- if ( argc < 2 ) {
- eprintf ( "Syntax: %s <object_file>...\n", argv[0] );
- exit ( 1 );
- }
-
- /* Process each object in turn */
- for ( i = 1 ; i < argc ; i++ ) {
- if ( ( rc = iccfix ( argv[i] ) ) != 0 ) {
- eprintf ( "Could not fix up %s\n", argv[i] );
- exit ( 1 );
- }
- }
-
- return 0;
-}
-
-#endif /* SELF_INCLUDED */