lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180327125645.GG3102@krava>
Date:   Tue, 27 Mar 2018 14:56:45 +0200
From:   Jiri Olsa <jolsa@...hat.com>
To:     "Jin, Yao" <yao.jin@...ux.intel.com>
Cc:     acme@...nel.org, jolsa@...nel.org, peterz@...radead.org,
        mingo@...hat.com, alexander.shishkin@...ux.intel.com,
        Linux-kernel@...r.kernel.org, ak@...ux.intel.com,
        kan.liang@...el.com, yao.jin@...el.com
Subject: Re: [PATCH v1 2/3] perf version: Print the status of compiled-in
 libraries

On Tue, Mar 27, 2018 at 09:44:23AM +0800, Jin, Yao wrote:
> 
> 
> On 3/26/2018 5:39 PM, Jiri Olsa wrote:
> > On Tue, Mar 27, 2018 at 12:07:03AM +0800, Jin Yao wrote:
> > > This patch checks the values passed by CFLAGS (-DXXX) and then
> > > print the status of libraries.
> > > 
> > > For example, if HAVE_DWARF_SUPPORT is defined, that means the
> > > library "dwarf" is compiled-in. The patch will print the status
> > > "on" for this library.
> > > 
> > > Signed-off-by: Jin Yao <yao.jin@...ux.intel.com>
> > > ---
> > >   tools/perf/builtin-version.c | 125 +++++++++++++++++++++++++++++++++++++++++++
> > >   tools/perf/builtin.h         |   1 +
> > >   2 files changed, 126 insertions(+)
> > > 
> > > diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
> > > index 37019c5..90a0a7f 100644
> > > --- a/tools/perf/builtin-version.c
> > > +++ b/tools/perf/builtin-version.c
> > > @@ -9,3 +9,128 @@ int cmd_version(int argc __maybe_unused, const char **argv __maybe_unused)
> > >   	printf("perf version %s\n", perf_version_string);
> > >   	return 0;
> > >   }
> > > +
> > > +static void status_print(const char *name, const char *status)
> > > +{
> > > +	printf("%22s: [ %3s ]\n", name, status);
> > > +}
> > > +
> > > +static void library_status(void)
> > > +{
> > > +#ifdef HAVE_DWARF_SUPPORT
> > > +	status_print("dwarf", "on");
> > > +#else
> > > +	status_print("dwarf", "off");
> > > +#endif
> > 
> > could this and all those below be in some generic macro?
> > 
> > #define STATUS(__d, __m)		\
> > #ifdef __d 				\
> > 	status_print(#__m, "on");	\
> > #else					\
> > 	status_print(#__m, "OFF");	\
> > #endif
> > 
> > STATUS(HAVE_DWARF_SUPPORT, dwarf)
> > 
> > 
> 
> Hi Jiri,
> 
> I have tried this macro definition, but unfortunately the compilation is
> failed.
> 
> error: '#' is not followed by a macro parameter
>  #define STATUS(__d, __m)  \
> 
> I just guess the '#' in #ifdef confuses the gcc. Looks we can't define
> #ifdef/#endif block in a macro.
> 

ah crap.. right ;-) how about we take the IS_BUILTIN thingie
from include/linux/kconfig.h and use it as in attached test
change.. it gives me:

	[jolsa@...va perf]$ ./perf version
	perf version 4.16.rc6.g1ee9a60
			 dwarf: [  on ]
			 krava: [ OFF ]

we could put those macros into tools/include/tools/config.h, Arnaldo?
together with the comments from kconfig.h that I cut out..

thanks,
jirka


---
diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
index 1fe458792cc1..b392f9e80fd0 100644
--- a/tools/perf/builtin-version.c
+++ b/tools/perf/builtin-version.c
@@ -6,8 +6,33 @@
 
 int version_verbose;
 
+
+#define __ARG_PLACEHOLDER_1 0,
+#define __take_second_arg(__ignored, val, ...) val
+
+#define __is_defined(x)                 ___is_defined(x)
+#define ___is_defined(val)              ____is_defined(__ARG_PLACEHOLDER_##val) 
+#define ____is_defined(arg1_or_junk)    __take_second_arg(arg1_or_junk 1, 0)
+
+#define IS_BUILTIN(option) __is_defined(option)
+
+
+static void status_print(const char *name, const char *status)
+{
+	printf("%22s: [ %3s ]\n", name, status);
+}
+
 int cmd_version(int argc __maybe_unused, const char **argv __maybe_unused)
 {
 	printf("perf version %s\n", perf_version_string);
+
+#define STATUS(__d, __m)			\
+	if (IS_BUILTIN(__d))			\
+		status_print(#__m, "on");	\
+	else					\
+		status_print(#__m, "OFF");
+
+	STATUS(HAVE_DWARF_SUPPORT, dwarf)
+	STATUS(HAVE_KRAVA_SUPPORT, krava)
 	return 0;
 }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ