This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] powerpc: New feature - HWCAP/HWCAP2 bits in the TCB


On Wed, Jun 10, 2015 at 11:28:15AM +0200, Florian Weimer wrote:
> On 06/09/2015 08:26 PM, Rich Felker wrote:
> > On Tue, Jun 09, 2015 at 08:21:38PM +0200, Florian Weimer wrote:
> >> On 06/09/2015 06:01 PM, Steven Munroe wrote:
> >>
> >>> A Static variable would require a an indirect load via the TOC/GOT
> >>> (which can be megabytes for a large program/library). I really really
> >>> want the avoid that.
> >>
> >> Could you encode the information in the address itself?  Then the
> >> indirection goes away.
> > 
> > You mean using (unsigned long)&__hwcap_hack or similar as the hwcap
> > bits?
> 
> Exactly.
> 
> > I don't see how you could make that work for static linking,
> > where the linker is going to put the GOT in the read-only text
> > segment.
> 
> Oh.  Is this optimization relevant to statically-linked binaries?

Global data access is mildly expensive even in static binaries for
PPC, I think, because there are no 32-bit immediates. Maybe it could
use two 16-bit immediates and bypass the GOT but I'm not sure if it
does this. I suspect there are a lot of codegen improvements like this
that could be made on MIPS-like RISC targets with poor support for
immediates and data addressing which would be A LOT more worthwhile
than just hacking a few arbitrarily-privileged pieces of data into the
TCB...

> I suppose the static linking case could be addressed with a new
> relocation for the static linker, as long as it is possible to reach a
> writable page from the GOT base using an offset determined at linked
> time.  Whether all this is worth the effort, I do not know.  The entire
> mechanism might turn out generally useful for mostly-read global
> variables without strong consistency requirements.

In the case of huge programs with lots of GOTs that access hwcap from
lots of places, I think you'd have to make lots of pages writable.

In the case of programs that just access hwcap from some cold-path
init code, this whole discussion is pointless.

Rich


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]