Hi Andrew, On 07/28/2016 11:20 AM, Andrew Burgess wrote: > This is a slightly odd series of 2 patches. The two patches are > actually alternative solutions to the same problem. I'm keen to see > one of these merged, but I don't know which method would be preferred. > > This commit aims to address an issue that was introduced / mentioned > in commit 20554a78a9bba278c6b9cbbb4cfc5bde3772c56d (ARC: > Conditionalise certain relocations as provided by TLS tools only). > > The problem is that not all historic versions of binutils have > supported the @pcl relocation type. This problem is compounded by the > fact that the arithmetic construct that was previously used to > synthesise an @pcl like behaviour, does not work on recent versions of > binutils. > > In the commit 20554a78a code was added that selects between the new > style @pcl relocations, and the old style arithmetic construct, > however, this selection is done based on whether the uClibc user has > configured with native threads or not. Right - the idea at the time was @pcl was added to tools for TLS/NPTL support and thus uClibc NPTL loosely implied that your tools will have that support - but this was not the ideal choice I agree. > Of course, a uClibc user could choose to use a modern version of > binutils AND configure without native thread support, in which case > uClibc will not compile. > > I have two proposed solutions. In patch 1/2 I simply drop support for > the older versions of binutils in favour of the new @pcl relocation > type. This feels the cleanest solution, but I don't know how strongly > the uClibc(-ng) community feels about maintaining compatibility for > older versions of the tools. So this was reported recently by Waldemar's build service too. http://mailman.uclibc-ng.org/pipermail/devel/2016-July/001072.html And we have an exact same patch floated internally which Vlad sent out earlier this week > Given that I anticipated push back against the first patch I took a > look at how I might maintain compatibility. Not really - while indeed 1/2 opens up a non-compatibilty window, there is less likelihood people will mix-n-match different baselines of uclibc and gcc/gas. So Vlad's patch does exactly that. > It turns out to be pretty > easy, and that is patch 2/2. In this patch I drew inspiration from > similar examples in the Rules.mak file to check if the toolchain > supports @pcl relocations or not. With this done we have a new define > based on the specific toolchain feature being supported or not, which > can then be used to conditionalise the code. Indeed your 2/2 seems to be the most "past-proof" code change. So I would think it is indeed better and is something I should have done in the first place. @Alexey, @Vlad what say you ? -Vineet > Would you consider merging one of these patches? > > Thanks, > Andrew >