From: Michal Marek <mmarek@suse.com>
To: Nicolas Pitre <nicolas.pitre@linaro.org>
Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 5/8] kbuild: add fine grained build dependencies for exported symbols
Date: Fri, 4 Mar 2016 11:10:59 +0100 [thread overview]
Message-ID: <56D95F33.4050800@suse.com> (raw)
In-Reply-To: <alpine.LFD.2.20.1603032053490.13632@knanqh.ubzr>
On 2016-03-04 03:46, Nicolas Pitre wrote:
> On Thu, 3 Mar 2016, Michal Marek wrote:
>
>> Dne 29.2.2016 v 04:48 Nicolas Pitre napsal(a):
>>> +# Filter out exported kernel symbol names advertised as warning pragmas
>>> +# by the preprocessor and write them to $(1). We must consider continuation
>>> +# lines as well: they start with a blank, or the preceeding line ends with
>>> +# a ':'. Anything else is passed through as is.
>>> +# See also __KSYM_DEP() in include/linux/export.h.
>>> +ksym_dep_filter = sed -n \
>>> + -e '1 {x; $$!d}' \
>>> + -e '/^ / {H; $$!d}' \
>>> + -e 'x; /:$$/ {x; H; $$!d; s/^/ /; x}' \
>>> + -e ':filter; /^.*KBUILD_AUTOKSYM_DEP: /! {p; b next}' \
>>> + -e 's//KSYM_/; s/\n.*//; w $(1)' \
>>> + -e ':next; $$!d' \
>>> + -e '1 q; s/^/ /; x; /^ /! b filter'
>>
>> This is unreadable and it does not work with my gcc version. I get
>> dependencies like
>>
>> $(wildcard include/config/ksym/simple/strtoull [enabled by default].h) \
>
> That's too bad. This had almost zero overhead as the preprocessor
> didn't have to be executed twice.
I know you are trying to collect the exports in a single pass, but
parsing the compiler warnings is really fragile.
> Probably adding s/ .*//; before w $(1) would fix that. But I agree this
> is fragile. What gcc version is this?
$ gcc --version
gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064]
...
The output looks like this:
$ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | gcc
-Wall -c -xc -
<stdin>:1:13: warning: KBUILD_AUTOKSYM_DEP: test [enabled by default]
Clang output is similar, except that the text appears twice in the output:
$ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | clang
-Wall -c -xc -
<stdin>:1:1: warning: KBUILD_AUTOKSYM_DEP: test [-W#pragma-messages]
_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")
^
<scratch space>:2:6: note: expanded from here
GCC warning "KBUILD_AUTOKSYM_DEP: test"
^
What is worse, older gccs do not support the GCC warning pragma:
$ gcc --version
gcc (GCC) 4.1.2 20070115 (SUSE Linux)
...
$ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | gcc
-Wall -c -xc -
<stdin>:1: warning: ignoring #pragma GCC warning
> Oh and who said that a sed script had to, or could be readable? ;-)
I guess I could live with a non-redable sed script embedded in a
Makefile, if I knew that it won't need updating for each new compiler
release :).
Michal
next prev parent reply other threads:[~2016-03-04 10:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-29 3:48 [PATCH v4 0/8] [PULL REQUEST] Trim unused exported kernel symbols Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 1/8] kbuild: record needed exported symbols for modules Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 2/8] allow for per-symbol configurable EXPORT_SYMBOL() Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 3/8] fixdep: accept extra dependencies on stdin Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 4/8] kbuild: de-duplicate fixdep usage Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 5/8] kbuild: add fine grained build dependencies for exported symbols Nicolas Pitre
2016-03-03 22:57 ` Michal Marek
2016-03-04 2:46 ` Nicolas Pitre
2016-03-04 10:10 ` Michal Marek [this message]
2016-02-29 3:48 ` [PATCH v4 6/8] create/adjust generated/autoksyms.h Nicolas Pitre
2016-03-03 22:14 ` Michal Marek
2016-03-04 1:53 ` Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 7/8] kbuild: build sample modules along with the rest of the kernel Nicolas Pitre
2016-02-29 3:48 ` [PATCH v4 8/8] kconfig option for TRIM_UNUSED_KSYMS Nicolas Pitre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56D95F33.4050800@suse.com \
--to=mmarek@suse.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.pitre@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.