console: Allow using vprintk() with disabled console

The prototype of vprintk() is currently declared unconditionally, which
prevents it from being used in situations where the console is disabled.
The code will compile correctly, but not link, since the definition in
console.c isn't being provided. This adds a shim around the declaration
so that, like printk(), a call to vprintk() in this situation will expand
to a no-op function instead.

Change-Id: Ib4a9aa96a5b9dbb9b937ff45854bf6a407938b37
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/33181
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martinroth@google.com>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Jacob Garber 2019-06-03 15:19:47 -06:00 committed by Patrick Georgi
parent 913437e8a2
commit deb99af8a1
2 changed files with 7 additions and 6 deletions

View File

@ -45,7 +45,7 @@ static void wrap_putchar_cbmemc(unsigned char byte, void *data)
__cbmemc_tx_byte(byte); __cbmemc_tx_byte(byte);
} }
int vprintk(int msg_level, const char *fmt, va_list args) int do_vprintk(int msg_level, const char *fmt, va_list args)
{ {
int i, log_this; int i, log_this;
@ -91,7 +91,7 @@ int do_printk(int msg_level, const char *fmt, ...)
int i; int i;
va_start(args, fmt); va_start(args, fmt);
i = vprintk(msg_level, fmt, args); i = do_vprintk(msg_level, fmt, args);
va_end(args); va_end(args);
return i; return i;

View File

@ -63,8 +63,8 @@ asmlinkage void console_init(void);
int console_log_level(int msg_level); int console_log_level(int msg_level);
void do_putchar(unsigned char byte); void do_putchar(unsigned char byte);
#define printk(LEVEL, fmt, args...) \ #define printk(LEVEL, fmt, args...) do_printk(LEVEL, fmt, ##args)
do { do_printk(LEVEL, fmt, ##args); } while (0) #define vprintk(LEVEL, fmt, args) do_vprintk(LEVEL, fmt, args)
enum { CONSOLE_LOG_NONE = 0, CONSOLE_LOG_FAST, CONSOLE_LOG_ALL }; enum { CONSOLE_LOG_NONE = 0, CONSOLE_LOG_FAST, CONSOLE_LOG_ALL };
@ -84,14 +84,15 @@ static inline int get_console_loglevel(void)
static inline void console_init(void) {} static inline void console_init(void) {}
static inline int console_log_level(int msg_level) { return 0; } static inline int console_log_level(int msg_level) { return 0; }
static inline void printk(int LEVEL, const char *fmt, ...) {} static inline void printk(int LEVEL, const char *fmt, ...) {}
static inline void vprintk(int LEVEL, const char *fmt, va_list args) {}
static inline void do_putchar(unsigned char byte) {} static inline void do_putchar(unsigned char byte) {}
#endif #endif
int vprintk(int msg_level, const char *fmt, va_list args);
int do_printk(int msg_level, const char *fmt, ...) int do_printk(int msg_level, const char *fmt, ...)
__attribute__((format(printf, 2, 3))); __attribute__((format(printf, 2, 3)));
int do_vprintk(int msg_level, const char *fmt, va_list args);
#endif /* !__ROMCC__ */ #endif /* !__ROMCC__ */
#endif /* CONSOLE_CONSOLE_H_ */ #endif /* CONSOLE_CONSOLE_H_ */