public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: David Miller <davem@davemloft.net>,
	richm@oldelvet.org.uk, 609371@bugs.debian.org,
	ben@decadent.org.uk, sparclinux@vger.kernel.org,
	linux-kernel@vger.kernel.org, fweisbec@gmail.com,
	mingo@redhat.com
Subject: Re: Bug#609371: linux-image-2.6.37-trunk-sparc64: module scsi_mod: Unknown relocation: 36
Date: Mon, 17 Jan 2011 14:35:25 -0500	[thread overview]
Message-ID: <20110117193525.GD16154@Krystal> (raw)
In-Reply-To: <1295273486.16479.15.camel@gandalf.stny.rr.com>

* Steven Rostedt (rostedt@goodmis.org) wrote:
> [ Added Mathieu on Cc, since he likes alignments ;-) ]

Oh yes, alignments are so much fun! (for some definitions of fun) ;)

> 
> On Sun, 2011-01-16 at 11:39 -0800, David Miller wrote:
> > From: Richard Mortimer <richm@oldelvet.org.uk>
> > Date: Sun, 16 Jan 2011 14:17:49 +0000
> > 
> > > I'm wondering if gcc is just getting better at honouring the source
> > > code. The DEFINE_EVENT macros in include/trace/ftrace.h have a
> > > __aligned__(4) attribute in them. Maybe that should be 8 on sparc64
> > > systems.
> > > The aligned 4 seems to be unchanged since include/trace/ftrace.h was
> > > created in f42c85e74faa422cf0bc747ed808681145448f88 in April 2009.
> > 
> > That needs to be at least "8" on 64-bit systems.  Why is this aligned
> > directive there at all?
> 
> IIRC, the problem showed up in 64-bit systems. OK, x86-64 (but of
> course ;-).
> 
> The problem comes when the linker puts these sections together. We read
> all the sections as one big array. If the linker puts in holes, then
> this breaks the array, and the kernel crashes while reading the section.
> 
> I guess one solution is to remove the alignment at the allocation and
> place it at the structure. This will mean all accesses to this structure
> will need to be on an alignment.

The problem with these alignments is that they are just a hint to gcc, telling
it what the minimum alignment of a type should be. gcc is free to align on a
larger boundary if it wants to.

But the following test program is very instructive:

#include <stdio.h>

struct test {
        void *a;
        void *b;
        void *c;
        void *d;
        void *e;
        void *f;
        void *g;
        void *h;
        void *i;
        void *j;
        void *k;
        void *l;
        void *m;
        void *n;
        void *o;
        void *p;
        void *q;
};

int main()
{
        struct test __attribute__((aligned(4))) v;
        printf("%d\n", __alignof__(v));
        return 0;
}

(on x86_64, with gcc 4.5.1 and gcc 4.4.4)

if we put the "__attribute__((aligned(4)))" at the v definition (variable
attribute), the program returns an alignment of 4. If we move it after struct
test declaration (type attribute), the program returns an alignment of 8 (thus
taking the max between the attribute alignment and the largest field).

But that's a real problem, because in include/trace/ftrace.h, we have an
alignment of 4 forced on the definition, but there is a mismatch with
trace_events.c:

extern struct ftrace_event_call __start_ftrace_events[];
extern struct ftrace_event_call __stop_ftrace_events[];

for which the alignment attribute is missing (so an alignment of 8 will be
used there).

So it all worked as long as the size of struct ftrace_event_call was a multiple
of 8 bytes (struct ftrace_event_call constains 2 integers if we exclude the perf
fields), but the new fields added by perf contain a supplementary 4-byte
integer, which seems to be causing the breakage: the structures are appended one
next to another when defined, but the iteration on these structures thinks they
are 8-byte aligned.

Steven, what were you trying to fix in the first place when you added the
aligned(4) to the definition ? It might have just been that the _ftrace_events
section needed to be aligned on at least 8 bytes in the linker scripts, but was
only aligned on 4-bytes. Forcing the definition alignment down to 4 possibly
fixed the problem you experienced on x86_64, but seems to be causing other
problems.

I would recommend to:

- Keep the linker script _ftrace_events alignment as it is now (aligned on 32
  bytes).
- Remove the aligned(4) attributes from all struct ftrace_event_call
  definitions.

And see how this works. The only problem that might come up is if gcc decides to
align struct ftrace_event_call (which is about 136 bytes in size) on an
alignment larger than 32 bytes, which would be really surprising.

Mathieu

> 
> -- Steve
> 
> 

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

  parent reply	other threads:[~2011-01-17 19:35 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20110113.155700.102679408.davem@davemloft.net>
     [not found] ` <4D302B2F.7030108@oldelvet.org.uk>
     [not found]   ` <4D3074FE.3030707@oldelvet.org.uk>
2011-01-16  5:17     ` Bug#609371: linux-image-2.6.37-trunk-sparc64: module scsi_mod: Unknown relocation: 36 David Miller
2011-01-16 14:17       ` Richard Mortimer
2011-01-16 19:39         ` David Miller
2011-01-17 14:11           ` Steven Rostedt
2011-01-17 14:37             ` Bastian Blank
2011-01-17 19:35             ` Mathieu Desnoyers [this message]
2011-01-18  6:36               ` David Miller
2011-01-18  5:34             ` David Miller
2011-01-18  6:00               ` David Miller
2011-01-18  6:08                 ` David Miller
2011-01-18 16:46                   ` Mathieu Desnoyers
2011-01-18 17:33                     ` Steven Rostedt
2011-01-18 18:16                       ` Steven Rostedt
2011-01-18 18:26                         ` Steven Rostedt
2011-01-18 20:13                           ` Mathieu Desnoyers
2011-01-18 20:22                             ` Steven Rostedt
2011-01-19  5:08                               ` Mathieu Desnoyers
2011-01-19  5:16                                 ` David Miller
2011-01-19 15:10                                   ` Mathieu Desnoyers
2011-01-19 16:14                                     ` Sam Ravnborg
2011-01-19 16:18                                       ` Mathieu Desnoyers
2011-01-19  6:32                                 ` David Miller
2011-01-19  7:20                                   ` David Miller
2011-01-19 15:33                                     ` Mathieu Desnoyers
2011-01-19 21:40                                       ` David Miller
2011-01-19 22:00                                         ` Steven Rostedt
2011-01-19 22:09                                           ` David Miller
2011-01-19 22:21                                           ` Mathieu Desnoyers
2011-01-19 22:23                                             ` David Miller
2011-01-19 22:32                                             ` Sam Ravnborg
2011-01-19 22:34                                               ` Mathieu Desnoyers
2011-01-19 22:13                                         ` Mathieu Desnoyers
2011-01-19 22:21                                           ` David Miller
2011-01-19 22:33                                             ` Mathieu Desnoyers
2011-01-20  0:41                                               ` David Miller
2011-01-21  0:04                                                 ` Mathieu Desnoyers
2011-01-21 18:06                                                   ` Richard Mortimer
2011-01-21 18:52                                                     ` Mathieu Desnoyers
2011-01-21 19:15                                                       ` Mathieu Desnoyers
2011-01-21 20:14                                                       ` Richard Mortimer
2011-01-21 20:40                                                         ` Mathieu Desnoyers
2011-01-21 22:50                                                           ` Richard Mortimer
2011-01-22 18:42                                                             ` Richard Mortimer
2011-01-22 18:53                                                               ` Mathieu Desnoyers
2011-01-19 15:46                                     ` Steven Rostedt
2011-01-19 16:15                                       ` Mathieu Desnoyers
2011-01-19 18:13                                         ` Steven Rostedt
2011-01-19 18:20                                           ` Mathieu Desnoyers
2011-01-19 21:44                                             ` David Miller
2011-01-19 22:15                                               ` Mathieu Desnoyers
2011-01-19 22:22                                                 ` David Miller
2011-01-19 15:11                                   ` Mathieu Desnoyers
2011-01-19 15:27                   ` Richard Mortimer
2011-01-17  6:07       ` David Miller
2011-01-17  9:05         ` Jesper Nilsson
2011-02-01  5:11           ` David Miller
2011-02-01 10:03             ` Jesper Nilsson
2011-01-17 10:22         ` Richard Mortimer
2011-01-17 14:15           ` Steven Rostedt
2011-01-18  6:35             ` David Miller
2011-01-18 17:30               ` Steven Rostedt
2011-01-17 19:46           ` R_SPARC_13 (Re: Bug#609371: linux-image-2.6.37-trunk-sparc64: module scsi_mod: Unknown relocation: 36) Richard Mortimer
2011-01-17 21:02             ` R_SPARC_13 David Miller
2011-01-17 23:34               ` R_SPARC_13 Richard Mortimer
2011-01-18  0:18                 ` R_SPARC_13 David Miller
2011-01-18  0:37                 ` R_SPARC_13 David Miller
2011-01-18  1:28                   ` R_SPARC_13 Richard Mortimer
2011-01-18  6:50                   ` R_SPARC_13 David Miller
2011-01-18 10:52                     ` R_SPARC_13 Richard Mortimer
2011-01-18 13:23                       ` R_SPARC_13 Richard Mortimer
2011-01-18 21:00                         ` R_SPARC_13 David Miller
2011-01-19  4:12                           ` R_SPARC_13 David Miller
2011-01-17 14:39         ` Bug#609371: linux-image-2.6.37-trunk-sparc64: module scsi_mod: Unknown relocation: 36 Bernhard R. Link
2011-01-18  5:24           ` David Miller
2011-01-18  9:26             ` Jesper Nilsson
2011-01-18  6:27           ` David Miller
2011-01-18 17:05             ` Steven Rostedt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110117193525.GD16154@Krystal \
    --to=mathieu.desnoyers@efficios.com \
    --cc=609371@bugs.debian.org \
    --cc=ben@decadent.org.uk \
    --cc=davem@davemloft.net \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=richm@oldelvet.org.uk \
    --cc=rostedt@goodmis.org \
    --cc=sparclinux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox