From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeroen Hofstee Date: Tue, 03 Jun 2014 21:58:53 +0200 Subject: [U-Boot] [RFC 07/10] ARM: make gd a function a function for clang In-Reply-To: References: <1401568344-4441-1-git-send-email-jeroen@myspectrum.nl> <1401568344-4441-8-git-send-email-jeroen@myspectrum.nl> Message-ID: <1401825533.2465.58.camel@yellow> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 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 > > > > +#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