[PATCH 1/2] printf: Hack to support gcc printf() optimization

Christian Vogel vogelchr at vogel.cx
Sat Jan 28 21:40:30 CET 2012


gcc optimizes printf("x") to putchar('x'), but we #define
putchar to be something else.

Now lib/printf.c defines a putchar() function that always prints
on the sercomm port, it will break uart consoles.
---
 src/target/firmware/lib/printf.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/target/firmware/lib/printf.c b/src/target/firmware/lib/printf.c
index a4fc687..887b5b4 100644
--- a/src/target/firmware/lib/printf.c
+++ b/src/target/firmware/lib/printf.c
@@ -17,3 +17,19 @@ int printf(const char *fmt, ...)
 
 	return r;
 }
+
+/* HACK: we define putchar to be sercomm_putchar,
+ * but gcc optimizes printf("x") to putchar('x')
+ * so it will generate a call to the function putchar().
+ *
+ * Note: This will break non-sercomm consoles!
+ */
+
+#ifdef putchar
+#undef putchar
+
+int putchar(char c){
+	return sercomm_putchar(c);
+}
+
+#endif
-- 
1.7.0.4




More information about the baseband-devel mailing list