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";