This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: New feature - HWCAP/HWCAP2 bits in the TCB
- From: Rich Felker <dalias at libc dot org>
- To: munroesj at linux dot vnet dot ibm dot com
- Cc: Carlos O'Donell <carlos at redhat dot com>, libc-alpha at sourceware dot org
- Date: Sun, 5 Jul 2015 22:13:01 -0400
- Subject: Re: [PATCH] powerpc: New feature - HWCAP/HWCAP2 bits in the TCB
- Authentication-results: sourceware.org; auth=none
- References: <55760314 dot 6070601 at linux dot vnet dot ibm dot com> <20150609163835 dot GI17573 at brightrain dot aerifal dot cx> <1435777940 dot 7125 dot 132 dot camel at oc7878010663> <5596C284 dot 9070108 at redhat dot com> <1436145404 dot 10792 dot 46 dot camel at oc7878010663>
On Sun, Jul 05, 2015 at 08:16:44PM -0500, Steven Munroe wrote:
> > I've suggested to Carlos that this is a problem with the use of the
> > TCB. If one uses the TCB, one should add a dummy symbol that is versioned
> > and tracks when you added the feature, and thus you can depend upon it,
> > but not call it, and that way you get the right versioning. The same
> > problem happened with stack canaries and it's still painfully annoying
> > at the distribution level.
>
> This is completely unnecessary. The load associated with
> __builtin_cpu_supports() will work with any GLIBC what support TLS and
> the worst that will happen is it will load zeros.
That's bad enough -- there are applications of hwcap where you NEED
the correct value, not some (possibly empty) subset of the bits. For
example if you need to know which registers to save/restore in an aync
context-switching setup (rolling your own makecontext/swapcontext) or
if you're implementing a function which has a special calling
convention with a contract not to clobber any but a small fixed set of
registers, but it might callback to arbitrary code in a rare case (ala
__tls_get_addr or tls descriptor functions).
However I don't even see how you can be confident that you'll read
zeros. Is the TCB field before this new field you're adding
always-zero?
Rich