Make sure that our version of certain utility function implementations gets used in the firmware.
Reference code drop-in to firmware should make our implementations of Memset() and SafeMemcmp() get used now.
BUG=chrome-os-partner:820
TEST=make && make runtests
Change-Id: If0c06dfad85b67398a118985cdb751d20b2b65a4
Review URL: http://codereview.chromium.org/3173035
diff --git a/firmware/Makefile b/firmware/Makefile
index 67ed156..99f33f2 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -35,6 +35,7 @@
./lib/rollback_index.c \
./lib/stateful_util.c \
./lib/tpm_lite/tlcl.c \
+ ./lib/utility.c \
./lib/vboot_common.c \
./lib/vboot_firmware.c \
./lib/vboot_kernel.c
diff --git a/firmware/include/utility.h b/firmware/include/utility.h
index 0e05ee3..a412fd8 100644
--- a/firmware/include/utility.h
+++ b/firmware/include/utility.h
@@ -54,6 +54,10 @@
/* Copy [n] bytes from [src] to [dest]. */
void* Memcpy(void* dest, const void* src, uint64_t n);
+
+/* Implementations of the functions below must be built as part of the firmware
+ * and defined in lib/utility.c */
+
/* Set [n] bytes starting at [s] to [c]. */
void* Memset(void *dest, const uint8_t c, uint64_t n);
@@ -72,5 +76,4 @@
#define memset _do_not_use_standard_memset
#endif
-
#endif /* VBOOT_REFERENCE_UTILITY_H_ */
diff --git a/firmware/lib/stateful_util.c b/firmware/lib/stateful_util.c
index 137ea77..1d824fc 100644
--- a/firmware/lib/stateful_util.c
+++ b/firmware/lib/stateful_util.c
@@ -2,8 +2,7 @@
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
- * Stub implementations of utility functions which call their linux-specific
- * equivalents.
+ * Implementations of stateful memory operations.
*/
#include "stateful_util.h"
diff --git a/firmware/lib/utility.c b/firmware/lib/utility.c
new file mode 100644
index 0000000..0ed9712
--- /dev/null
+++ b/firmware/lib/utility.c
@@ -0,0 +1,31 @@
+/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Utility functions that need to be built as part of the firmware.
+ */
+
+#include "utility.h"
+
+void* Memset(void* d, const uint8_t c, uint64_t n) {
+ uint8_t* dest = d; /* the only way to keep both cl and gcc happy */
+ while (n--) {
+ *dest++ = c;
+ }
+ return dest;
+}
+
+int SafeMemcmp(const void* s1, const void* s2, size_t n) {
+ int result = 0;
+ if (0 == n)
+ return 1;
+
+ const unsigned char* us1 = s1;
+ const unsigned char* us2 = s2;
+ /* Code snippet without data-dependent branch due to
+ * Nate Lawson (nate@root.org) of Root Labs. */
+ while (n--)
+ result |= *us1++ ^ *us2++;
+
+ return result != 0;
+}
diff --git a/firmware/stub/utility_stub.c b/firmware/stub/utility_stub.c
index ed58e0b..6141785 100644
--- a/firmware/stub/utility_stub.c
+++ b/firmware/stub/utility_stub.c
@@ -51,27 +51,3 @@
void* Memcpy(void* dest, const void* src, uint64_t n) {
return memcpy(dest, src, (size_t)n);
}
-
-void* Memset(void* d, const uint8_t c, uint64_t n) {
- uint8_t* dest = d; /* the only way to keep both cl and gcc happy */
- while (n--) {
- *dest++ = c;
- }
- return dest;
-}
-
-
-int SafeMemcmp(const void* s1, const void* s2, size_t n) {
- int result = 0;
- if (0 == n)
- return 1;
-
- const unsigned char* us1 = s1;
- const unsigned char* us2 = s2;
- /* Code snippet without data-dependent branch due to
- * Nate Lawson (nate@root.org) of Root Labs. */
- while (n--)
- result |= *us1++ ^ *us2++;
-
- return result != 0;
-}
diff --git a/firmware/version.c b/firmware/version.c
index b75fc3a..05cace3 100644
--- a/firmware/version.c
+++ b/firmware/version.c
@@ -1 +1 @@
-char* VbootVersion = "VBOOv=736cf3ee";
+char* VbootVersion = "VBOOv=834ce682";