What's up with the commit status on these proposed patches?

On Sun, Nov 6, 2016 at 2:36 PM, Iain Sandoe <i...@codesourcery.com> wrote:
> Hi Folks,
>
> Including Jeff on the cc since we were discussing this on Friday (and it’s 
> not 100% clear who’s reviewing configury patches at present).
> Including Uros, because there’s one minor change to i386/i386.c
>
> PR71767 is " Endless stream of warnings when using GCC with -Wa,-q and Clang 
> Integrated Assembler”.
> ** we are talking 40k testsuite fails, so this is a show-stopper for current 
> toolchains.
>
> Actually, what’s happened is that recent xcode tools have started to issue a 
> warning about deprecated use of a mechanism to support coalesced symbols by 
> using separate sections with specific attributes in the (ancient) days before 
> the static linker supported them directly.  We need to catch up since 
> deprecation will no doubt be followed by removal.
>
> Essentially, now that the linker is capable of dealing with such things, the 
> right solution is to emit them into the regular sections and drop the use of 
> the coalesced ones.  This has been possible for some time, and Xcode is now 
> flagging that it’s time to tidy up and drop the old mechanism.
>
> However,
>
> A. this is only true when the “binutils” (cctools + ld64) are sufficiently 
> new to support it.
>   - so the solution needs to be made to depend on the version of ld64 in use.
>
> B. more importantly, it reveals some cases where the ld64 atom model*** will 
> be violated when symbols are concatenated such that weak globals and non-weak 
> locals can be confused.
>  - we need to fix this before we can apply A
>
> C. it makes a secondary variant of pr57438 fire more often (when switches 
> contain trailing cases with __builtin_unreachable() resulting in trailing 
> local symbols with jump-table references, that potentially have the same 
> address as a following weak global).  That might seem improbable, but c++ 
> with case statements with an unreachable default manage to hit it...
>  - I’ll post for this separately, but noting it in passing.
>
> ====
>
> *** The ld64 atom model summary;
>
> Instead of using -ffunction-sections/-fdata-sections, Darwin’s linker has a 
> different model of partitioning the input objects such that they might be 
> rearranged to minimise displacements, and to identify dead code that may be 
> stripped (in a similar manner to —gc-sections).
>
> Input binaries to ld64 are automatically partitioned into “atoms”;
> an atom is defined as “a section of code or data beginning with a 
> linker-visible symbol and of non-zero size”.
>
> These “atoms” have the properties of their initial symbol and may be 
> rearranged and dead-stripped.
>
> — the general problem is that we might have a situation where we have:
>
>  visible-global-weak:
>  ….
>
> Lxxxx:
>   ….
>
>   pic reference to Lxxxx
>
> ld64 will split the object at “visible-global-weak” but it won’t see “Lxxxx” 
> and so the pic reference will appear to point into the visible-global-weak 
> atom, [which is not allowed without indirection (to support interposing)].
>
> Of course, that’s a false-positive complaint - but ld64 can’t see the other 
> place to split.
>
> This is solved in other Darwin toolchains by making the “L” into “l” in such 
> cases;  lower-case “l” is not hidden by the assembler, and thus the linker 
> can see it and split the second section of code into its own ‘non-weak’ atom; 
> everyone’s happy.  Of course, we don’t want to do this unnecessarily, since 
> it’s inefficient from the PoV of extra symbols.
>
> linker-visible symbols made this way will not be retained in the final linked 
> entity (dso or exe).
>
> So:
>
> Patch 1:  implements the changes to modify L => l in the relevant places.
>
> Patch 2: Adds configury to specify or detect that the linker is ld64 (or 
> compatible) and to determine its version; there’s a fall-back to allow the 
> version to be specified by someone doing a native or Canadian cross.
>
> Patch 3: Is the actual fix that switches the section use to ‘regular’ for 
> sufficiently modern ld64 (there’s a minor change to i386/i386.c)
>
> Patch 4: (Mostly Dominique’s work) fixes up the testsuite fallout.
>
> This has been tested across the Darwin patch - from powerpc-darwin9 - 
> x86_64-apple-darwin16 and I did a bootstrap and check on x86_64-linux-gnu.
>
> The patches could be applied one at a time - but N typically depends on N-1 - 
> so the sequence of application needs to follow this.
>
> Iain
>
>
>
>

Reply via email to