]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[build] Remove support for building with the Intel C compiler
authorMichael Brown <mcb30@ipxe.org>
Fri, 12 Feb 2021 21:56:53 +0000 (21:56 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 12 Feb 2021 22:08:41 +0000 (22:08 +0000)
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>
src/Makefile
src/Makefile.housekeeping
src/include/ipxe/efi/efi.h
src/include/ipxe/tables.h
src/util/.gitignore
src/util/iccfix.c [deleted file]

index 758db7e1fc8415b4ec02308054ffc8ba51553ea3..60be873fbedf40e5ccf9a823ea0a29f4b8606cc5 100644 (file)
@@ -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
index bade2da3f9ce34e7e14ee95e5d039a4f1f2b78a8..8e769c6af705d3eb75151ac53d9fe8009ce95ef8 100644 (file)
@@ -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)
@@ -1473,15 +1435,6 @@ $(EFIFATBIN) : util/efifatbin.c $(MAKEDEPS)
        $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -o $@ $<
 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
index c8c069c123e26fcbd43007f00ba6dafe1bf494fc..a83fa0f276e64990509b70bea9abe1925fd1e521 100644 (file)
@@ -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))
index 60f8efdeafae00404585347295e6fe351f52a559..28a87da9671ecbf099ce00a9025350c495398f0f 100644 (file)
@@ -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 */
index 33bedefd03258938f0271c8cc1e2ed4e2678ca8a..b4cb136013cf2da883ecff16c78f62c46c5d436b 100644 (file)
@@ -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 (file)
index 528bf4b..0000000
+++ /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 */