]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/uklibid: Clang-compatible compile option flags
authorSimon Kuenzer <simon@unikraft.io>
Thu, 12 Oct 2023 08:50:14 +0000 (10:50 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
Clang's preprocessor seems to behave differently when computing an integer
based on undefined macros. For example, the following expression:
```
  (!(!__LIBUKLIBID_COMPILEOPT_PIE__) * (0x01 << 0))
```
resolves to 0x0 on GCC's GAS if __LIBUKLIBID_COMPILEOPT_PIE__ is not
defined. Clang is throwing an compile error because of the missing
definition. This commit adopts `libinfo.S` to define an intermediate
value macro that is set to `0` when the requested feature is not enabled.

Signed-off-by: Simon Kuenzer <simon@unikraft.io>
Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #1131

lib/uklibid/Makefile.uk
lib/uklibid/libinfo.S

index 21fc52b9f482a7021adf2a0b08cabff8b0a3339a..b18c5e23ee6962876df5676072f01725ed17c029 100644 (file)
@@ -40,14 +40,13 @@ LIBUKLIBID_EXPORTS-y += $(LIBUKLIBID_BUILD)/exportsyms.uk
 
 LIBUKLIBID_SRCS-$(CONFIG_LIBUKLIBID_INFO_BOOTDUMP) += $(LIBUKLIBID_BASE)/infodump.c
 EACHOLIB_SRCS-$(CONFIG_LIBUKLIBID_INFO) += $(LIBUKLIBID_BASE)/libinfo.S|libuklibid
-ASFLAGS += -D__LIBUKLIBID_COMPILER__="$(CC_INFO)"
-ASFLAGS-$(CONFIG_OPTIMIZE_PIE) += -D__LIBUKLIBID_COMPILEOPT_PIE__=1
-ASFLAGS-$(CONFIG_OPTIMIZE_LTO) += -D__LIBUKLIBID_COMPILEOPT_LTO__=1
-ASFLAGS-$(CONFIG_OPTIMIZE_DEADELIM) += -D__LIBUKLIBID_COMPILEOPT_DCE__=1
+ifeq ($(CONFIG_LIBUKLIBID_INFO),y)
+ASFLAGS-y += -D__LIBUKLIBID_COMPILER__="$(CC_INFO)"
 # NOTE: We hand-over $(HOSTUTC) instead of using __DATE__ and __TIME__ in order
 #       to ensure recompilation of `libinfo.S` due to changed compile flags
 ASFLAGS-$(CONFIG_LIBUKLIBID_INFO_LIB_COMPILEDATE) += -D__LIBUKLIBID_UTCDATE__="$(HOSTUTC)"
 ASFLAGS-$(CONFIG_LIBUKLIBID_INFO_COMPILEDBY_HOST) += -D__LIBUKLIBID_COMPILEDBY_HOST__="$(HOSTUSER)@$(HOSTNAME)"
+endif # CONFIG_LIBUKLIBID_INFO
 LIBUKLIBID_SRCS-$(CONFIG_LIBUKLIBID_INFO) +=  $(LIBUKLIBID_BASE)/infosec.ld
 LIBUKLIBID_SRCS-$(CONFIG_LIBUKLIBID_INFO) += $(LIBUKLIBID_BASE)/libinfo.S|global
 LIBUKLIBID_LIBINFO_GLOBAL_FLAGS-y += -D__GLOBALINFO__
index 15e54ceeba9c805c4ea8f626b189fd54a378dd59..069600e538b0cbe5cc513b5a94f0d282ea0e53c8 100644 (file)
        RECORD(UKLI_REC_COMPILEDATE,
               .asciz STRINGIFY(__LIBUKLIBID_UTCDATE__))
 #endif /* CONFIG_LIBUKLIBID_INFO_COMPILEDATE */
-       RECORD(UKLI_REC_COMPILEOPTS,   .__u32 (
-                       (!(!__LIBUKLIBID_COMPILEOPT_PIE__) * UKLI_REC_CO_PIE) |\
-                       (!(!__LIBUKLIBID_COMPILEOPT_DCE__) * UKLI_REC_CO_DCE) |\
-                       (!(!__LIBUKLIBID_COMPILEOPT_LTO__) * UKLI_REC_CO_LTO)))
+#if CONFIG_OPTIMIZE_PIE
+#define CO_FLAG_PIE UKLI_REC_CO_PIE
+#else /* !CONFIG_OPTIMIZE_PIE */
+#define CO_FLAG_PIE 0x0
+#endif /* !CONFIG_OPTIMIZE_PIE */
+#if CONFIG_OPTIMIZE_DEADELIM
+#define CO_FLAG_DCE UKLI_REC_CO_DCE
+#else /* !CONFIG_OPTIMIZE_DEADELIM */
+#define CO_FLAG_DCE 0x0
+#endif /* !CONFIG_OPTIMIZE_DEADELIM */
+#if CONFIG_OPTIMIZE_LTO
+#define CO_FLAG_LTO UKLI_REC_CO_LTO
+#else /* !CONFIG_OPTIMIZE_LTO */
+#define CO_FLAG_LTO 0x0
+#endif /* !CONFIG_OPTIMIZE_LTO */
+       RECORD(UKLI_REC_COMPILEOPTS,   .__u32 ((CO_FLAG_PIE | \
+                                               CO_FLAG_DCE | \
+                                               CO_FLAG_LTO)))
 #endif /* !__GLOBALINFO__ */
 
 #if CONFIG_LIBUKLIBID_INFO_COMPILEDBY_HOST