coreboot-kgpe-d16/payloads/libpayload/include
Julius Werner d371cf3336 Make common macros double-evaluation safe
I just got hit by a double-evaluation bug again, it's time to attempt
to fix this once more. Unfortunately there are several issues that don't
make this easy:

 - bitfield variables don't support typeof()
 - local macro variables that shadow others trigger -Werror=shadow
 - sign warnings with integer literal and unsigned var in typeof-MIN()
 - ({ statement expressions }) can not be used outside functions
 - romcc doesn't support any of the fancy GCC/clang extensions

This patch tries to address all of them as far as possible with macro
magic. We don't have the technology to solve the bitfield and
non-function context issues yet (__builtin_choose_expr() still throws a
"no statement expression outside a function" error if it's only in the
branch that's not chosen, unfortunately), so we'll have to provide
alternative macros for use in those cases (and we'll avoid making
__ALIGN_MASK() double-evaluation safe for now, since it would be
annoying to do that there and having an alignment mask with side
effects seems very unlikely). romcc can continue using unsafe versions
since we're hopefully not writing a lot of new code for it. Sign
warnings can be avoided in literal/variable comparisons by always using
the type of the variable there. Shadowing is avoided by picking very
explicit local variable names and using a special __COUNTER__ solution
for MIN() and MAX() (the only ones of these you're likely to nest).

Also add DIV_ROUND_UP() to libpayload since it's a generally quite
useful thing to have.

Change-Id: Iea35156c9aa9f6f2c7b8f00991418b746f44315d
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32027
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
2019-04-04 19:38:31 +00:00
..
arm/arch
arm64/arch
arpa
mips/arch
pci
storage payloads: Replace all IS_ENABLED(CONFIG_XXX) with CONFIG(XXX) 2019-03-07 17:15:30 +00:00
sys libpayload/sys/types.h: Add definition for off_t 2019-02-13 12:03:03 +00:00
udc
usb
x86/arch
archive.h
assert.h
cbfs.h
cbfs_core.h libpayload: cbfs: Require input size and output size for cbfs_decompress 2019-02-28 13:56:26 +00:00
cbfs_ram.h
cbgfx.h
compiler.h Make common macros double-evaluation safe 2019-04-04 19:38:31 +00:00
coreboot_tables.h vboot: make vboot workbuf available to payload 2019-03-19 21:43:02 +00:00
ctype.h
die.h
endian.h payloads: Replace all IS_ENABLED(CONFIG_XXX) with CONFIG(XXX) 2019-03-07 17:15:30 +00:00
errno.h
exception.h
fmap_serialized.h fmap: Add FMAP_AREA_PRESERVE 2019-03-04 13:25:01 +00:00
gdb.h libpayload: gdb: Factor out gdb_handle_reentrant_exception() from arm32 2018-10-12 20:17:40 +00:00
getopt.h
inttypes.h
ipchksum.h
kconfig.h Add new CONFIG(XXX) macro to replace IS_ENABLED(CONFIG_XXX) 2019-03-07 17:06:28 +00:00
keycodes.h
libpayload.h Make common macros double-evaluation safe 2019-04-04 19:38:31 +00:00
limits.h
lz4.h
lzma.h
malloc.h
multiboot_tables.h
panel.h
pci.h
queue.h
stdarg.h
stddef.h
stdint.h
stdio.h
stdlib.h payloads: Replace all IS_ENABLED(CONFIG_XXX) with CONFIG(XXX) 2019-03-07 17:15:30 +00:00
string.h libpayload: add memchr to libc 2019-02-11 23:17:37 +00:00
strings.h
swab.h
sysinfo.h vboot: make vboot workbuf available to payload 2019-03-19 21:43:02 +00:00
term.h
time.h
unistd.h
video_console.h