* [RFC] perf tools: Fix strict alias issue for find_first_bit
@ 2014-02-26 17:14 Jiri Olsa
2014-02-26 17:18 ` Peter Zijlstra
2014-03-02 8:57 ` [tip:perf/urgent] perf tools: Fix strict alias issue for find_first_bit tip-bot for Jiri Olsa
0 siblings, 2 replies; 4+ messages in thread
From: Jiri Olsa @ 2014-02-26 17:14 UTC (permalink / raw)
To: linux-kernel
Cc: Jiri Olsa, Corey Ashford, Frederic Weisbecker, Ingo Molnar,
Namhyung Kim, Paul Mackerras, Peter Zijlstra,
Arnaldo Carvalho de Melo, David Ahern
hi,
got issue below when compiling perf tool on i686 with gcc 4.4,
but not sure the patch is correct workaround here.
thanks for comments,
jirka
---
When compiling perf tool code with gcc 4.4.7 I'm getting
following error:
CC util/session.o
cc1: warnings being treated as errors
util/session.c: In function ‘perf_session_deliver_event’:
/root/linux/tools/perf/util/include/linux/bitops.h:109: error: dereferencing pointer ‘p’ does break strict-aliasing rules
/root/linux/tools/perf/util/include/linux/bitops.h:101: error: dereferencing pointer ‘p’ does break strict-aliasing rules
util/session.c:697: note: initialized from here
/root/linux/tools/perf/util/include/linux/bitops.h:101: note: initialized from here
make[1]: *** [util/session.o] Error 1
make: *** [util/session.o] Error 2
The aliased types here are u64 and unsigned long pointers,
which is safe for the find_first_bit processing.
This error shows up for me only for gcc 4.4 on 32bit x86,
even for -Wstrict-aliasing=3, while newer gcc are quiet
and scream here for -Wstrict-aliasing={2,1}. Looks like
newer gcc changed the rules for strict alias warnings.
The gcc documentation offers workaround for valid
aliasing by using __may_alias__ attribute:
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Type-Attributes.html
Using this workaround for the find_first_bit function.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Cc: David Ahern <dsahern@gmail.com>
---
tools/perf/util/include/linux/bitops.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/include/linux/bitops.h b/tools/perf/util/include/linux/bitops.h
index 45cf10a..dadfa7e 100644
--- a/tools/perf/util/include/linux/bitops.h
+++ b/tools/perf/util/include/linux/bitops.h
@@ -87,13 +87,15 @@ static __always_inline unsigned long __ffs(unsigned long word)
return num;
}
+typedef const unsigned long __attribute__((__may_alias__)) long_alias_t;
+
/*
* Find the first set bit in a memory region.
*/
static inline unsigned long
find_first_bit(const unsigned long *addr, unsigned long size)
{
- const unsigned long *p = addr;
+ long_alias_t *p = (long_alias_t *) addr;
unsigned long result = 0;
unsigned long tmp;
--
1.8.3.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC] perf tools: Fix strict alias issue for find_first_bit
2014-02-26 17:14 [RFC] perf tools: Fix strict alias issue for find_first_bit Jiri Olsa
@ 2014-02-26 17:18 ` Peter Zijlstra
2014-02-26 17:47 ` [PATCH] perf tools: Do not compile with -fstrict-aliasing Jiri Olsa
2014-03-02 8:57 ` [tip:perf/urgent] perf tools: Fix strict alias issue for find_first_bit tip-bot for Jiri Olsa
1 sibling, 1 reply; 4+ messages in thread
From: Peter Zijlstra @ 2014-02-26 17:18 UTC (permalink / raw)
To: Jiri Olsa
Cc: linux-kernel, Corey Ashford, Frederic Weisbecker, Ingo Molnar,
Namhyung Kim, Paul Mackerras, Arnaldo Carvalho de Melo,
David Ahern
On Wed, Feb 26, 2014 at 06:14:26PM +0100, Jiri Olsa wrote:
> hi,
> got issue below when compiling perf tool on i686 with gcc 4.4,
> but not sure the patch is correct workaround here.
>
> thanks for comments,
> jirka
>
>
> ---
> When compiling perf tool code with gcc 4.4.7 I'm getting
> following error:
>
> CC util/session.o
> cc1: warnings being treated as errors
> util/session.c: In function ‘perf_session_deliver_event’:
> /root/linux/tools/perf/util/include/linux/bitops.h:109: error: dereferencing pointer ‘p’ does break strict-aliasing rules
> /root/linux/tools/perf/util/include/linux/bitops.h:101: error: dereferencing pointer ‘p’ does break strict-aliasing rules
> util/session.c:697: note: initialized from here
> /root/linux/tools/perf/util/include/linux/bitops.h:101: note: initialized from here
> make[1]: *** [util/session.o] Error 1
> make: *** [util/session.o] Error 2
>
> The aliased types here are u64 and unsigned long pointers,
> which is safe for the find_first_bit processing.
>
> This error shows up for me only for gcc 4.4 on 32bit x86,
> even for -Wstrict-aliasing=3, while newer gcc are quiet
> and scream here for -Wstrict-aliasing={2,1}. Looks like
> newer gcc changed the rules for strict alias warnings.
>
> The gcc documentation offers workaround for valid
> aliasing by using __may_alias__ attribute:
> http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Type-Attributes.html
>
The kernel builds with -fno-strict-aliasing because the C aliasing rules
are a bunch of monkey poo. Perf tool should probably do the same.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] perf tools: Do not compile with -fstrict-aliasing
2014-02-26 17:18 ` Peter Zijlstra
@ 2014-02-26 17:47 ` Jiri Olsa
0 siblings, 0 replies; 4+ messages in thread
From: Jiri Olsa @ 2014-02-26 17:47 UTC (permalink / raw)
To: Peter Zijlstra
Cc: linux-kernel, Corey Ashford, Frederic Weisbecker, Ingo Molnar,
Namhyung Kim, Paul Mackerras, Arnaldo Carvalho de Melo,
David Ahern
On Wed, Feb 26, 2014 at 06:18:05PM +0100, Peter Zijlstra wrote:
> On Wed, Feb 26, 2014 at 06:14:26PM +0100, Jiri Olsa wrote:
> > hi,
> > got issue below when compiling perf tool on i686 with gcc 4.4,
> > but not sure the patch is correct workaround here.
> >
> > thanks for comments,
> > jirka
> >
> >
> > ---
> > When compiling perf tool code with gcc 4.4.7 I'm getting
> > following error:
> >
> > CC util/session.o
> > cc1: warnings being treated as errors
> > util/session.c: In function ‘perf_session_deliver_event’:
> > /root/linux/tools/perf/util/include/linux/bitops.h:109: error: dereferencing pointer ‘p’ does break strict-aliasing rules
> > /root/linux/tools/perf/util/include/linux/bitops.h:101: error: dereferencing pointer ‘p’ does break strict-aliasing rules
> > util/session.c:697: note: initialized from here
> > /root/linux/tools/perf/util/include/linux/bitops.h:101: note: initialized from here
> > make[1]: *** [util/session.o] Error 1
> > make: *** [util/session.o] Error 2
> >
> > The aliased types here are u64 and unsigned long pointers,
> > which is safe for the find_first_bit processing.
> >
> > This error shows up for me only for gcc 4.4 on 32bit x86,
> > even for -Wstrict-aliasing=3, while newer gcc are quiet
> > and scream here for -Wstrict-aliasing={2,1}. Looks like
> > newer gcc changed the rules for strict alias warnings.
> >
> > The gcc documentation offers workaround for valid
> > aliasing by using __may_alias__ attribute:
> > http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Type-Attributes.html
> >
>
> The kernel builds with -fno-strict-aliasing because the C aliasing rules
> are a bunch of monkey poo. Perf tool should probably do the same.
my pleasure ;-)
thanks,
jirka
---
Switching off the strict aliasing for perf tool compilation,
because it causes compilation issues/errors for older gcc,
and to quote Peter:
"C aliasing rules are a bunch of monkey poo"
We don't enable strict aliasing actively, it is forced by
-Ox option. Using -fno-strict-aliasing option at the same
time we use -O.
Removing -Wstrict-aliasing=3 option as well.
Suggested-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Cc: David Ahern <dsahern@gmail.com>
---
tools/perf/config/Makefile | 2 +-
tools/scripts/Makefile.include | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index f7c81d3..e7786c7 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -94,7 +94,7 @@ ifndef DEBUG
endif
ifeq ($(DEBUG),0)
- CFLAGS += -O6
+ CFLAGS += -O6 -fno-strict-aliasing
endif
ifdef PARSER_DEBUG
diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
index 8abbef1..3667b5b 100644
--- a/tools/scripts/Makefile.include
+++ b/tools/scripts/Makefile.include
@@ -32,7 +32,6 @@ EXTRA_WARNINGS += -Wold-style-definition
EXTRA_WARNINGS += -Wpacked
EXTRA_WARNINGS += -Wredundant-decls
EXTRA_WARNINGS += -Wshadow
-EXTRA_WARNINGS += -Wstrict-aliasing=3
EXTRA_WARNINGS += -Wstrict-prototypes
EXTRA_WARNINGS += -Wswitch-default
EXTRA_WARNINGS += -Wswitch-enum
--
1.8.3.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip:perf/urgent] perf tools: Fix strict alias issue for find_first_bit
2014-02-26 17:14 [RFC] perf tools: Fix strict alias issue for find_first_bit Jiri Olsa
2014-02-26 17:18 ` Peter Zijlstra
@ 2014-03-02 8:57 ` tip-bot for Jiri Olsa
1 sibling, 0 replies; 4+ messages in thread
From: tip-bot for Jiri Olsa @ 2014-03-02 8:57 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra, namhyung,
jolsa, fweisbec, dsahern, tglx, cjashfor, mingo
Commit-ID: b39c2a57a00a841f057a75b41df4c26173288b66
Gitweb: http://git.kernel.org/tip/b39c2a57a00a841f057a75b41df4c26173288b66
Author: Jiri Olsa <jolsa@redhat.com>
AuthorDate: Wed, 26 Feb 2014 18:14:26 +0100
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 28 Feb 2014 10:39:40 -0300
perf tools: Fix strict alias issue for find_first_bit
When compiling perf tool code with gcc 4.4.7 I'm getting
following error:
CC util/session.o
cc1: warnings being treated as errors
util/session.c: In function ‘perf_session_deliver_event’:
tools/perf/util/include/linux/bitops.h:109: error: dereferencing pointer ‘p’ does break strict-aliasing rules
tools/perf/util/include/linux/bitops.h:101: error: dereferencing pointer ‘p’ does break strict-aliasing rules
util/session.c:697: note: initialized from here
tools/perf/util/include/linux/bitops.h:101: note: initialized from here
make[1]: *** [util/session.o] Error 1
make: *** [util/session.o] Error 2
The aliased types here are u64 and unsigned long pointers, which is safe
for the find_first_bit processing.
This error shows up for me only for gcc 4.4 on 32bit x86, even for
-Wstrict-aliasing=3, while newer gcc are quiet and scream here for
-Wstrict-aliasing={2,1}. Looks like newer gcc changed the rules for
strict alias warnings.
The gcc documentation offers workaround for valid aliasing by using
__may_alias__ attribute:
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Type-Attributes.html
Using this workaround for the find_first_bit function.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1393434867-20271-1-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/include/linux/bitops.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/include/linux/bitops.h b/tools/perf/util/include/linux/bitops.h
index 45cf10a..dadfa7e 100644
--- a/tools/perf/util/include/linux/bitops.h
+++ b/tools/perf/util/include/linux/bitops.h
@@ -87,13 +87,15 @@ static __always_inline unsigned long __ffs(unsigned long word)
return num;
}
+typedef const unsigned long __attribute__((__may_alias__)) long_alias_t;
+
/*
* Find the first set bit in a memory region.
*/
static inline unsigned long
find_first_bit(const unsigned long *addr, unsigned long size)
{
- const unsigned long *p = addr;
+ long_alias_t *p = (long_alias_t *) addr;
unsigned long result = 0;
unsigned long tmp;
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-03-02 8:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-26 17:14 [RFC] perf tools: Fix strict alias issue for find_first_bit Jiri Olsa
2014-02-26 17:18 ` Peter Zijlstra
2014-02-26 17:47 ` [PATCH] perf tools: Do not compile with -fstrict-aliasing Jiri Olsa
2014-03-02 8:57 ` [tip:perf/urgent] perf tools: Fix strict alias issue for find_first_bit tip-bot for Jiri Olsa
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome