From: Ingo Molnar <mingo@elte.hu>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: LKML <linux-kernel@vger.kernel.org>, Tim Abbott <tabbott@MIT.EDU>,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH/RFT 0/13] x86: unify vmlinux.lds
Date: Wed, 29 Apr 2009 10:31:34 +0200 [thread overview]
Message-ID: <20090429083134.GA16680@elte.hu> (raw)
In-Reply-To: <20090429082341.GA27386@uranus.ravnborg.org>
* Sam Ravnborg <sam@ravnborg.org> wrote:
> > >
> > > o 64 bit uses PHDRS more extensively than 32 bit. Could they be the same?
> >
> > Hm, PHDRS content really matters mostly for the vDSO, so that gdb
> > can treat the vsyscall entry page(s) more as a normal DSO.
> >
> > for the kernel image itself it does not matter much how standard of
> > an ELF binary it is: the boot loader does not care about the PHDR
> > description of linker segments and we dont execute the binary.
> >
> > UML and lguest has its own ELF-binary creation methods.
> >
> > I think the only relevancy it has on the kernel image is on readonly
> > symbols: the PHDRS command gives a reasonable default flags value to
> > various segments. We _usually_ give all segments their proper
> > permission explicitly - but it was not unheard of to have mixups
> > there and to see supposedly-readonly sections end up in a rw area or
> > for rw sections to end up in the readonly section.
> >
> > The latter will be found quickly because it triggers a kernel crash
> > - the former kind of bug can linger for a long time.
> >
> > So i think we should generate proper PHDRS (i.e. use the 64-bit
> > linker script portion to also include percpu and init-data bits),
> > for consistency.
> >
> > Do you know what the linker does if the PHDRS and the section flags
> > collide? Does the local flag override the PHDRS flag? I havent
> > checked.
>
> I have not looked much into the linker support of PHDRS.
> Which is also why I did not dare touching this stuff.
>
> >From 'info ld':
> The linker will normally set the segment flags based on the sections
> which comprise the segment. You may use the `FLAGS' keyword to
> explicitly specify the segment flags.
>
> So the PHDRS settings take effect.
ok. So i think we should unify to the union of all PHDRS commands.
> > > o _stext does not cover all text for 32 bit - a bug? For 64b bit it does.
> > > It is only the .code16 wakeup stuff that is not covered but anyway.
> >
> > that's a bug that should be fixed. Harmless - but needs some testing
> > - there are tools (profilers, etc.) that might have assumptions
> > about _stext so this needs some test-time.
> >
> > Also, _stext is the start address for the readonly section - so by
> > moving it down a bit on 32-bit we extend readonly to that .code16
> > suspend code. If it contains any self-modifying code it will crash.
>
> hpa should know about the latter.
> I suggest to give the current patchset some air time before we move _stext.
Yes, of course. I have just processed them, cleaned up the
changelogs, fixed that minor detail with the attribution, applied
them to tip:x86/kbuild and started testing them - if initial tests
look good i'll push them out.
All other changes should be incremental - these patches alone
contain more than enough side-effects as-is already.
> > > o _edata covers much more on 32 bit
> >
> > 32-bit is corret there. We do use _edata in a couple of places, such
> > as in resource ranges - so there could be side-effects, but any such
> > side effects would likely show some real hidden bug or uncleanliness
> > so it's good to fix that.
>
> OK - again if we could wait a bit with this change it would be good.
>
> >
> > > o The nosave stuff differs (but that is due to the PHDRS stuff anyway)
> >
> > nosavedata is a really ancient construct used almost nowhere. That's
> > a question to Rafael and Linus: can we just get rid of it? The only
> > user seems to be:
> >
> > int in_suspend __nosavedata = 0;
>
> A lot of stuff added just to support a single integer..
> If we could get rid of that it would be great.
yeah.
> > > o Different alignmnet requirements in several spots
> >
> > do you have a list of them? There's hpa's fix from yesterday that
> > shows that we have real bugs there.
>
> There are two places - pasted below.
> 1)
> #ifdef CONFIG_X86_32
> . = ALIGN(32);
> #else
> . = ALIGN(PAGE_SIZE);
> . = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
> #endif
> .data.cacheline_aligned :
looks weird. Even on 32-bit we should align to
CONFIG_X86_L1_CACHE_BYTES - and on 64-bit why do we align to page
size then to l1-cacheline-size which is always <= PAGE_SIZE?
This should become either:
. = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
or:
. = ALIGN(PAGE_SIZE);
I'd vote for the first one - assuming the page alignment wasnt due
to the previous section somehow being special (being mapped to
user-space or having different pagetable permissions).
> 2)
> #ifdef CONFIG_X86_32
> . = ALIGN(32);
> #else
> . = ALIGN(CONFIG_X86_INTERNODE_CACHE_BYTES);
> #endif
> .data.read_mostly :
we should define CONFIG_X86_INTERNODE_CACHE_BYTES on 32-bit too (set
it to l1 cacheline size) and then use:
. = ALIGN(CONFIG_X86_INTERNODE_CACHE_BYTES);
> > > o All the stuff added to support relocable kernels
> >
> > hpa found a bug (well, misfeature) in the relocatable kernel code
> > too.
>
> If I understood this correct we had an issue that the start
> address of the section was no aligned because the ALIGN() was
> located inside the output section.
yeah. And we had that in quite a few places.
> That should not be a problem after applying this patchset as
> they are almost all moved out.
> I left them in the output section where they:
> - are used to align the end address of an output section
> - for .text where the .code16 had special requirments to avoid hurting 64 bit
> - for .data_nosave on 64 bit - because I forgot to delete it
> The latter is a noop since we have an identical ALING() just above it
ok.
This is a really nice patch-set, just in case i didnt mention it yet
;-)
Ingo
next prev parent reply other threads:[~2009-04-29 8:32 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-29 7:35 [PATCH/RFT 0/13] x86: unify vmlinux.lds Sam Ravnborg
2009-04-29 7:47 ` [PATCH 01/13] x86: beautify vmlinux_32.lds.S Sam Ravnborg
2009-04-29 9:03 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 02/13] x86, vmlinux.lds: unify header/footer Sam Ravnborg
2009-04-29 8:04 ` Ingo Molnar
2009-04-29 8:14 ` Ingo Molnar
2009-04-29 8:25 ` Sam Ravnborg
2009-04-29 8:37 ` Ingo Molnar
2009-04-29 8:51 ` Sam Ravnborg
2009-04-29 9:03 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 9:05 ` [tip:x86/kbuild] x86, vmlinux.lds: add copyright tip-bot for Ingo Molnar
2009-04-29 7:47 ` [PATCH 03/13] x86, vmlinux.lds: unify PHDRS Sam Ravnborg
2009-04-29 9:03 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 04/13] x86, vmlinux.lds: unify start/end of SECTIONS Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 05/13] x86, vmlinux.lds: unify .text output sections Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 06/13] x86, vmlinux.lds: unify exceptiontable Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] x86, vmlinux.lds: unify exception table tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 07/13] x86, vmlinux.lds: unify data output sections Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 08/13] x86, vmlinux.lds: move vsyscall " Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 09/13] x86, vmlinux.lds: unify first part of initdata Sam Ravnborg
2009-04-29 9:04 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 10/13] x86, vmlinux.lds: unify parainstructions Sam Ravnborg
2009-04-29 9:05 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 11/13] x86, vmlinux.lds: unify .exit.* and .init.ramfs Sam Ravnborg
2009-04-29 9:05 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 12/13] x86, vmlinux.lds: unify percpu Sam Ravnborg
2009-04-29 9:05 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:47 ` [PATCH 13/13] x86, vmlinux.lds: unify remaining parts Sam Ravnborg
2009-04-29 9:05 ` [tip:x86/kbuild] " tip-bot for Sam Ravnborg
2009-04-29 7:57 ` [PATCH/RFT 0/13] x86: unify vmlinux.lds Ingo Molnar
2009-04-29 8:23 ` Sam Ravnborg
2009-04-29 8:31 ` Ingo Molnar [this message]
2009-04-29 9:04 ` Ingo Molnar
2009-04-29 10:00 ` Ingo Molnar
2009-04-29 10:50 ` Sam Ravnborg
2009-04-29 10:59 ` Ingo Molnar
2009-04-29 11:05 ` [tip:x86/kbuild] x86, vmlinux.lds: fix relocatable symbols tip-bot for Ingo Molnar
2009-04-29 11:34 ` Ingo Molnar
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=20090429083134.GA16680@elte.hu \
--to=mingo@elte.hu \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=sam@ravnborg.org \
--cc=tabbott@MIT.EDU \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.