cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

builtin-version.c (2437B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include "builtin.h"
      3#include "perf.h"
      4#include "color.h"
      5#include <tools/config.h>
      6#include <stdbool.h>
      7#include <stdio.h>
      8#include <string.h>
      9#include <subcmd/parse-options.h>
     10
     11int version_verbose;
     12
     13struct version {
     14	bool	build_options;
     15};
     16
     17static struct version version;
     18
     19static struct option version_options[] = {
     20	OPT_BOOLEAN(0, "build-options", &version.build_options,
     21		    "display the build options"),
     22	OPT_END(),
     23};
     24
     25static const char * const version_usage[] = {
     26	"perf version [<options>]",
     27	NULL
     28};
     29
     30static void on_off_print(const char *status)
     31{
     32	printf("[ ");
     33
     34	if (!strcmp(status, "OFF"))
     35		color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status);
     36	else
     37		color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status);
     38
     39	printf(" ]");
     40}
     41
     42static void status_print(const char *name, const char *macro,
     43			 const char *status)
     44{
     45	printf("%22s: ", name);
     46	on_off_print(status);
     47	printf("  # %s\n", macro);
     48}
     49
     50#define STATUS(__d, __m)				\
     51do {							\
     52	if (IS_BUILTIN(__d))				\
     53		status_print(#__m, #__d, "on");		\
     54	else						\
     55		status_print(#__m, #__d, "OFF");	\
     56} while (0)
     57
     58static void library_status(void)
     59{
     60	STATUS(HAVE_DWARF_SUPPORT, dwarf);
     61	STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
     62	STATUS(HAVE_GLIBC_SUPPORT, glibc);
     63#ifndef HAVE_SYSCALL_TABLE_SUPPORT
     64	STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
     65#endif
     66	STATUS(HAVE_SYSCALL_TABLE_SUPPORT, syscall_table);
     67	STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
     68	STATUS(HAVE_DEBUGINFOD_SUPPORT, debuginfod);
     69	STATUS(HAVE_LIBELF_SUPPORT, libelf);
     70	STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
     71	STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
     72	STATUS(HAVE_LIBPERL_SUPPORT, libperl);
     73	STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
     74	STATUS(HAVE_SLANG_SUPPORT, libslang);
     75	STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
     76	STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
     77	STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
     78	STATUS(HAVE_ZLIB_SUPPORT, zlib);
     79	STATUS(HAVE_LZMA_SUPPORT, lzma);
     80	STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
     81	STATUS(HAVE_LIBBPF_SUPPORT, bpf);
     82	STATUS(HAVE_AIO_SUPPORT, aio);
     83	STATUS(HAVE_ZSTD_SUPPORT, zstd);
     84	STATUS(HAVE_LIBPFM, libpfm4);
     85}
     86
     87int cmd_version(int argc, const char **argv)
     88{
     89	argc = parse_options(argc, argv, version_options, version_usage,
     90			     PARSE_OPT_STOP_AT_NON_OPTION);
     91
     92	printf("perf version %s\n", perf_version_string);
     93
     94	if (version.build_options || version_verbose == 1)
     95		library_status();
     96
     97	return 0;
     98}