[U-Boot] [RFC 07/10] ARM: make gd a function a function for clang

Jeroen Hofstee
2014-06-03T19:58:53Z

Hi Simon (this time with reply..)

On ma, 2014-06-02 at 20:20 -0600, Simon Glass wrote:
> Hi Jeroen,
>
> On 31 May 2014 14:32, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> > ---
> > arch/arm/include/asm/global_data.h | 17 +++++++++++++++++
> > 1 file changed, 17 insertions(+)
> >
> > diff --git a/arch/arm/include/asm/global_data.h b/arch/arm/include/asm/global_data.h
> > index 63e4ad5..646d694 100644
> > --- a/arch/arm/include/asm/global_data.h
> > +++ b/arch/arm/include/asm/global_data.h
> > @@ -44,10 +44,27 @@ struct arch_global_data {
> >
> > #include <asm-generic/global_data.h>
> >
> > +#ifdef __clang__
> > +
> > +#define DECLARE_GLOBAL_DATA_PTR
> > +#define gd get_gd()
> > +
> > +static __inline volatile gd_t *get_gd(void)
> > +{
> > + gd_t *gd_ptr;
> > +
> > + __asm__ volatile("mov %0, r9\n" : "=r" (gd_ptr));
> > +
> > + return gd_ptr;
> > +}
> > +
> > +#else
> > +
> > #ifdef CONFIG_ARM64
> > #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("x18")
> > #else
> > #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r9")
> > #endif
> > +#endif
> >
> > #endif /* __ASM_GBL_DATA_H */
>
> Probably a good idea to copy Albert on these patches. What happens if
> you compile ARM64 with Clang?

As is it will complain that is has no idea what r9 is. At the moment
clang does not have a -ffixed-x18 so there is no polite way to make it
work. With a slightly hacked llvm it seems promising (it compiles at
least and disassembly seems fine). I have no hardware to test it on
though. It would be nice to know if it actually boots..

Perhaps the best thing to do for now is error out and point to the
README explaining why it doesn't work.

Regards,
Jeroen