lkml.org 
[lkml]   [2010]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] tracing: properly align linker defined symbols
    On Sat, Jul 10, 2010 at 09:35, Sam Ravnborg <sam@ravnborg.org> wrote:
    > Zeev - please try this replacement patch.
    > The alignmnet is increased to 32 bytes compared to my previous version and
    > we introduce alignmnet for ftrace_events too.
    >
    >        Sam
    >
    > From 40bedb8fda25d2cf9ecdd41ab48a24104607c37e Mon Sep 17 00:00:00 2001
    > From: Sam Ravnborg <sam@ravnborg.org>
    > Date: Sat, 10 Jul 2010 08:24:12 +0200
    > Subject: [PATCH] tracing: properly align linker defined symbols
    >
    > We define a number of symbols in the linker scipt like this:
    >
    >    __start_syscalls_metadata = .;
    >    *(__syscalls_metadata)
    >
    > But we do not know the alignment of "." when we assign
    > the __start_syscalls_metadata symbol.
    > gcc started to uses bigger alignment for structs (32 bytes),
    > so we saw situations where the linker due to alignment
    > constraints increased the value of "." after the symbol assignment.
    >
    > This resulted in boot fails.
    >
    > Fix this by forcing a 32 byte alignment of "." before the
    > assignment.
    >
    > This patch introduces the forced alignment for
    > ftrace_events and syscalls_metadata.
    > It may be required in more places.
    >
    > Reported-by: Zeev Tarantov <zeev.tarantov@gmail.com>
    > Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
    > Cc: Steven Rostedt <rostedt@goodmis.org>
    > Cc: Frederic Weisbecker <fweisbec@gmail.com>
    > ---
    >  include/asm-generic/vmlinux.lds.h |   10 ++++++++++
    >  1 files changed, 10 insertions(+), 0 deletions(-)
    >
    > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
    > index 48c5299..4b5902a 100644
    > --- a/include/asm-generic/vmlinux.lds.h
    > +++ b/include/asm-generic/vmlinux.lds.h
    > @@ -63,6 +63,12 @@
    >  /* Align . to a 8 byte boundary equals to maximum function alignment. */
    >  #define ALIGN_FUNCTION()  . = ALIGN(8)
    >
    > +/*
    > + * Align to a 32 byte boundary equal to the
    > + * alignment gcc 4.5 uses for a struct
    > + */
    > +#define STRUCT_ALIGN() . = ALIGN(32)
    > +
    >  /* The actual configuration determine if the init/exit sections
    >  * are handled as text/data or they can be discarded (which
    >  * often happens at runtime)
    > @@ -166,7 +172,11 @@
    >        LIKELY_PROFILE()                                                \
    >        BRANCH_PROFILE()                                                \
    >        TRACE_PRINTKS()                                                 \
    > +                                                                       \
    > +       STRUCT_ALIGN();                                                 \
    >        FTRACE_EVENTS()                                                 \
    > +                                                                       \
    > +       STRUCT_ALIGN();                                                 \
    >        TRACE_SYSCALLS()
    >
    >  /*
    > --
    > 1.6.0.6
    >
    >

    2.6.35-rc4 from tarball patched with only this, same config & same
    compiler boots fine.

    Tested-by: Zeev Tarantov <zeev.tarantov@gmail.com>

    -Zeev
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-07-10 12:21    [W:0.026 / U:32.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site