From: Benjamin Gray <bgray@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: ajd@linux.ibm.com, peterz@infradead.org,
Benjamin Gray <bgray@linux.ibm.com>,
npiggin@gmail.com, ardb@kernel.org, jbaron@akamai.com,
rostedt@goodmis.org, jpoimboe@kernel.org
Subject: [PATCH v4 2/6] powerpc/module: Handle caller-saved TOC in module linker
Date: Mon, 10 Oct 2022 11:29:53 +1100 [thread overview]
Message-ID: <20221010002957.128276-3-bgray@linux.ibm.com> (raw)
In-Reply-To: <20221010002957.128276-1-bgray@linux.ibm.com>
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.
This is necessary for supporting V2 ABI static calls that do not
preserve the TOC.
Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
---
arch/powerpc/kernel/module_64.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
index 7e45dc98df8a..83a6f6e22e3b 100644
--- a/arch/powerpc/kernel/module_64.c
+++ b/arch/powerpc/kernel/module_64.c
@@ -55,6 +55,12 @@ static unsigned int local_entry_offset(const Elf64_Sym *sym)
* of function and try to derive r2 from it). */
return PPC64_LOCAL_ENTRY_OFFSET(sym->st_other);
}
+
+static bool need_r2save_stub(unsigned char st_other)
+{
+ return (st_other & STO_PPC64_LOCAL_MASK) == (1 << STO_PPC64_LOCAL_BIT);
+}
+
#else
static func_desc_t func_desc(unsigned long addr)
@@ -66,6 +72,11 @@ static unsigned int local_entry_offset(const Elf64_Sym *sym)
return 0;
}
+static bool need_r2save_stub(unsigned char st_other)
+{
+ return false;
+}
+
void *dereference_module_function_descriptor(struct module *mod, void *ptr)
{
if (ptr < (void *)mod->arch.start_opd ||
@@ -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 */
value = stub_for_addr(sechdrs, value, me,
strtab + sym->st_name);
--
2.37.3
next prev parent reply other threads:[~2022-10-10 0:37 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-10 0:29 [PATCH v4 0/6] Out-of-line static calls for powerpc64 ELF V2 Benjamin Gray
2022-10-10 0:29 ` [PATCH v4 1/6] powerpc/code-patching: Implement generic text patching function Benjamin Gray
2022-10-10 4:45 ` Andrew Donnellan
2022-10-10 7:00 ` Andrew Donnellan
2022-10-10 0:29 ` Benjamin Gray [this message]
2022-10-25 2:10 ` [PATCH v4 2/6] powerpc/module: Handle caller-saved TOC in module linker Andrew Donnellan
2022-10-25 23:41 ` Benjamin Gray
2022-10-10 0:29 ` [PATCH v4 3/6] powerpc/module: Optimise nearby branches in ELF V2 ABI stub Benjamin Gray
2022-10-10 0:29 ` [PATCH v4 4/6] static_call: Move static call selftest to static_call_selftest.c Benjamin Gray
2022-10-10 0:29 ` [PATCH v4 5/6] powerpc/64: Add support for out-of-line static calls Benjamin Gray
2022-10-10 0:29 ` [PATCH v4 6/6] powerpc: Add tests " Benjamin Gray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221010002957.128276-3-bgray@linux.ibm.com \
--to=bgray@linux.ibm.com \
--cc=ajd@linux.ibm.com \
--cc=ardb@kernel.org \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.