linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 05/13] perf tools: fix ALIGN redefinition in system headers
@ 2012-08-28 22:02 Irina Tirdea
  2012-08-29 16:24 ` David Ahern
  0 siblings, 1 reply; 3+ messages in thread
From: Irina Tirdea @ 2012-08-28 22:02 UTC (permalink / raw)
  To: Steven Rostedt, Arnaldo Carvalho de Melo, Ingo Molnar
  Cc: LKML, Namhyung Kim, Peter Zijlstra, Frederic Weisbecker

On some systems (e.g. Android), ALIGN is defined in
system headers as ALIGN(p). The definition of ALIGN used
in perf takes 2 parameters: ALIGN(x,a). This leads to
redefinition conflicts.

Redefinition error on Android:
In file included from util/include/linux/list.h:1:0,
from util/callchain.h:5,
from util/hist.h:6,
from util/session.h:4,
from util/build-id.h:4,
from util/annotate.c:11:
util/include/linux/kernel.h:11:0: error: "ALIGN" redefined [-Werror]
bionic/libc/include/sys/param.h:38:0: note: this is the location of
the previous definition

Conflics with system defined ALIGN in Android:
util/event.c: In function 'perf_event__synthesize_comm':
util/event.c:115:32: error: macro "ALIGN" passed 2 arguments, but takes just 1
util/event.c:115:9: error: 'ALIGN' undeclared (first use in this function)
util/event.c:115:9: note: each undeclared identifier is reported only once for
each function it appears in

In order to avoid this redefinition, ALIGN is renamed to PERF_ALIGN.

Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
---
 tools/perf/util/event.c                |   10 +++++-----
 tools/perf/util/event.h                |    2 +-
 tools/perf/util/header.c               |   16 ++++++++--------
 tools/perf/util/include/linux/kernel.h |    4 ++--
 tools/perf/util/session.c              |    4 ++--
 tools/perf/util/symbol.c               |    2 +-
 6 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index 3a0f1a5..aee4ddf 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -112,7 +112,7 @@ static pid_t perf_event__synthesize_comm(struct
perf_tool *tool,
     event->comm.header.type = PERF_RECORD_COMM;

     size = strlen(event->comm.comm) + 1;
-    size = ALIGN(size, sizeof(u64));
+    size = PERF_ALIGN(size, sizeof(u64));
     memset(event->comm.comm + size, 0, machine->id_hdr_size);
     event->comm.header.size = (sizeof(event->comm) -
                 (sizeof(event->comm.comm) - size) +
@@ -143,7 +143,7 @@ static pid_t perf_event__synthesize_comm(struct
perf_tool *tool,
                      sizeof(event->comm.comm));

         size = strlen(event->comm.comm) + 1;
-        size = ALIGN(size, sizeof(u64));
+        size = PERF_ALIGN(size, sizeof(u64));
         memset(event->comm.comm + size, 0, machine->id_hdr_size);
         event->comm.header.size = (sizeof(event->comm) -
                       (sizeof(event->comm.comm) - size) +
@@ -222,7 +222,7 @@ static int
perf_event__synthesize_mmap_events(struct perf_tool *tool,
             size = strlen(execname);
             execname[size - 1] = '\0'; /* Remove \n */
             memcpy(event->mmap.filename, execname, size);
-            size = ALIGN(size, sizeof(u64));
+            size = PERF_ALIGN(size, sizeof(u64));
             event->mmap.len -= event->mmap.start;
             event->mmap.header.size = (sizeof(event->mmap) -
                             (sizeof(event->mmap.filename) - size));
@@ -272,7 +272,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool,
         if (pos->dso->kernel)
             continue;

-        size = ALIGN(pos->dso->long_name_len + 1, sizeof(u64));
+        size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64));
         event->mmap.header.type = PERF_RECORD_MMAP;
         event->mmap.header.size = (sizeof(event->mmap) -
                         (sizeof(event->mmap.filename) - size));
@@ -477,7 +477,7 @@ int perf_event__synthesize_kernel_mmap(struct
perf_tool *tool,
     map = machine->vmlinux_maps[MAP__FUNCTION];
     size = snprintf(event->mmap.filename, sizeof(event->mmap.filename),
             "%s%s", mmap_name, symbol_name) + 1;
-    size = ALIGN(size, sizeof(u64));
+    size = PERF_ALIGN(size, sizeof(u64));
     event->mmap.header.type = PERF_RECORD_MMAP;
     event->mmap.header.size = (sizeof(event->mmap) -
             (sizeof(event->mmap.filename) - size) + machine->id_hdr_size);
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
index 0e088d0..21b99e7 100644
--- a/tools/perf/util/event.h
+++ b/tools/perf/util/event.h
@@ -101,7 +101,7 @@ struct perf_sample {
 struct build_id_event {
     struct perf_event_header header;
     pid_t             pid;
-    u8             build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))];
+    u8             build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
     char             filename[];
 };

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 1e5b6aa..7f8631f 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -128,7 +128,7 @@ static int do_write_string(int fd, const char *str)
     int ret;

     olen = strlen(str) + 1;
-    len = ALIGN(olen, NAME_ALIGN);
+    len = PERF_ALIGN(olen, NAME_ALIGN);

     /* write len, incl. \0 */
     ret = do_write(fd, &len, sizeof(len));
@@ -219,7 +219,7 @@ static int __dsos__write_buildid_table(struct
list_head *head, pid_t pid,
         if (!pos->hit)
             continue;
         len = pos->long_name_len + 1;
-        len = ALIGN(len, NAME_ALIGN);
+        len = PERF_ALIGN(len, NAME_ALIGN);
         memset(&b, 0, sizeof(b));
         memcpy(&b.build_id, pos->build_id, sizeof(pos->build_id));
         b.pid = pid;
@@ -1398,7 +1398,7 @@ static int
perf_header__read_build_ids_abi_quirk(struct perf_header *header,
     struct perf_session *session = container_of(header, struct
perf_session, header);
     struct {
         struct perf_event_header   header;
-        u8               build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))];
+        u8               build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
         char               filename[0];
     } old_bev;
     struct build_id_event bev;
@@ -2248,7 +2248,7 @@ int perf_event__synthesize_attr(struct perf_tool *tool,
     int err;

     size = sizeof(struct perf_event_attr);
-    size = ALIGN(size, sizeof(u64));
+    size = PERF_ALIGN(size, sizeof(u64));
     size += sizeof(struct perf_event_header);
     size += ids * sizeof(u64);

@@ -2346,7 +2346,7 @@ int perf_event__synthesize_event_type(struct
perf_tool *tool,

     ev.event_type.header.type = PERF_RECORD_HEADER_EVENT_TYPE;
     size = strlen(ev.event_type.event_type.name);
-    size = ALIGN(size, sizeof(u64));
+    size = PERF_ALIGN(size, sizeof(u64));
     ev.event_type.header.size = sizeof(ev.event_type) -
         (sizeof(ev.event_type.event_type.name) - size);

@@ -2415,7 +2415,7 @@ int perf_event__synthesize_tracing_data(struct
perf_tool *tool, int fd,

     ev.tracing_data.header.type = PERF_RECORD_HEADER_TRACING_DATA;
     size = tdata->size;
-    aligned_size = ALIGN(size, sizeof(u64));
+    aligned_size = PERF_ALIGN(size, sizeof(u64));
     padding = aligned_size - size;
     ev.tracing_data.header.size = sizeof(ev.tracing_data);
     ev.tracing_data.size = aligned_size;
@@ -2446,7 +2446,7 @@ int perf_event__process_tracing_data(union
perf_event *event,

     size_read = trace_report(session->fd, &session->pevent,
                  session->repipe);
-    padding = ALIGN(size_read, sizeof(u64)) - size_read;
+    padding = PERF_ALIGN(size_read, sizeof(u64)) - size_read;

     if (read(session->fd, buf, padding) < 0)
         die("reading input file");
@@ -2479,7 +2479,7 @@ int perf_event__synthesize_build_id(struct
perf_tool *tool,
     memset(&ev, 0, sizeof(ev));

     len = pos->long_name_len + 1;
-    len = ALIGN(len, NAME_ALIGN);
+    len = PERF_ALIGN(len, NAME_ALIGN);
     memcpy(&ev.build_id.build_id, pos->build_id, sizeof(pos->build_id));
     ev.build_id.header.type = PERF_RECORD_HEADER_BUILD_ID;
     ev.build_id.header.misc = misc;
diff --git a/tools/perf/util/include/linux/kernel.h
b/tools/perf/util/include/linux/kernel.h
index 391c425..1e56b2e 100644
--- a/tools/perf/util/include/linux/kernel.h
+++ b/tools/perf/util/include/linux/kernel.h
@@ -8,8 +8,8 @@

 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

-#define ALIGN(x,a)        __ALIGN_MASK(x,(typeof(x))(a)-1)
-#define __ALIGN_MASK(x,mask)    (((x)+(mask))&~(mask))
+#define PERF_ALIGN(x, a)    __PERF_ALIGN_MASK(x, (typeof(x))(a)-1)
+#define __PERF_ALIGN_MASK(x, mask)    (((x)+(mask))&~(mask))

 #ifndef offsetof
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index f7bb7ae..d6d571b 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -527,7 +527,7 @@ static void perf_event__comm_swap(union perf_event
*event, bool sample_id_all)
     if (sample_id_all) {
         void *data = &event->comm.comm;

-        data += ALIGN(strlen(data) + 1, sizeof(u64));
+        data += PERF_ALIGN(strlen(data) + 1, sizeof(u64));
         swap_sample_id_all(event, data);
     }
 }
@@ -544,7 +544,7 @@ static void perf_event__mmap_swap(union perf_event *event,
     if (sample_id_all) {
         void *data = &event->mmap.filename;

-        data += ALIGN(strlen(data) + 1, sizeof(u64));
+        data += PERF_ALIGN(strlen(data) + 1, sizeof(u64));
         swap_sample_id_all(event, data);
     }
 }
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 753699a..ba85d4f 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1991,7 +1991,7 @@ int symbol__init(void)
     if (symbol_conf.initialized)
         return 0;

-    symbol_conf.priv_size = ALIGN(symbol_conf.priv_size, sizeof(u64));
+    symbol_conf.priv_size = PERF_ALIGN(symbol_conf.priv_size, sizeof(u64));

     symbol__elf_init();

--
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 05/13] perf tools: fix ALIGN redefinition in system headers
  2012-08-28 22:02 [PATCH 05/13] perf tools: fix ALIGN redefinition in system headers Irina Tirdea
@ 2012-08-29 16:24 ` David Ahern
  2012-09-02 20:20   ` Irina Tirdea
  0 siblings, 1 reply; 3+ messages in thread
From: David Ahern @ 2012-08-29 16:24 UTC (permalink / raw)
  To: Irina Tirdea
  Cc: Steven Rostedt, Arnaldo Carvalho de Melo, Ingo Molnar, LKML,
	Namhyung Kim, Peter Zijlstra, Frederic Weisbecker

On 8/28/12 4:02 PM, Irina Tirdea wrote:
> On some systems (e.g. Android), ALIGN is defined in
> system headers as ALIGN(p). The definition of ALIGN used
> in perf takes 2 parameters: ALIGN(x,a). This leads to
> redefinition conflicts.
>
> Redefinition error on Android:
> In file included from util/include/linux/list.h:1:0,
> from util/callchain.h:5,
> from util/hist.h:6,
> from util/session.h:4,
> from util/build-id.h:4,
> from util/annotate.c:11:
> util/include/linux/kernel.h:11:0: error: "ALIGN" redefined [-Werror]
> bionic/libc/include/sys/param.h:38:0: note: this is the location of
> the previous definition
>

Simpler to undef ALIGN in util/include/linux/kernel.h right before the 
perf version is declared.

David


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 05/13] perf tools: fix ALIGN redefinition in system headers
  2012-08-29 16:24 ` David Ahern
@ 2012-09-02 20:20   ` Irina Tirdea
  0 siblings, 0 replies; 3+ messages in thread
From: Irina Tirdea @ 2012-09-02 20:20 UTC (permalink / raw)
  To: David Ahern
  Cc: Steven Rostedt, Arnaldo Carvalho de Melo, Ingo Molnar, LKML,
	Namhyung Kim, Peter Zijlstra, Frederic Weisbecker

> Simpler to undef ALIGN in util/include/linux/kernel.h right before the perf
> version is declared.

This was actually my initial approach as well. The problem is that
just to undef ALIGN before it is defined in perf is not enough.
Somehow the bionic version overrides the perf definition even if I use
undef. A solution would be to move the entire block of #undef and
#define ALIGN at the beginning of util/include/linux/kernel.h, before
the header's #ifndef PERF_LINUX_KERNEL_H_ define. I thought that
renaming the ALIGN in perf is cleaner than having defines outside the
include guards.

Irina

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-09-02 20:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-28 22:02 [PATCH 05/13] perf tools: fix ALIGN redefinition in system headers Irina Tirdea
2012-08-29 16:24 ` David Ahern
2012-09-02 20:20   ` Irina Tirdea

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).