From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 8/9] ARM: vdso initialization, mapping, and synchronization
Date: Wed, 2 Jul 2014 17:27:26 +0100 [thread overview]
Message-ID: <20140702162726.GG24879@arm.com> (raw)
In-Reply-To: <53B430F3.9070804@mentor.com>
On Wed, Jul 02, 2014 at 05:18:59PM +0100, Nathan Lynch wrote:
> On 07/02/2014 10:54 AM, Andy Lutomirski wrote:
> > Caveat 2: (major) I'm kind of surprised that this, or the current
> > code, works reliably. You're doing something that I tried briefly for
> > x86_64:
> >
> > _end = .;
> > PROVIDE(end = .);
> >
> > . = ALIGN(PAGE_SIZE);
> > PROVIDE(_vdso_data = .);
> >
> > This sounds great, except that you're assuming that vdso_end -
> > vdso_start == ALIGN(_end, PAGE_SIZE) - (vdso base address).
> >
> > If you *fully* strip the vdso (eu-strip --strip-sections), then this
> > is true: eu-strip --strip-sections outputs just the PT_LOAD piece of
> > the vdso. But any binutils-generated incompletely stripped ELF image
> > contains a section table and possible non-allocatable sections at the
> > end. If these exceed the amount of unused space in the last PT_LOAD
> > page, then they'll spill into the next page, and _vdso_data in the
> > vdso will no longer match the address at which vdso.c loads it. Boom!
> >
> > I bet you're getting away with this because the whole arm64 vdso seems
> > to be written in assembly, so it seems extremely unlikely to exceed
> > one page minus a few hundred bytes. But if you start adding
> > complexity, you might get unlucky.
>
> This is why I switched (in v5) the proposed 32-bit ARM VDSO to place the
> data page before the code -- adding -frecord-gcc-switches to the
> compiler flags was enough to break it.
>
> I meant to call Will's attention to it at the time for arm64's sake, but
> I guess it slipped my mind... sorry.
Hmm, so I could definitely look at doing the same thing, but I don't know if
we actually need to for arm64. As Andy points out, we're written entirely in
assembly and we objcopy -S to create the vdso.so. I've dumped the headers
below and everything appears to be PT_LOAD.
Will
--->8
arch/arm64/kernel/vdso/vdso.so: file format elf64-littleaarch64
arch/arm64/kernel/vdso/vdso.so
architecture: aarch64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000000000002d0
Program Header:
LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**4
filesz 0x00000000000006e8 memsz 0x00000000000006e8 flags r-x
DYNAMIC off 0x00000000000005d8 vaddr 0x00000000000005d8 paddr 0x00000000000005d8 align 2**3
filesz 0x00000000000000f0 memsz 0x00000000000000f0 flags r--
NOTE off 0x00000000000002b8 vaddr 0x00000000000002b8 paddr 0x00000000000002b8 align 2**2
filesz 0x0000000000000018 memsz 0x0000000000000018 flags r--
EH_FRAME off 0x00000000000004f0 vaddr 0x00000000000004f0 paddr 0x00000000000004f0 align 2**2
filesz 0x0000000000000034 memsz 0x0000000000000034 flags r--
Dynamic Section:
SONAME linux-vdso.so.1
HASH 0x0000000000000120
STRTAB 0x00000000000001f8
SYMTAB 0x0000000000000150
STRSZ 0x0000000000000077
SYMENT 0x0000000000000018
VERDEF 0x0000000000000280
VERDEFNUM 0x0000000000000002
VERSYM 0x0000000000000270
Version definitions:
1 0x01 0x0deebfa1 linux-vdso.so.1
2 0x00 0x075fcb89 LINUX_2.6.39
private flags = 0:
Sections:
Idx Name Size VMA LMA File off Algn
0 .hash 00000030 0000000000000120 0000000000000120 00000120 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .dynsym 000000a8 0000000000000150 0000000000000150 00000150 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .dynstr 00000077 00000000000001f8 00000000000001f8 000001f8 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .gnu.version 0000000e 0000000000000270 0000000000000270 00000270 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .gnu.version_d 00000038 0000000000000280 0000000000000280 00000280 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .note 00000018 00000000000002b8 00000000000002b8 000002b8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_CONTENTS
6 .text 00000220 00000000000002d0 00000000000002d0 000002d0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
7 .eh_frame_hdr 00000034 00000000000004f0 00000000000004f0 000004f0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .eh_frame 000000b0 0000000000000528 0000000000000528 00000528 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .dynamic 000000f0 00000000000005d8 00000000000005d8 000005d8 2**3
CONTENTS, ALLOC, LOAD, DATA
10 .got 00000008 00000000000006c8 00000000000006c8 000006c8 2**3
CONTENTS, ALLOC, LOAD, DATA
11 .got.plt 00000018 00000000000006d0 00000000000006d0 000006d0 2**3
CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
no symbols
next prev parent reply other threads:[~2014-07-02 16:27 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 3:11 [PATCH v7 0/9] ARM: VDSO Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 1/9] clocksource: arm_arch_timer: change clocksource name if CP15 unavailable Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 2/9] clocksource: arm_arch_timer: enable counter access for 32-bit ARM Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 3/9] ARM: arch_timer: remove unused functions Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 4/9] arm64: " Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 5/9] ARM: place sigpage at a random offset above stack Nathan Lynch
2014-06-23 3:11 ` [PATCH v7 6/9] ARM: miscellaneous vdso infrastructure, preparation Nathan Lynch
2014-06-30 10:11 ` Arnd Bergmann
2014-06-30 12:27 ` Nathan Lynch
2014-06-30 13:06 ` Arnd Bergmann
2014-06-23 3:11 ` [PATCH v7 7/9] ARM: add vdso user-space code Nathan Lynch
2014-06-28 9:53 ` Russell King - ARM Linux
2014-06-28 10:03 ` Russell King - ARM Linux
2014-06-30 15:56 ` Andy Lutomirski
2014-06-28 15:19 ` Nathan Lynch
2014-06-28 15:26 ` Russell King - ARM Linux
2014-06-28 16:13 ` Nathan Lynch
2014-06-28 18:12 ` Russell King - ARM Linux
2014-06-28 19:45 ` Nathan Lynch
2014-06-28 20:11 ` Russell King - ARM Linux
2014-06-28 21:35 ` Nathan Lynch
2014-06-29 8:34 ` Russell King - ARM Linux
2014-06-29 15:48 ` Nathan Lynch
2014-06-29 16:07 ` Russell King - ARM Linux
2014-06-29 23:04 ` Nathan Lynch
2014-06-30 21:33 ` Andy Lutomirski
2014-06-30 15:59 ` Andy Lutomirski
2014-06-30 16:50 ` Nathan Lynch
2014-06-30 21:29 ` Andy Lutomirski
2014-07-01 9:00 ` Will Deacon
2014-07-01 13:34 ` Nathan Lynch
2014-07-01 14:11 ` Andy Lutomirski
2014-07-01 13:28 ` Nathan Lynch
2014-07-01 14:56 ` Andy Lutomirski
2014-06-23 3:11 ` [PATCH v7 8/9] ARM: vdso initialization, mapping, and synchronization Nathan Lynch
2014-06-30 21:37 ` Andy Lutomirski
2014-07-01 9:03 ` Will Deacon
2014-07-01 14:11 ` Nathan Lynch
2014-07-01 14:15 ` Will Deacon
2014-07-01 14:17 ` Andy Lutomirski
2014-07-01 17:27 ` Christopher Covington
2014-07-02 14:40 ` Will Deacon
2014-07-02 15:54 ` Andy Lutomirski
2014-07-02 16:18 ` Nathan Lynch
2014-07-02 16:27 ` Will Deacon [this message]
2014-07-02 16:47 ` Andy Lutomirski
2014-07-02 17:24 ` Will Deacon
2014-07-02 18:34 ` Andy Lutomirski
2014-07-02 18:54 ` Will Deacon
2014-07-22 0:14 ` Andy Lutomirski
2014-07-22 8:13 ` Will Deacon
2014-07-01 14:01 ` Nathan Lynch
2014-07-01 14:09 ` Andy Lutomirski
2014-07-01 14:14 ` Russell King - ARM Linux
2014-06-23 3:11 ` [PATCH v7 9/9] ARM: add CONFIG_VDSO Kconfig and Makefile bits Nathan Lynch
2014-06-27 8:51 ` [PATCH v7 0/9] ARM: VDSO Jan Glauber
2014-06-27 8:57 ` Russell King - ARM Linux
2014-06-27 9:41 ` Ard Biesheuvel
2014-06-27 9:46 ` Russell King - ARM Linux
2014-06-27 17:01 ` Nathan Lynch
2014-06-28 9:42 ` Russell King - ARM Linux
2014-06-28 9:55 ` Russell King - ARM Linux
2014-06-28 14:49 ` Russell King - ARM Linux
2014-06-30 7:27 ` Arnd Bergmann
2014-06-30 7:43 ` Arnd Bergmann
2014-06-30 18:27 ` Nathan Lynch
2014-06-27 16:00 ` Nathan Lynch
2014-06-30 16:03 ` Andy Lutomirski
2014-06-30 8:12 ` Ard Biesheuvel
2014-07-01 16:34 ` Nathan Lynch
2014-07-01 20:08 ` Ard Biesheuvel
2014-07-01 22:44 ` Russell King - ARM Linux
2014-06-30 14:40 ` Will Deacon
2014-06-30 15:42 ` Nathan Lynch
2014-06-30 21:56 ` Andy Lutomirski
2014-07-01 9:04 ` Will Deacon
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=20140702162726.GG24879@arm.com \
--to=will.deacon@arm.com \
--cc=linux-arm-kernel@lists.infradead.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.