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

Jeroen Hofstee jeroen at myspectrum.nl
Tue Jun 3 21:58:53 CEST 2014


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 at 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



More information about the U-Boot mailing list