From 3522e574a21a65ae4ef76ac396101c68e1c985a1 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Wed, 7 Jun 2017 13:20:46 -0700 Subject: [PATCH] 2lib: Add test_mockable attribute Some tests mock library functions. This previously worked due to adding CFLAGS += -Xlinker --allow-multiple-definition to the test binaries. But the new version of binutils seems to need the default implementation to be weak if compiled with -O2 in some cases. Add test_mockable for use with functions where this is now needed. BUG=chromium:723906 BRANCH=none TEST=Add CFLAGS += -O2 to the makefile, then make -j runtests Tests break before this change with -O2, and work afterwards Change-Id: I95996a3e1086251442055765295a75de4c20ee3c Signed-off-by: Randall Spangler Reviewed-on: https://chromium-review.googlesource.com/527601 Commit-Ready: Manoj Gupta Tested-by: Rahul Chaudhry Reviewed-by: Rahul Chaudhry --- firmware/2lib/include/2common.h | 12 ++++++++++++ firmware/include/vboot_api.h | 2 ++ firmware/lib20/packed_key.c | 1 + 3 files changed, 15 insertions(+) diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h index b08790a598..fa64c0f3ce 100644 --- a/firmware/2lib/include/2common.h +++ b/firmware/2lib/include/2common.h @@ -46,6 +46,18 @@ struct vb2_public_key; # define VB2_DEBUG_RAW(format, args...) #endif +/* + * Define test_mockable and for mocking functions when compiled for Chrome OS + * environment (that is, not for firmware). + */ +#ifndef test_mockable +#ifdef CHROMEOS_ENVIRONMENT +#define test_mockable __attribute__((weak)) +#else +#define test_mockable +#endif +#endif + /* * Alignment for work buffer pointers/allocations should be useful for any * data type. When declaring workbuf buffers on the stack, the caller should diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h index d1c91c3374..049ec90f3f 100644 --- a/firmware/include/vboot_api.h +++ b/firmware/include/vboot_api.h @@ -39,7 +39,9 @@ typedef uint32_t VbError_t; /* * Define test_mockable for mocking functions. */ +#ifndef test_mockable #define test_mockable __attribute__((weak)) +#endif /* * Predefined error numbers. Success is 0. Errors are non-zero, but differ diff --git a/firmware/lib20/packed_key.c b/firmware/lib20/packed_key.c index 48f111164d..3cbaff2450 100644 --- a/firmware/lib20/packed_key.c +++ b/firmware/lib20/packed_key.c @@ -23,6 +23,7 @@ int vb2_verify_packed_key_inside(const void *parent, key->key_offset, key->key_size); } +test_mockable int vb2_unpack_key_buffer(struct vb2_public_key *key, const uint8_t *buf, uint32_t size)