On Aug 14, 2018, at 4:20 AM, Iain Sandoe <i...@sandoe.co.uk> wrote: > When function sub-sections are enabled, Darwin’s assembler needs the FDE > local start > label for each sub-section to follow a linker-visible one so that the FDE > will be correctly > associated with the code of the subsection. > > The current code in final.c emits a linker-visible symbol, as needed by > several targets. > However the local label used to define the FDE start precedes the > linker-visible one > which, for Darwin causes it (the FDE start) to be associated with the > previous linker- > visible symbol (or the section start if there isn’t one). This applies > regardless of the > actual address of the label, for toolchain assemblers that have strict > interpretation of > the Darwin sub-sections-via-symbols ABI. > > The patch adds a new local label (analogous to the "LFBn” emitted for the > regular > function starts) just after the linker-visible label emitted after switching > text section. > The FDE second entry is made to point to this instead of the LcoldStartn one. > This > should be a no-op for targets using .cfi_ and for targets without > sub-sections-via-symbols. > > Bootstrapped on x86_64 and i686 linux and on a number of Darwin platforms > (from > i686-darwin9 to x86_64-darwin17). > > OK for trunk? > open branches? (although it's a regression on 8, it’s a latent wrong-code on > all branches)
I'm fine with the darwin aspects of it, but I think it needs review/approval by final.c/dwarf people.