
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 09/18/12 11:24, Marek Vasut wrote:
Dear Tom Rini,
On 09/18/12 11:01, Marek Vasut wrote:
Dear Tom Rini,
On 09/18/12 10:13, Marek Vasut wrote:
Dear Tom Rini,
On Mon, Sep 17, 2012 at 01:21:27AM +0200, Marek Vasut wrote: > Implement empty serial_* functions for SPL without > serial support enabled. This is imperative to haave > once serial multi is enabled unconditionally. > > Signed-off-by: Marek Vasut marex@denx.de Cc: Marek > Vasut marek.vasut@gmail.com Cc: Tom Rini > trini@ti.com --- > > common/serial.c | 12 ++++++++++++ 1 file changed, 12 > insertions(+) > > diff --git a/common/serial.c b/common/serial.c index > 631af65..cef4ba8 100644 --- a/common/serial.c +++ > b/common/serial.c @@ -27,6 +27,16 @@ > > #include <post.h> #include <linux/compiler.h> > > +/* Implement prototypes for SPL without serial support > */ +#if defined(CONFIG_SPL_BUILD) && > !defined(CONFIG_SPL_SERIAL_SUPPORT) +int > serial_init(void) { return 0; } +void > serial_setbrg(void) {} +int serial_getc(void) { return > 0; } +int serial_tstc(void) { return 0; } +void > serial_putc(const char c) {} +void serial_puts(const > char *s) {}
This isn't quite right. We need to allow for: - No output SPL, strings collected (so #defined to do{} while (0))
Which is not type-checked and will drag in bugs.
Scott has addressed this.
- puts + printf SPL (CONFIG_SPL_SERIAL_SUPPORT +
CONFIG_SPL_LIBCOMMON_SUPPORT) - puts only SPL (CONFIG_SPL_SERIAL_SUPPORT + #define puts serial_puts/putc).
I'm not asking you to do that, but you will have to adapt to it once Jose is done with it. What that means, off the top of my head, is we can just drop this patch as in the first and last case serial.o will be garbage-collected (or not built) and in the middle case, this will be fully used.
I can't drop this patch as it will break all of SPL when CONFIG_SERIAL_MULTI is unconditionally enabled.
Why is it breaking _all_ of SPL? Have you run-tested this anywhere, especially with SPL? In most cases it should be used and real functions provided or garbage collected away.
Yes, try compiling m28evk without this patch for example, it's going to break it. Because CONFIG_SPL_SERIAL_SUPPORT is disabled, yet it uses code that contains references to puts() etc.
Progress! Now, why isn't this file being garbage collected?
What file?
common/serial.o since as you point out, m28evk doesn't define any way to do output.
m28evk is fitting into the first category I said (no output) but now it's not discarding things that it should be discarding.
What is not discarding things and what things should be discarded? I believe if you're missing symbols, the compiler will error-out. Always.
Nope. This is fine: gc_this_function(void) { never_define_this_at_link(); return; }
And nothing calling gc_this_function means that it's fine that never_define_this_at_link isn't seen by the linker.
- -- Tom