tools/perf/builtin-annotate.c | 2 +- tools/perf/builtin-buildid-list.c | 2 +- tools/perf/builtin-c2c.c | 2 +- tools/perf/builtin-data.c | 2 +- tools/perf/builtin-diff.c | 2 +- tools/perf/builtin-evlist.c | 2 +- tools/perf/builtin-help.c | 1 + tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-kvm.c | 1 + tools/perf/builtin-kwork.c | 2 +- tools/perf/builtin-mem.c | 2 +- tools/perf/builtin-sched.c | 2 +- tools/perf/builtin-stat.c | 2 +- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-version.c | 7 +++---- tools/perf/builtin.h | 3 --- tools/perf/perf.c | 27 +-------------------------- tools/perf/perf.h | 9 --------- tools/perf/ui/browsers/hists.c | 2 +- tools/perf/ui/hist.c | 2 +- tools/perf/ui/setup.c | 19 +++++++++++++++++++ tools/perf/ui/tui/setup.c | 1 - tools/perf/ui/ui.h | 3 +++ tools/perf/util/cs-etm.c | 1 + tools/perf/util/event.c | 2 +- tools/perf/util/evlist.c | 1 + tools/perf/util/header.h | 2 ++ tools/perf/util/parse-events.c | 2 +- tools/perf/util/session.c | 2 +- tools/perf/util/top.c | 2 +- tools/perf/util/usage.c | 6 ++++++ tools/perf/util/util.c | 2 ++ tools/perf/util/util.h | 8 ++++++++ 33 files changed, 66 insertions(+), 61 deletions(-)
When fuzzing something like parse-events, having the main function in perf.c alongside global variables like input_name means that input_name must be redeclared with the fuzzer function's main. However, as the fuzzer is using the tools/perf code as a library this causes backward linking reference that the linker may warn about. Reorganize perf.c and perf.h to avoid potential backward references, or so that the declaration/definition locations are more consistent. Ian Rogers (6): perf ui: Move window resize signal functions perf usage: Move usage strings perf header: Move perf_version_string declaration perf version: Use regular verbose flag perf util: Move input_name to util perf util: Move perf_guest/host declarations tools/perf/builtin-annotate.c | 2 +- tools/perf/builtin-buildid-list.c | 2 +- tools/perf/builtin-c2c.c | 2 +- tools/perf/builtin-data.c | 2 +- tools/perf/builtin-diff.c | 2 +- tools/perf/builtin-evlist.c | 2 +- tools/perf/builtin-help.c | 1 + tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-kvm.c | 1 + tools/perf/builtin-kwork.c | 2 +- tools/perf/builtin-mem.c | 2 +- tools/perf/builtin-sched.c | 2 +- tools/perf/builtin-stat.c | 2 +- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-version.c | 7 +++---- tools/perf/builtin.h | 3 --- tools/perf/perf.c | 27 +-------------------------- tools/perf/perf.h | 9 --------- tools/perf/ui/browsers/hists.c | 2 +- tools/perf/ui/hist.c | 2 +- tools/perf/ui/setup.c | 19 +++++++++++++++++++ tools/perf/ui/tui/setup.c | 1 - tools/perf/ui/ui.h | 3 +++ tools/perf/util/cs-etm.c | 1 + tools/perf/util/event.c | 2 +- tools/perf/util/evlist.c | 1 + tools/perf/util/header.h | 2 ++ tools/perf/util/parse-events.c | 2 +- tools/perf/util/session.c | 2 +- tools/perf/util/top.c | 2 +- tools/perf/util/usage.c | 6 ++++++ tools/perf/util/util.c | 2 ++ tools/perf/util/util.h | 8 ++++++++ 33 files changed, 66 insertions(+), 61 deletions(-) -- 2.40.0.348.gf938b09366-goog
On 28/03/23 04:40, Ian Rogers wrote:
> When fuzzing something like parse-events, having the main function in
> perf.c alongside global variables like input_name means that
> input_name must be redeclared with the fuzzer function's
> main. However, as the fuzzer is using the tools/perf code as a library
> this causes backward linking reference that the linker may warn
> about. Reorganize perf.c and perf.h to avoid potential backward
> references, or so that the declaration/definition locations are more
> consistent.
>
Seems like it could be a pain to maintain.
Did you consider just adding:
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 82bbe0ca858b..a75dd47d68ee 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -456,6 +456,7 @@ static int libperf_print(enum libperf_print_level level,
return veprintf(level, verbose, fmt, ap);
}
+#ifndef CUSTOM_MAIN
int main(int argc, const char **argv)
{
int err;
@@ -576,3 +577,4 @@ int main(int argc, const char **argv)
out:
return 1;
}
+#endif
On Tue, Mar 28, 2023 at 6:24 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 28/03/23 04:40, Ian Rogers wrote:
> > When fuzzing something like parse-events, having the main function in
> > perf.c alongside global variables like input_name means that
> > input_name must be redeclared with the fuzzer function's
> > main. However, as the fuzzer is using the tools/perf code as a library
> > this causes backward linking reference that the linker may warn
> > about. Reorganize perf.c and perf.h to avoid potential backward
> > references, or so that the declaration/definition locations are more
> > consistent.
> >
>
> Seems like it could be a pain to maintain.
>
> Did you consider just adding:
>
> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
> index 82bbe0ca858b..a75dd47d68ee 100644
> --- a/tools/perf/perf.c
> +++ b/tools/perf/perf.c
> @@ -456,6 +456,7 @@ static int libperf_print(enum libperf_print_level level,
> return veprintf(level, verbose, fmt, ap);
> }
>
> +#ifndef CUSTOM_MAIN
> int main(int argc, const char **argv)
> {
> int err;
> @@ -576,3 +577,4 @@ int main(int argc, const char **argv)
> out:
> return 1;
> }
> +#endif
>
It's possible. Would need to make the static functions not warn about
being declared and not used. I still think that just aligning
definitions and declarations yields the most expected code and will
lead to fewer problems in the long run.
Thanks,
Ian
On 28/03/23 19:14, Ian Rogers wrote:
> On Tue, Mar 28, 2023 at 6:24 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 28/03/23 04:40, Ian Rogers wrote:
>>> When fuzzing something like parse-events, having the main function in
>>> perf.c alongside global variables like input_name means that
>>> input_name must be redeclared with the fuzzer function's
>>> main. However, as the fuzzer is using the tools/perf code as a library
>>> this causes backward linking reference that the linker may warn
>>> about. Reorganize perf.c and perf.h to avoid potential backward
>>> references, or so that the declaration/definition locations are more
>>> consistent.
>>>
>>
>> Seems like it could be a pain to maintain.
>>
>> Did you consider just adding:
>>
>> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
>> index 82bbe0ca858b..a75dd47d68ee 100644
>> --- a/tools/perf/perf.c
>> +++ b/tools/perf/perf.c
>> @@ -456,6 +456,7 @@ static int libperf_print(enum libperf_print_level level,
>> return veprintf(level, verbose, fmt, ap);
>> }
>>
>> +#ifndef CUSTOM_MAIN
>> int main(int argc, const char **argv)
>> {
>> int err;
>> @@ -576,3 +577,4 @@ int main(int argc, const char **argv)
>> out:
>> return 1;
>> }
>> +#endif
>>
>
> It's possible. Would need to make the static functions not warn about
> being declared and not used. I still think that just aligning
> definitions and declarations yields the most expected code and will
> lead to fewer problems in the long run.
Making perf source dependent on an unknown derivative makes
things more complicated.
If you are not going to contribute it to perf, then a
suggestion is along the lines of the following:
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 82bbe0ca858b..6a7fe1534664 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -456,7 +456,18 @@ static int libperf_print(enum libperf_print_level level,
return veprintf(level, verbose, fmt, ap);
}
$ git diff
+#ifdef CUSTOM_MAIN
+int main(void)
+{
+ printf("This is not perf\n");
+ return 0;
+}
+
+int perf_main(int argc, const char **argv);
+int perf_main(int argc, const char **argv)
+#else
int main(int argc, const char **argv)
+#endif
{
int err;
const char *cmd;
$ make EXTRA_CFLAGS="-DCUSTOM_MAIN" NO_BPF_SKEL=1 -C tools/perf >/dev/null
Warning: Kernel ABI header at 'tools/include/uapi/linux/in.h' differs from latest version at 'include/uapi/linux/in.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
Warning: Kernel ABI header at 'tools/arch/arm64/include/uapi/asm/perf_regs.h' differs from latest version at 'arch/arm64/include/uapi/asm/perf_regs.h'
Warning: Kernel ABI header at 'tools/include/linux/coresight-pmu.h' differs from latest version at 'include/linux/coresight-pmu.h'
Makefile.config:587: No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev
Makefile.config:805: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev
Makefile.config:1046: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
Makefile.config:1075: No alternatives command found, you need to set JDIR= to point to the root of your Java directory
Makefile.config:1137: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
$ tools/perf/perf version
This is not perf
On Tue, Mar 28, 2023 at 10:12 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 28/03/23 19:14, Ian Rogers wrote:
> > On Tue, Mar 28, 2023 at 6:24 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
> >>
> >> On 28/03/23 04:40, Ian Rogers wrote:
> >>> When fuzzing something like parse-events, having the main function in
> >>> perf.c alongside global variables like input_name means that
> >>> input_name must be redeclared with the fuzzer function's
> >>> main. However, as the fuzzer is using the tools/perf code as a library
> >>> this causes backward linking reference that the linker may warn
> >>> about. Reorganize perf.c and perf.h to avoid potential backward
> >>> references, or so that the declaration/definition locations are more
> >>> consistent.
> >>>
> >>
> >> Seems like it could be a pain to maintain.
> >>
> >> Did you consider just adding:
> >>
> >> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
> >> index 82bbe0ca858b..a75dd47d68ee 100644
> >> --- a/tools/perf/perf.c
> >> +++ b/tools/perf/perf.c
> >> @@ -456,6 +456,7 @@ static int libperf_print(enum libperf_print_level level,
> >> return veprintf(level, verbose, fmt, ap);
> >> }
> >>
> >> +#ifndef CUSTOM_MAIN
> >> int main(int argc, const char **argv)
> >> {
> >> int err;
> >> @@ -576,3 +577,4 @@ int main(int argc, const char **argv)
> >> out:
> >> return 1;
> >> }
> >> +#endif
> >>
> >
> > It's possible. Would need to make the static functions not warn about
> > being declared and not used. I still think that just aligning
> > definitions and declarations yields the most expected code and will
> > lead to fewer problems in the long run.
>
> Making perf source dependent on an unknown derivative makes
> things more complicated.
>
> If you are not going to contribute it to perf, then a
> suggestion is along the lines of the following:
There's not an issue with contribution, most of the fuzzers are very
simple. For example, here is the coresight fuzzer we run:
```
#include <fuzzer/FuzzedDataProvider.h>
extern "C" {
#include "tools/perf/util/cs-etm-decoder/cs-etm-decoder.h"
}
static void null_packet_dump(const char *) {}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FuzzedDataProvider fdp(data, size);
int num_cpu = fdp.ConsumeIntegralInRange(1, 1024);
struct cs_etm_decoder_params d_params;
std::unique_ptr<struct cs_etm_trace_params[]>
t_params(new cs_etm_trace_params[num_cpu]);
for(int i=0; i < num_cpu; ++i) {
t_params[i].protocol =
fdp.ConsumeIntegralInRange(static_cast<int>(CS_ETM_PROTO_ETMV3)
,
static_cast<int>(CS_ETM_PROTO_PTM));
fdp.ConsumeData(&t_params[i].etmv4, sizeof(struct cs_etmv4_trace_params));
}
d_params.packet_printer = null_packet_dump;
d_params.operation = CS_ETM_OPERATION_DECODE;
d_params.data = NULL;
d_params.formatted = true;
d_params.fsyncs = false;
d_params.hsyncs = false;
d_params.frame_aligned = true;
std::unique_ptr<struct cs_etm_decoder, decltype(&cs_etm_decoder__free)>
decoder(cs_etm_decoder__new(num_cpu, &d_params, t_params.get()),
cs_etm_decoder__free);
if (decoder == nullptr)
return 0;
do {
size_t consumed;
uint8_t buf[1024];
size_t len = fdp.ConsumeData(buf, sizeof(buf));
int ret = cs_etm_decoder__process_data_block(
decoder.get(), 0, buf, len, &consumed);
if (ret)
return 0;
} while (fdp.remaining_bytes() > 0);
return 0;
}
```
Most of the code is boiler plate around a single function call. The
issues are build support, where to put the fuzzer generated test
corpus, the code is C++, etc.
> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
> index 82bbe0ca858b..6a7fe1534664 100644
> --- a/tools/perf/perf.c
> +++ b/tools/perf/perf.c
> @@ -456,7 +456,18 @@ static int libperf_print(enum libperf_print_level level,
> return veprintf(level, verbose, fmt, ap);
> }
>
> $ git diff
> +#ifdef CUSTOM_MAIN
> +int main(void)
> +{
> + printf("This is not perf\n");
> + return 0;
> +}
> +
> +int perf_main(int argc, const char **argv);
> +int perf_main(int argc, const char **argv)
> +#else
> int main(int argc, const char **argv)
> +#endif
> {
> int err;
> const char *cmd;
> $ make EXTRA_CFLAGS="-DCUSTOM_MAIN" NO_BPF_SKEL=1 -C tools/perf >/dev/null
> Warning: Kernel ABI header at 'tools/include/uapi/linux/in.h' differs from latest version at 'include/uapi/linux/in.h'
> Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
> Warning: Kernel ABI header at 'tools/arch/arm64/include/uapi/asm/perf_regs.h' differs from latest version at 'arch/arm64/include/uapi/asm/perf_regs.h'
> Warning: Kernel ABI header at 'tools/include/linux/coresight-pmu.h' differs from latest version at 'include/linux/coresight-pmu.h'
> Makefile.config:587: No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev
> Makefile.config:805: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev
> Makefile.config:1046: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
> Makefile.config:1075: No alternatives command found, you need to set JDIR= to point to the root of your Java directory
> Makefile.config:1137: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
> $ tools/perf/perf version
> This is not perf
>
Sure, I'm aware of how the #ifdef would function. What I'm saying is
that even with a CUSTOM_MAIN ifdef, which wouldn't be necessary with
my patches as you can drop the object file, the refactoring in the
patches still makes sense.
perf ui: Move window resize signal functions
It isn't clear why these UI functions should be in perf.c given window
resizing is a UI issue.
perf usage: Move usage strings
The usage strings were in builtin.h and not perf.h, so the
declaration/definition didn't align. util.h declares usage(), although
the definition is in usage.c, the variables are moved to match this.
perf header: Move perf_version_string declaration
perf_version_string is defined in header.c and so declaring it in
header.h rather than perf.h is consistent.
perf version: Use regular verbose flag
Just remove an unnecessary global by repurposing the existing global
for the job.
perf util: Move input_name to util
There's no reference to input_name in perf.c and so util.c is as
sensible a location. Having this be a global is something of an
encapsulation fail, but cleaning that up wasn't the point of these
patches. The variable is used in util, so reaching up a directory to
get it feels somewhat unnatural.
perf util: Move perf_guest/host declarations
As with input_name.
Thanks,
Ian
On 28/03/23 20:42, Ian Rogers wrote:
> On Tue, Mar 28, 2023 at 10:12 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 28/03/23 19:14, Ian Rogers wrote:
>>> On Tue, Mar 28, 2023 at 6:24 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>>>
>>>> On 28/03/23 04:40, Ian Rogers wrote:
>>>>> When fuzzing something like parse-events, having the main function in
>>>>> perf.c alongside global variables like input_name means that
>>>>> input_name must be redeclared with the fuzzer function's
>>>>> main. However, as the fuzzer is using the tools/perf code as a library
>>>>> this causes backward linking reference that the linker may warn
>>>>> about. Reorganize perf.c and perf.h to avoid potential backward
>>>>> references, or so that the declaration/definition locations are more
>>>>> consistent.
>>>>>
>>>>
>>>> Seems like it could be a pain to maintain.
>>>>
>>>> Did you consider just adding:
>>>>
>>>> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
>>>> index 82bbe0ca858b..a75dd47d68ee 100644
>>>> --- a/tools/perf/perf.c
>>>> +++ b/tools/perf/perf.c
>>>> @@ -456,6 +456,7 @@ static int libperf_print(enum libperf_print_level level,
>>>> return veprintf(level, verbose, fmt, ap);
>>>> }
>>>>
>>>> +#ifndef CUSTOM_MAIN
>>>> int main(int argc, const char **argv)
>>>> {
>>>> int err;
>>>> @@ -576,3 +577,4 @@ int main(int argc, const char **argv)
>>>> out:
>>>> return 1;
>>>> }
>>>> +#endif
>>>>
>>>
>>> It's possible. Would need to make the static functions not warn about
>>> being declared and not used. I still think that just aligning
>>> definitions and declarations yields the most expected code and will
>>> lead to fewer problems in the long run.
>>
>> Making perf source dependent on an unknown derivative makes
>> things more complicated.
>>
>> If you are not going to contribute it to perf, then a
>> suggestion is along the lines of the following:
>
> There's not an issue with contribution, most of the fuzzers are very
> simple. For example, here is the coresight fuzzer we run:
>
> ```
> #include <fuzzer/FuzzedDataProvider.h>
>
> extern "C" {
> #include "tools/perf/util/cs-etm-decoder/cs-etm-decoder.h"
> }
>
> static void null_packet_dump(const char *) {}
>
> extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
> FuzzedDataProvider fdp(data, size);
> int num_cpu = fdp.ConsumeIntegralInRange(1, 1024);
> struct cs_etm_decoder_params d_params;
> std::unique_ptr<struct cs_etm_trace_params[]>
> t_params(new cs_etm_trace_params[num_cpu]);
>
> for(int i=0; i < num_cpu; ++i) {
> t_params[i].protocol =
> fdp.ConsumeIntegralInRange(static_cast<int>(CS_ETM_PROTO_ETMV3)
> ,
>
> static_cast<int>(CS_ETM_PROTO_PTM));
> fdp.ConsumeData(&t_params[i].etmv4, sizeof(struct cs_etmv4_trace_params));
> }
>
> d_params.packet_printer = null_packet_dump;
> d_params.operation = CS_ETM_OPERATION_DECODE;
> d_params.data = NULL;
> d_params.formatted = true;
> d_params.fsyncs = false;
> d_params.hsyncs = false;
> d_params.frame_aligned = true;
>
> std::unique_ptr<struct cs_etm_decoder, decltype(&cs_etm_decoder__free)>
> decoder(cs_etm_decoder__new(num_cpu, &d_params, t_params.get()),
> cs_etm_decoder__free);
>
> if (decoder == nullptr)
> return 0;
>
> do {
> size_t consumed;
> uint8_t buf[1024];
> size_t len = fdp.ConsumeData(buf, sizeof(buf));
>
> int ret = cs_etm_decoder__process_data_block(
> decoder.get(), 0, buf, len, &consumed);
> if (ret)
> return 0;
>
> } while (fdp.remaining_bytes() > 0);
>
> return 0;
> }
> ```
> Most of the code is boiler plate around a single function call. The
> issues are build support, where to put the fuzzer generated test
> corpus, the code is C++, etc.
>
>> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
>> index 82bbe0ca858b..6a7fe1534664 100644
>> --- a/tools/perf/perf.c
>> +++ b/tools/perf/perf.c
>> @@ -456,7 +456,18 @@ static int libperf_print(enum libperf_print_level level,
>> return veprintf(level, verbose, fmt, ap);
>> }
>>
>> $ git diff
>> +#ifdef CUSTOM_MAIN
>> +int main(void)
>> +{
>> + printf("This is not perf\n");
>> + return 0;
>> +}
>> +
>> +int perf_main(int argc, const char **argv);
>> +int perf_main(int argc, const char **argv)
>> +#else
>> int main(int argc, const char **argv)
>> +#endif
>> {
>> int err;
>> const char *cmd;
>> $ make EXTRA_CFLAGS="-DCUSTOM_MAIN" NO_BPF_SKEL=1 -C tools/perf >/dev/null
>> Warning: Kernel ABI header at 'tools/include/uapi/linux/in.h' differs from latest version at 'include/uapi/linux/in.h'
>> Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
>> Warning: Kernel ABI header at 'tools/arch/arm64/include/uapi/asm/perf_regs.h' differs from latest version at 'arch/arm64/include/uapi/asm/perf_regs.h'
>> Warning: Kernel ABI header at 'tools/include/linux/coresight-pmu.h' differs from latest version at 'include/linux/coresight-pmu.h'
>> Makefile.config:587: No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev
>> Makefile.config:805: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev
>> Makefile.config:1046: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
>> Makefile.config:1075: No alternatives command found, you need to set JDIR= to point to the root of your Java directory
>> Makefile.config:1137: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
>> $ tools/perf/perf version
>> This is not perf
>>
>
> Sure, I'm aware of how the #ifdef would function. What I'm saying is
> that even with a CUSTOM_MAIN ifdef, which wouldn't be necessary with
> my patches as you can drop the object file, the refactoring in the
> patches still makes sense.
I am just going off what your commit messages say
>
> perf ui: Move window resize signal functions
>
> It isn't clear why these UI functions should be in perf.c given window
> resizing is a UI issue.
>
> perf usage: Move usage strings
>
> The usage strings were in builtin.h and not perf.h, so the
> declaration/definition didn't align. util.h declares usage(), although
> the definition is in usage.c, the variables are moved to match this.
>
> perf header: Move perf_version_string declaration
>
> perf_version_string is defined in header.c and so declaring it in
> header.h rather than perf.h is consistent.
>
> perf version: Use regular verbose flag
>
> Just remove an unnecessary global by repurposing the existing global
> for the job.
>
> perf util: Move input_name to util
>
> There's no reference to input_name in perf.c and so util.c is as
> sensible a location. Having this be a global is something of an
> encapsulation fail, but cleaning that up wasn't the point of these
> patches. The variable is used in util, so reaching up a directory to
> get it feels somewhat unnatural.
>
> perf util: Move perf_guest/host declarations
>
> As with input_name.
>
> Thanks,
> Ian
© 2016 - 2026 Red Hat, Inc.