
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