Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4983096ybv; Wed, 26 Feb 2020 06:26:42 -0800 (PST) X-Google-Smtp-Source: APXvYqwP4QLsPS9YkCDFkfigTK8ePj/JubMUtcTfP8wO+GOdijA6fmc5btdihc2ZN7QdUocJNwfN X-Received: by 2002:a9d:760d:: with SMTP id k13mr3072661otl.42.1582727202526; Wed, 26 Feb 2020 06:26:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582727202; cv=none; d=google.com; s=arc-20160816; b=Q9HTyzfcAPypPMufcuC+h8j3rlWCLzPpLM8TlFe9nQphmZeo9epPtyYdZ4FtPE1RUZ TbkXbVdOTnTlXr9bpfw5SxIECoMaQ9ffw+Oj/byCdVQwhyUox/OehVIQ2H5WmtRXk412 cSHy0WAmQFtYho8KDhSrZf+dzkuOhHvY1aiCRuGitAtyZVfOfKpvvZQe4W3z01/Zqg/e 9KVaTEGd9750v1MrAgKECsM9OgU8af8Hc0EtzsthQwSFi5byjm5gzkCDVP3nniNkAkJB JtNSxb3GovmY133CuW97X2p8TwzXahkQ6KqqWSXIPzpEf48HIX1GYg30qqq5+4dqmjgy CpFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=mdqI6MUGud74Pll421D53JJjh4j1XHjPJTV5lY0w1Vw=; b=LIgegZ0orLujCgUaL0UX2buDaaXMDPNRmVqep+n+mKRgscGR0FYtnJLks1ZkJqiSCS 6Nr4iFmTbjKaPi7BB+XofJsyhRx6l6xf4I7CtNuKf93O9TN+ZK72/kEXOSI91T83NyOu yqm9NpOKrkGd/JrsQA2+1w6uyIx2qRGPoMjlg+tT41R8tz1SW6ze9dJqjxilfJit5fpH r5fH5ZotX7zJ9f/d7RcyxwYuAJnOd+emjeulREi0ceXyGeer2U/lvUxG9UTrgW6MvxDs buj9TMI/uwegnTB3FJBxYhEB6RvINwdSS1bt4S5bezlU3ritQ8PkmEHEugsodCAcd84V BdLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fJMMYe1q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z23si1358140oti.34.2020.02.26.06.26.30; Wed, 26 Feb 2020 06:26:42 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fJMMYe1q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727479AbgBZO0Y (ORCPT + 99 others); Wed, 26 Feb 2020 09:26:24 -0500 Received: from mail.kernel.org ([198.145.29.99]:38884 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727198AbgBZO0Y (ORCPT ); Wed, 26 Feb 2020 09:26:24 -0500 Received: from linux-8ccs.suse.de (p5B2812F9.dip0.t-ipconnect.de [91.40.18.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CE9872467B; Wed, 26 Feb 2020 14:26:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582727182; bh=ytxePLeD/G96wACd0ePqTIXUsy4t44NP+Ducb61scBw=; h=From:To:Cc:Subject:Date:From; b=fJMMYe1qLwKI93WYdUmmFjlo1xgvL1rfmeukwTO99xkOnReuh/b9kRbMinyEkPB/x uFr6KS4S3xzHVBcqu+/CvbzVm4FihrnpDtL9D8wqWhW0373kFDcXKKiUU6R9wst/MV YpTlW5tA26wLFlGkMoFvfeTdXRGs2Xs28QMJkBeQ= From: Jessica Yu To: Masahiro Yamada Cc: Matthias Maennich , Joe Perches , linux-kernel@vger.kernel.org, Jessica Yu Subject: [PATCH v2 1/2] modpost: rework and consolidate logging interface Date: Wed, 26 Feb 2020 15:26:07 +0100 Message-Id: <20200226142608.19499-1-jeyu@kernel.org> X-Mailer: git-send-email 2.16.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rework modpost's logging interface by consolidating merror(), warn(), and fatal() to use a single function, modpost_log(). Introduce different logging levels (WARN, ERROR, FATAL) as well as a conditional warn (warn_unless()). The conditional warn is useful in determining whether to use merror() or warn() based on a condition. This reduces code duplication overall. Signed-off-by: Jessica Yu --- v2: - modpost_log: initialize level to "" - remove parens () from case labels scripts/mod/modpost.c | 69 +++++++++++++++++++++++---------------------------- scripts/mod/modpost.h | 22 +++++++++++++--- 2 files changed, 50 insertions(+), 41 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 7edfdb2f4497..3201a2ac5cc4 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -51,41 +51,37 @@ enum export { #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr)) -#define PRINTF __attribute__ ((format (printf, 1, 2))) +#define PRINTF __attribute__ ((format (printf, 2, 3))) -PRINTF void fatal(const char *fmt, ...) +PRINTF void modpost_log(enum loglevel loglevel, const char *fmt, ...) { + char *level = ""; va_list arglist; - fprintf(stderr, "FATAL: "); - - va_start(arglist, fmt); - vfprintf(stderr, fmt, arglist); - va_end(arglist); - - exit(1); -} - -PRINTF void warn(const char *fmt, ...) -{ - va_list arglist; + switch(loglevel) { + case LOG_WARN: + level = "WARNING: "; + break; + case LOG_ERROR: + level = "ERROR: "; + break; + case LOG_FATAL: + level = "FATAL: "; + break; + default: /* invalid loglevel, ignore */ + break; + } - fprintf(stderr, "WARNING: "); + fprintf(stderr, level); + fprintf(stderr, "modpost: "); va_start(arglist, fmt); vfprintf(stderr, fmt, arglist); va_end(arglist); -} -PRINTF void merror(const char *fmt, ...) -{ - va_list arglist; - - fprintf(stderr, "ERROR: "); + if (loglevel == LOG_FATAL) + exit(1); - va_start(arglist, fmt); - vfprintf(stderr, fmt, arglist); - va_end(arglist); } static inline bool strends(const char *str, const char *postfix) @@ -113,7 +109,7 @@ static int is_vmlinux(const char *modname) void *do_nofail(void *ptr, const char *expr) { if (!ptr) - fatal("modpost: Memory allocation failure: %s.\n", expr); + fatal("Memory allocation failure: %s.\n", expr); return ptr; } @@ -2021,7 +2017,7 @@ static void read_symbols(const char *modname) license = get_modinfo(&info, "license"); if (!license && !is_vmlinux(modname)) - warn("modpost: missing MODULE_LICENSE() in %s\n" + warn("missing MODULE_LICENSE() in %s\n" "see include/linux/module.h for " "more information\n", modname); while (license) { @@ -2152,15 +2148,15 @@ static void check_for_gpl_usage(enum export exp, const char *m, const char *s) switch (exp) { case export_gpl: - fatal("modpost: GPL-incompatible module %s%s " + fatal("GPL-incompatible module %s%s " "uses GPL-only symbol '%s'\n", m, e, s); break; case export_unused_gpl: - fatal("modpost: GPL-incompatible module %s%s " + fatal("GPL-incompatible module %s%s " "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s); break; case export_gpl_future: - warn("modpost: GPL-incompatible module %s%s " + warn("GPL-incompatible module %s%s " "uses future GPL-only symbol '%s'\n", m, e, s); break; case export_plain: @@ -2178,7 +2174,7 @@ static void check_for_unused(enum export exp, const char *m, const char *s) switch (exp) { case export_unused: case export_unused_gpl: - warn("modpost: module %s%s " + warn("module %s%s " "uses symbol '%s' marked UNUSED\n", m, e, s); break; default: @@ -2197,14 +2193,11 @@ static int check_exports(struct module *mod) exp = find_symbol(s->name); if (!exp || exp->module == mod) { if (have_vmlinux && !s->weak) { - if (warn_unresolved) { - warn("\"%s\" [%s.ko] undefined!\n", - s->name, mod->name); - } else { - merror("\"%s\" [%s.ko] undefined!\n", - s->name, mod->name); + warn_unless(!warn_unresolved, + "\"%s\" [%s.ko] undefined!\n", + s->name, mod->name); + if (!warn_unresolved) err = 1; - } } continue; } @@ -2653,7 +2646,7 @@ int main(int argc, char **argv) if (dump_write) write_dump(dump_write); if (sec_mismatch_count && sec_mismatch_fatal) - fatal("modpost: Section mismatches detected.\n" + fatal("Section mismatches detected.\n" "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n"); for (n = 0; n < SYMBOL_HASH_SIZE; n++) { struct symbol *s; diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 64a82d2d85f6..631d07714f7a 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -198,6 +198,22 @@ void *grab_file(const char *filename, unsigned long *size); char* get_next_line(unsigned long *pos, void *file, unsigned long size); void release_file(void *file, unsigned long size); -void fatal(const char *fmt, ...); -void warn(const char *fmt, ...); -void merror(const char *fmt, ...); +enum loglevel { + LOG_WARN, + LOG_ERROR, + LOG_FATAL +}; + +void modpost_log(enum loglevel loglevel, const char *fmt, ...); + +#define warn(fmt, args...) modpost_log(LOG_WARN, fmt, ##args) +#define merror(fmt, args...) modpost_log(LOG_ERROR, fmt, ##args) +#define fatal(fmt, args...) modpost_log(LOG_FATAL, fmt, ##args) +/* Warn unless condition is true, then use merror() */ +#define warn_unless(condition, fmt, args...) \ +do { \ + if (condition) \ + merror(fmt, ##args); \ + else \ + warn(fmt, ##args); \ +} while (0) -- 2.16.4