Re: [PATCH v4 2/6] powerpc/module: Handle caller-saved TOC in module linker
From: Benjamin Gray <hidden>
Date: 2022-10-25 23:43:07
On Tue, 2022-10-25 at 13:10 +1100, Andrew Donnellan wrote:
On Mon, 2022-10-10 at 11:29 +1100, Benjamin Gray wrote:quoted
quoted
A function symbol may set a value in the st_other field to indicate the TOC should be treated as caller-saved. The linker should ensure> the current TOC is saved before calling it and restore the TOC> afterwards, much like external calls.As I suggested on the last revision, worth mentioning here that it's the '.localentry <NAME>, 1' directive we're talking about here.
Ah right, whoops. Added "For example, GCC and Clang support a '.localentry <NAME>, 1' directive to set this explicitly in assembly." The exact method for doing this seems to be nonstandard (GCC supports arbitrary value in 1--7, Clang special cases only 1), so originally I was avoiding specifying how it is set.
quoted
quoted
@@ -632,7 +643,8 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,case R_PPC_REL24: /* FIXME: Handle weak symbols here --RR */ if (sym->st_shndx == SHN_UNDEF || - sym->st_shndx == SHN_LIVEPATCH) { + sym->st_shndx == SHN_LIVEPATCH || + need_r2save_stub(sym->st_other)) { /* External: go via stub */Perhaps this comment should be updated to mention that there are non- external but external-like calls? Otherwise Reviewed-by: Andrew Donnellan <redacted>
Updated to "/* May use different / not preserve TOC: go via stub */", will add your reviewed-by in the next version. For now I'll wait for any other feedback before sending it.
quoted