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: <20150320203828.GN16485@kernel.org>
Date:	Fri, 20 Mar 2015 17:38:28 -0300
From:	Arnaldo Carvalho de Melo <acme@...nel.org>
To:	Vinson Lee <vlee@...pensource.com>
Cc:	Jiri Olsa <jolsa@...hat.com>,
	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	Paul Mackerras <paulus@...ba.org>,
	Ingo Molnar <mingo@...hat.com>,
	Adrian Hunter <adrian.hunter@...el.com>,
	Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>,
	Namhyung Kim <namhyung@...nel.org>,
	Yann Droneaud <ydroneaud@...eya.com>,
	LKML <linux-kernel@...r.kernel.org>,
	linux-perf-users@...r.kernel.org, Vinson Lee <vlee@...tter.com>
Subject: Re: [PATCH v2] perf tools: Work around lack of sched_getcpu in glibc
 < 2.6.

Em Fri, Mar 20, 2015 at 11:44:42AM -0700, Vinson Lee escreveu:
> On Fri, Mar 20, 2015 at 6:03 AM, Arnaldo Carvalho de Melo <acme@...nel.org> wrote:
> > So for strlcpy we have in tools/perf/util/cache.h:

> > #ifndef __UCLIBC__
> > /* Matches the libc/libbsd function attribute so we declare this
> >  * unconditionally: */
> > extern size_t strlcpy(char *dest, const char *src, size_t size);
> > #endif

> > I.e. have the ifdef just in the header file.

This part you didn't take into account, the __weak marked part is ok,
the linker will DTRT with that, its just the redeclaration part that
needs to get out of the way, enclose that under appropriate ifdef, i.e.
one that is associated with the libc where that file first appeared and
that has been present since then.

- Arnaldo

> > This way, if we end up needing to use sched_getcpu elsewhere, it will
> > work and the needed #ifdef will be constrained to the header file.
 
> I tried moving the prototype to a header file and it does not compile
> with newer glibc for me either. I still get a "redundant
> redeclaration" compiler error.
 
> Here is the diff that I tried.
 
> diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c
> @@ -7,6 +7,12 @@
> 
>  static unsigned long flag = PERF_FLAG_FD_CLOEXEC;
> 
> +int __weak sched_getcpu(void)
> +{
> +       errno = ENOSYS;
> +       return -1;
> +}
> +
>  static int perf_flag_probe(void)
>  {
>         /* use 'safest' configuration as used in perf_evsel__fallback() */
> diff --git a/tools/perf/util/cloexec.h b/tools/perf/util/cloexec.h
> @@ -3,4 +3,6 @@
> 
>  unsigned long perf_event_open_cloexec_flag(void);
> 
> +extern int sched_getcpu(void) __THROW;
> +
>  #endif /* __PERF_CLOEXEC_H */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ