From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
Ingo Molnar <mingo@redhat.com>,
linux-kernel@vger.kernel.org,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Subject: Re: [PATCH] trace: don't use __weak in header files
Date: Fri, 13 Mar 2015 20:39:05 +0900 [thread overview]
Message-ID: <5502CC59.5000600@hitachi.com> (raw)
In-Reply-To: <20150312111419.7315150f@gandalf.local.home>
(2015/03/13 0:14), Steven Rostedt wrote:
>
> Masami and Srikar,
>
> Can I get your ACKs for this?
Yes, looks good and clean to me :)
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Thanks!
>
> Thanks,
>
> -- Steve
>
>
> On Thu, 12 Mar 2015 16:58:34 +1100
> Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
>> The commit that added a check for this to checkpatch says:
>>
>> "Using weak declarations can have unintended link defects. The __weak on
>> the declaration causes non-weak definitions to become weak."
>>
>> In this case, when a PowerPC kernel is built with CONFIG_KPROBE_EVENT
>> but not CONFIG_UPROBE_EVENT, it generates the following warning:
>>
>> WARNING: 1 bad relocations
>> c0000000014f2190 R_PPC64_ADDR64 uprobes_fetch_type_table
>>
>> This is fixed by passing the fetch_table arrays to
>> traceprobe_parse_probe_arg() which also means that they can never be NULL.
>>
>> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
>> ---
>> kernel/trace/trace_kprobe.c | 5 +++--
>> kernel/trace/trace_probe.c | 19 +++++++------------
>> kernel/trace/trace_probe.h | 10 ++--------
>> kernel/trace/trace_uprobe.c | 5 +++--
>> 4 files changed, 15 insertions(+), 24 deletions(-)
>>
>> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
>> index 5edb518be345..e6f9cbf4388d 100644
>> --- a/kernel/trace/trace_kprobe.c
>> +++ b/kernel/trace/trace_kprobe.c
>> @@ -250,7 +250,7 @@ DEFINE_FETCH_symbol(string_size)
>> #define fetch_file_offset_string_size NULL
>>
>> /* Fetch type information table */
>> -const struct fetch_type kprobes_fetch_type_table[] = {
>> +static const struct fetch_type kprobes_fetch_type_table[] = {
>> /* Special types */
>> [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string,
>> sizeof(u32), 1, "__data_loc char[]"),
>> @@ -760,7 +760,8 @@ static int create_trace_kprobe(int argc, char **argv)
>>
>> /* Parse fetch argument */
>> ret = traceprobe_parse_probe_arg(arg, &tk->tp.size, parg,
>> - is_return, true);
>> + is_return, true,
>> + kprobes_fetch_type_table);
>> if (ret) {
>> pr_info("Parse error at argument[%d]. (%d)\n", i, ret);
>> goto error;
>> diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
>> index b983b2fd2ca1..1769a81da8a7 100644
>> --- a/kernel/trace/trace_probe.c
>> +++ b/kernel/trace/trace_probe.c
>> @@ -356,17 +356,14 @@ static int parse_probe_vars(char *arg, const struct fetch_type *t,
>>
>> /* Recursive argument parser */
>> static int parse_probe_arg(char *arg, const struct fetch_type *t,
>> - struct fetch_param *f, bool is_return, bool is_kprobe)
>> + struct fetch_param *f, bool is_return, bool is_kprobe,
>> + const struct fetch_type *ftbl)
>> {
>> - const struct fetch_type *ftbl;
>> unsigned long param;
>> long offset;
>> char *tmp;
>> int ret = 0;
>>
>> - ftbl = is_kprobe ? kprobes_fetch_type_table : uprobes_fetch_type_table;
>> - BUG_ON(ftbl == NULL);
>> -
>> switch (arg[0]) {
>> case '$':
>> ret = parse_probe_vars(arg + 1, t, f, is_return, is_kprobe);
>> @@ -447,7 +444,7 @@ static int parse_probe_arg(char *arg, const struct fetch_type *t,
>> dprm->fetch_size = get_fetch_size_function(t,
>> dprm->fetch, ftbl);
>> ret = parse_probe_arg(arg, t2, &dprm->orig, is_return,
>> - is_kprobe);
>> + is_kprobe, ftbl);
>> if (ret)
>> kfree(dprm);
>> else {
>> @@ -505,15 +502,12 @@ static int __parse_bitfield_probe_arg(const char *bf,
>>
>> /* String length checking wrapper */
>> int traceprobe_parse_probe_arg(char *arg, ssize_t *size,
>> - struct probe_arg *parg, bool is_return, bool is_kprobe)
>> + struct probe_arg *parg, bool is_return, bool is_kprobe,
>> + const struct fetch_type *ftbl)
>> {
>> - const struct fetch_type *ftbl;
>> const char *t;
>> int ret;
>>
>> - ftbl = is_kprobe ? kprobes_fetch_type_table : uprobes_fetch_type_table;
>> - BUG_ON(ftbl == NULL);
>> -
>> if (strlen(arg) > MAX_ARGSTR_LEN) {
>> pr_info("Argument is too long.: %s\n", arg);
>> return -ENOSPC;
>> @@ -535,7 +529,8 @@ int traceprobe_parse_probe_arg(char *arg, ssize_t *size,
>> }
>> parg->offset = *size;
>> *size += parg->type->size;
>> - ret = parse_probe_arg(arg, parg->type, &parg->fetch, is_return, is_kprobe);
>> + ret = parse_probe_arg(arg, parg->type, &parg->fetch, is_return,
>> + is_kprobe, ftbl);
>>
>> if (ret >= 0 && t != NULL)
>> ret = __parse_bitfield_probe_arg(t, parg->type, &parg->fetch);
>> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
>> index 4f815fbce16d..e30f6cce4af6 100644
>> --- a/kernel/trace/trace_probe.h
>> +++ b/kernel/trace/trace_probe.h
>> @@ -229,13 +229,6 @@ ASSIGN_FETCH_FUNC(file_offset, ftype), \
>> #define FETCH_TYPE_STRING 0
>> #define FETCH_TYPE_STRSIZE 1
>>
>> -/*
>> - * Fetch type information table.
>> - * It's declared as a weak symbol due to conditional compilation.
>> - */
>> -extern __weak const struct fetch_type kprobes_fetch_type_table[];
>> -extern __weak const struct fetch_type uprobes_fetch_type_table[];
>> -
>> #ifdef CONFIG_KPROBE_EVENT
>> struct symbol_cache;
>> unsigned long update_symbol_cache(struct symbol_cache *sc);
>> @@ -333,7 +326,8 @@ find_event_file_link(struct trace_probe *tp, struct ftrace_event_file *file)
>> }
>>
>> extern int traceprobe_parse_probe_arg(char *arg, ssize_t *size,
>> - struct probe_arg *parg, bool is_return, bool is_kprobe);
>> + struct probe_arg *parg, bool is_return, bool is_kprobe,
>> + const struct fetch_type *ftbl);
>>
>> extern int traceprobe_conflict_field_name(const char *name,
>> struct probe_arg *args, int narg);
>> diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
>> index 8520acc34b18..be8a7b1947d8 100644
>> --- a/kernel/trace/trace_uprobe.c
>> +++ b/kernel/trace/trace_uprobe.c
>> @@ -196,7 +196,7 @@ DEFINE_FETCH_file_offset(string)
>> DEFINE_FETCH_file_offset(string_size)
>>
>> /* Fetch type information table */
>> -const struct fetch_type uprobes_fetch_type_table[] = {
>> +static const struct fetch_type uprobes_fetch_type_table[] = {
>> /* Special types */
>> [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string,
>> sizeof(u32), 1, "__data_loc char[]"),
>> @@ -535,7 +535,8 @@ static int create_trace_uprobe(int argc, char **argv)
>>
>> /* Parse fetch argument */
>> ret = traceprobe_parse_probe_arg(arg, &tu->tp.size, parg,
>> - is_return, false);
>> + is_return, false,
>> + uprobes_fetch_type_table);
>> if (ret) {
>> pr_info("Parse error at argument[%d]. (%d)\n", i, ret);
>> goto error;
>
>
--
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
prev parent reply other threads:[~2015-03-13 11:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-12 5:58 [PATCH] trace: don't use __weak in header files Stephen Rothwell
2015-03-12 15:14 ` Steven Rostedt
2015-03-13 11:39 ` Masami Hiramatsu [this message]
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=5502CC59.5000600@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sfr@canb.auug.org.au \
--cc=srikar@linux.vnet.ibm.com \
/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.