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 <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/527601
Commit-Ready: Manoj Gupta <manojgupta@chromium.org>
Tested-by: Rahul Chaudhry <rahulchaudhry@chromium.org>
Reviewed-by: Rahul Chaudhry <rahulchaudhry@chromium.org>
diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h
index b08790a..fa64c0f 100644
--- a/firmware/2lib/include/2common.h
+++ b/firmware/2lib/include/2common.h
@@ -47,6 +47,18 @@
 #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
  * use explicit alignment to avoid run-time errors. For example:
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index d1c91c3..049ec90 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -39,7 +39,9 @@
 /*
  * 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 48f1111..3cbaff2 100644
--- a/firmware/lib20/packed_key.c
+++ b/firmware/lib20/packed_key.c
@@ -23,6 +23,7 @@
 					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)