This patch changes the memlayout macro infrastructure so that the size of a region "xxx" (i.e. the distance between the symbols _xxx and _exxx) is stored in a separate _xxx_size symbol. This has the advantage that region sizes can be used inside static initializers, and also saves an extra subtraction at runtime. Since linker symbols can only be treated as addresses (not as raw integers) by C, retain the REGION_SIZE() accessor macro to hide the necessary typecast. Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: Ifd89708ca9bd3937d0db7308959231106a6aa373 Reviewed-on: https://review.coreboot.org/c/coreboot/+/49332 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
33 lines
863 B
C
33 lines
863 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef _TESTS_TEST_H
|
|
#define _TESTS_TEST_H
|
|
|
|
/*
|
|
* Standard test header that should be included in all tests. For now it just encapsulates the
|
|
* include dependencies for Cmocka. Test-specific APIs that are so generic we would want them
|
|
* available everywhere could also be added here.
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <setjmp.h>
|
|
#include <cmocka.h>
|
|
|
|
/*
|
|
* Set symbol value and make it global.
|
|
*/
|
|
#define TEST_SYMBOL(symbol, address) asm(".set " #symbol ", " #address "\n\t.globl " #symbol)
|
|
|
|
/*
|
|
* Define memory region for testing purpose.
|
|
*
|
|
* Create buffer with specified name and size.
|
|
* Create end symbol for it.
|
|
*/
|
|
#define TEST_REGION(region, size) uint8_t _##region[size]; \
|
|
TEST_SYMBOL(_e##region, _##region + size); \
|
|
TEST_SYMBOL(_##region##_size, size)
|
|
|
|
#endif /* _TESTS_TEST_H */
|