dongjianqiang2 wrote:



> > > My understanding is that this will make all calls to global functions 
> > > into long calls.
> > > In AArch64 static linkes are required to insert range extension thunks 
> > > for out of range BLs. In the best case this is just another direct 
> > > branch, at worst case for `--pic-veneer` this is just `adrp, add, br`. I 
> > > would expect that on-demand linker inserted thunks would outperform 
> > > making all calls long for the majority of programs. I'm interested in any 
> > > data that shows that long calls works better, and whether that could feed 
> > > back into the lld thunk generation code. For example are the thunks too 
> > > far away from the caller which causes page faults etc.
> > > I note that with `-ffunction-sections` and certain linker options calls 
> > > to static functions can go out of range too. These would get handled by 
> > > linker thunks though.
> > 
> > 
> > This option is explicitly designed to ‌enable reliable patching workflows‌ 
> > when compiling object files. It is to guarantee call range safety in 
> > patches‌. When modifying/recompiling ‌individual object files‌ (e.g., 
> > during security patches),final memory layouts are ‌unknown at compile 
> > time‌, patched functions might end up >128MB away from callers. 
> > -mlong-calls forces all cross-object calls to use ‌64-bit absolute 
> > addressing‌.
> 
> If I've understood object patching, this would mean inserting a new function 
> implementation, and binary patching all the call-sites to point to the new 
> implementation.
> 
> As an aside to this patch.
> 
> I'd be tempted to see if I could indirect all the calls via the PLT. Then 
> you'd be able add the new function and alter the dynamic symbol table entry 
> to point to the new implementation and the dynamic linker would do the rest. 
> That might need some fiddling in the linker or compiler driver to force it to 
> create a PLT entry, --shared would do it, but for an executable we'd need a 
> PT_INTERPRET section.
> 
> There was a Discourse thread on ROM Patching for embedded systems 
> https://discourse.llvm.org/t/rfc-a-user-guided-rom-patching-mechanism-for-embedded-applications/78467
>  which had a similar idea.

Thanks @smithp35 for your solution! I would like to kindly ask for your 
expertise in reviewing the following code, which implements backend support for 
`-mlong-calls` on AArch64 targets. It might not need to be merged, just 
considering it as an optional approach. 
Thank you once again for your time and consideration.

https://github.com/llvm/llvm-project/pull/142982
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to