linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Anton Blanchard <anton@samba.org>
To: benh@kernel.crashing.org, paulus@samba.org,
	rusty@rustcorp.com.au, ulrich.weigand@de.ibm.com,
	amodra@gmail.com, mikey@neuling.org, mjw@linux.vnet.ibm.com,
	rostedt@goodmis.org, philippe.bergheaud@fr.ibm.com
Cc: linuxppc-dev@lists.ozlabs.org
Subject: [PATCH 5/7] powerpc/modules: Create module_trampoline_target()
Date: Fri,  4 Apr 2014 17:09:08 +1100	[thread overview]
Message-ID: <1396591750-8203-6-git-send-email-anton@samba.org> (raw)
In-Reply-To: <1396591750-8203-1-git-send-email-anton@samba.org>

ftrace has way too much knowledge of our kernel module trampoline
layout hidden inside it. Create module_trampoline_target() that gives
the target address of a kernel module trampoline.

Signed-off-by: Anton Blanchard <anton@samba.org>
---
 arch/powerpc/include/asm/module.h |  2 ++
 arch/powerpc/kernel/module_64.c   | 29 +++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
index f2711f0..dcfcad1 100644
--- a/arch/powerpc/include/asm/module.h
+++ b/arch/powerpc/include/asm/module.h
@@ -79,6 +79,8 @@ struct mod_arch_specific {
 #endif
 
 bool is_module_trampoline(u32 *insns);
+int module_trampoline_target(struct module *mod, u32 *trampoline,
+			     unsigned long *target);
 
 struct exception_table_entry;
 void sort_ex_table(struct exception_table_entry *start,
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
index 4db5ecd..ef349d0 100644
--- a/arch/powerpc/kernel/module_64.c
+++ b/arch/powerpc/kernel/module_64.c
@@ -176,6 +176,35 @@ bool is_module_trampoline(u32 *p)
 	return true;
 }
 
+int module_trampoline_target(struct module *mod, u32 *trampoline,
+			     unsigned long *target)
+{
+	u32 buf[2];
+	u16 upper, lower;
+	long offset;
+	void *toc_entry;
+
+	if (probe_kernel_read(buf, trampoline, sizeof(buf)))
+		return -EFAULT;
+
+	upper = buf[0] & 0xffff;
+	lower = buf[1] & 0xffff;
+
+	/* perform the addis/addi, both signed */
+	offset = ((short)upper << 16) + (short)lower;
+
+	/*
+	 * Now get the address this trampoline jumps to. This
+	 * is always 32 bytes into our trampoline stub.
+	 */
+	toc_entry = (void *)mod->arch.toc + offset + 32;
+
+	if (probe_kernel_read(target, toc_entry, sizeof(*target)))
+		return -EFAULT;
+
+	return 0;
+}
+
 #endif
 
 /* Count how many different 24-bit relocations (different symbol,
-- 
1.8.3.2

  parent reply	other threads:[~2014-04-04  6:09 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-04  6:09 [PATCH 0/7] Build ppc64le kernel using ABIv2, supplemental patches Anton Blanchard
2014-04-04  6:09 ` [PATCH 1/7] powerpc: Add _GLOBAL_TOC for ABIv2 assembly functions exported to modules Anton Blanchard
2014-04-04  6:09 ` [PATCH 2/7] powerpc: ftrace_caller, _mcount is exported to modules so needs _GLOBAL_TOC() Anton Blanchard
2014-04-04  6:09 ` [PATCH 3/7] powerpc/kprobes: Fix ABIv2 issues with kprobe_lookup_name Anton Blanchard
2014-04-04  6:09 ` [PATCH 4/7] powerpc/modules: Create is_module_trampoline() Anton Blanchard
2014-04-04  6:09 ` Anton Blanchard [this message]
2014-04-04  6:09 ` [PATCH 6/7] powerpc/ftrace: Use module loader helpers to parse trampolines Anton Blanchard
2014-04-22  6:58   ` Rusty Russell
2014-04-04  6:09 ` [PATCH 7/7] powerpc/ftrace: Fix ABIv2 issues with __ftrace_make_call Anton Blanchard
2014-04-04  6:19 ` [PATCH 0/7] Build ppc64le kernel using ABIv2, supplemental patches Michael Neuling

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=1396591750-8203-6-git-send-email-anton@samba.org \
    --to=anton@samba.org \
    --cc=amodra@gmail.com \
    --cc=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mjw@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=philippe.bergheaud@fr.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=rusty@rustcorp.com.au \
    --cc=ulrich.weigand@de.ibm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).