From: luto@amacapital.net (Andy Lutomirski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 7/9] ARM: add vdso user-space code
Date: Mon, 30 Jun 2014 08:56:03 -0700 [thread overview]
Message-ID: <53B18893.6040701@amacapital.net> (raw)
In-Reply-To: <20140628100347.GE32514@n2100.arm.linux.org.uk>
On 06/28/2014 03:03 AM, Russell King - ARM Linux wrote:
> On Sat, Jun 28, 2014 at 10:53:14AM +0100, Russell King - ARM Linux wrote:
>> On Sun, Jun 22, 2014 at 10:11:56PM -0500, Nathan Lynch wrote:
>>> Place vdso-related user-space code in arch/arm/kernel/vdso/.
>>>
>>> It is almost completely written in C with some assembly helpers to
>>> load the data page address, sample the counter, and fall back to
>>> system calls when necessary.
>>>
>>> If CONFIG_ARM_ARCH_TIMER is not enabled, the vdso cannot service
>>> high-resolution clocks and falls back to syscalls. Low-resolution
>>> clocks e.g. CLOCK_REALTIME_COARSE can be serviced regardless.
>>>
>>> Of particular note is that a post-processing step ("vdsomunge") is
>>> necessary to produce a shared object which is architecturally allowed
>>> to be used by both soft- and hard-float EABI programs.
>>>
>>> The 2012 edition of the ARM ABI defines Tag_ABI_VFP_args = 3 "Code is
>>> compatible with both the base and VFP variants; the user did not
>>> permit non-variadic functions to pass FP parameters/results."
>>> Unfortunately current toolchains do not support this tag, which is
>>> ideally what we would use.
>>>
>>> The best available option is to ensure that both EF_ARM_ABI_FLOAT_SOFT
>>> and EF_ARM_ABI_FLOAT_HARD are unset in the ELF header's e_flags,
>>> indicating that the shared object is "old" and should be accepted for
>>> backward compatibility's sake. While binutils < 2.24 appear to
>>> produce a vdso.so with both flags clear, 2.24 always sets
>>> EF_ARM_ABI_FLOAT_SOFT, with no way to inhibit this behavior. So we
>>> have to fix things up with a custom post-processing step.
>>>
>>> In fact, the VDSO code in glibc does much less validation (including
>>> checking these flags) than the code for handling conventional
>>> file-backed shared libraries, so this is a bit moot unless glibc's
>>> VDSO code becomes more strict.
>>>
>>> Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com>
>>> ---
>>> arch/arm/kernel/asm-offsets.c | 5 +
>>> arch/arm/kernel/vdso/.gitignore | 1 +
>>> arch/arm/kernel/vdso/Makefile | 59 +++++++
>>> arch/arm/kernel/vdso/checkundef.sh | 9 +
>>> arch/arm/kernel/vdso/datapage.S | 15 ++
>>> arch/arm/kernel/vdso/vdso.S | 35 ++++
>>> arch/arm/kernel/vdso/vdso.lds.S | 88 ++++++++++
>>> arch/arm/kernel/vdso/vdsomunge.c | 193 +++++++++++++++++++++
>>> arch/arm/kernel/vdso/vgettimeofday.c | 320 +++++++++++++++++++++++++++++++++++
>>> 9 files changed, 725 insertions(+)
>>> create mode 100644 arch/arm/kernel/vdso/.gitignore
>>> create mode 100644 arch/arm/kernel/vdso/Makefile
>>> create mode 100755 arch/arm/kernel/vdso/checkundef.sh
>>> create mode 100644 arch/arm/kernel/vdso/datapage.S
>>> create mode 100644 arch/arm/kernel/vdso/vdso.S
>>> create mode 100644 arch/arm/kernel/vdso/vdso.lds.S
>>> create mode 100644 arch/arm/kernel/vdso/vdsomunge.c
>>> create mode 100644 arch/arm/kernel/vdso/vgettimeofday.c
>>
>> One change I would like to see (to stop the directory tree getting soo
>> deep) is to move this to arch/arm/vdso - just like x86 is arch/x86/vdso.
>> Was there a pressing reason to have it in arch/arm/kernel ?
>
> It also looks like there's something missing for vdso_install to work.
> arch/x86 has this:
>
> PHONY += vdso_install
> vdso_install:
> $(Q)$(MAKE) $(build)=arch/x86/vdso $@
>
> but doesn't list it in the arch help. I'm sure we can do better on ARM. :)
In 3.16-rc3 this is rather improved, albeit still undocumented. It's
probably worth matching x86's behavior for gdb's benefit.
--Andy
next prev parent reply other threads:[~2014-06-30 15:56 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 [this message]
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
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=53B18893.6040701@amacapital.net \
--to=luto@amacapital.net \
--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.