svn commit: r234014 - head/lib/libc/arm/gen

Andrew Turner andrew at fubar.geek.nz
Mon Apr 9 08:44:37 UTC 2012


On Mon, 9 Apr 2012 01:03:15 -0700
Juli Mallett <jmallett at FreeBSD.org> wrote:

> On Sun, Apr 8, 2012 at 21:14, Andrew Turner <andrew at fubar.geek.nz>
> wrote:
> > We can implement it as a naked function but we will need to store
> > all registers other than r0 and pc which seems a waste.
> >
> > The problem implementing it in an assembly file is we are unable to
> > use ARM_TP_ADDRESS is defined as:
> > #define ARM_TP_ADDRESS (ARM_VECTORS_HIGH + 0x1000)
> >
> > Where ARM_VECTORS_HIGH is defined as:
> > #define ARM_VECTORS_HIGH 0xffff0000U
> >
> > I could remove the U from ARM_VECTORS_HIGH however I'm not sure on
> > the implications of that change.
> 
> Oh, is that all?  :)  It's easy to have an ifdef that adds the u
> suffix in C and not in assembly.  That's perfectly appropriate in this
> case.  If you want to be fancy you can use a macro which adds the U to
> the constant in C and not in assembly, and use it in other places, but
> that's usually unnecessary.  In the kernel we sometimes use assym to
> get around this sort of thing, but that's fully unnecessary.
> 
> Look at powerpc/include/vmparam.h for an example of a header where we
> do this currently (VM_MAXUSER_ADDRESS specifically.)  This is the
> right thing to do by far over using C as a wrapper for assembly in
> this way.

How does the attached (untested) patch look. It explicitly loads
ARM_TP_ADDRESS into a r0 to ensure r1-3 are not touched.

Andrew
-------------- next part --------------
A non-text attachment was scrubbed...
Name: arm_tls.patch
Type: text/x-patch
Size: 4757 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20120409/8bedddee/arm_tls.bin


More information about the svn-src-all mailing list