Date: Mon, 2 Jun 2014 08:21:06 +0200 From: Albert ARIBAUD <albert.u.boot@aribaud.net> To: Jeroen Hofstee <freebsd_arm@myspectrum.nl> Cc: Tim Kientzle <tim@kientzle.com>, freebsd-arm <freebsd-arm@FreeBSD.org>, Ian Lepore <ian@FreeBSD.org>, Mark R V Murray <mark@grondar.org>, ticso@cicely.de Subject: Re: Building an ARM/RPI-B release (hacked) on CURRENT/AMD64. Message-ID: <E1WrLcJ-0001fP-5z@janus> In-Reply-To: <1401649825.2295.45.camel@yellow> References: <9FDD6F0E-B2A9-48D9-A3E4-181868995FDA@grondar.org> <EC41E53F-96EF-4652-9A02-D49448D104BE@kientzle.com> <20140417103117.GE44138@cicely7.cicely.de> <1397738961.1124.157.camel@revolution.hippie.lan> <ED243420-AC33-4D90-A23D-0266C142F3C1@grondar.org> <1401649825.2295.45.camel@yellow>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Jeroen et al., On Sun, 01 Jun 2014 21:10:25 +0200, Jeroen Hofstee <freebsd_arm@myspectrum.nl> wrote: > On do, 2014-04-17 at 19:01 +0100, Mark R V Murray wrote: > > On 17 Apr 2014, at 13:49, Ian Lepore <ian@FreeBSD.org> wrote: > >=20 > > > U-boot requires that a global register be set aside by the compiler a= nd > > > it's used to access all global vars. As I vaguely understand it, u-b= oot > > > used to want r8 for this, and clang didn't used to support the concept > > > at all. Now clang supports it, but only for r9, and apparently more > > > recent u-boot expects r9 rather than r8. So the fix is probably to u= se > > > more recent u-boot sources (I've been using 2014.01 for imx6 stuff), = and > > > probably to add the new -ffixed-r9 flag for a clang build. > >=20 > > Correct. > >=20 > > The pig in trying to build u-boot 2004.04 with Clang/XDEV is the use of > >=20 > > #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *= gd asm ("r9=E2=80=9D) > >=20 > > which means =E2=80=9Cgd is an alias for the r9 register and is a pointe= r to type =E2=80=A6=E2=80=9D > >=20 > > =E2=80=A6 I think. :-) > >=20 > > Clang doesn=E2=80=99t like this one bit. First objection is to =E2=80= =9Cglobal register variables=E2=80=9D, so if I experimentally knock out the= =E2=80=9Cregister=E2=80=9D, I simply get the second objection - to "multip= le instances of the r9 global variable=E2=80=9D. > >=20 > > Googling a bit suggests that Clang just plain can=E2=80=99t do this. :-( > >=20 >=20 > Well with a bit of creativity this will work [1]. Hopefully this ends up > in mainline u-boot. For the record, it is the U-Boot Arm maintainer > (Albert) who actually dug up the fixed-r9 in llvm (but was a hidden > option for ios).=20 Although my name was not uttered thrice :) allow me to chime in still, and say that while I did dig up the r9 option, it was a mere consequence of Jeroen's effort to make U-boot build with LLVM, and that even though the EABI states that r9 is the register to use if you need one to store a global constant, U-Boot itself used r8 rather than r9 and thus was non-compliant until Jeroen fixed it in mainline, see commit fe1378a961e508b31b1f29a2bb08ba1dac063155), and it is Jeroen's effort too that will make U-Boot eventualy buildable with LLVM/clang. BTW, Jeroen, I'll have a look at your patch series today. > Regards, > Jeroen >=20 > [1] > https://github.com/jhofstee/u-boot/commit/4ab717325cb7e7b02efaec2b3f95bf9= 874492ba2 Amicalement, --=20 Albert.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1WrLcJ-0001fP-5z>