@@ -9,7 +9,7 @@
#include <asm/processor.h>
#include <asm/ppc-opcode.h>
#include <asm/firmware.h>
-#include <asm/ranges.h>
+#include <asm/tables.h>
#ifdef __ASSEMBLY__
@@ -266,7 +266,7 @@ GLUE(.,name):
*/
#ifdef CONFIG_KPROBES
#define _ASM_NOKPROBE_SYMBOL(entry) \
- .pushsection "_kprobe_blacklist","aw"; \
+ push_section_tbl(.init.data, _kprobe_blacklist, any, aw); \
PPC_LONG (entry) ; \
.popsection
#else
@@ -1,6 +1,8 @@
#ifndef _ASM_X86_ASM_H
#define _ASM_X86_ASM_H
+#include <asm/tables.h>
+
#ifdef __ASSEMBLY__
# define __ASM_FORM(x) x
# define __ASM_FORM_RAW(x) x
@@ -74,7 +76,7 @@
_ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
# define _ASM_NOKPROBE(entry) \
- .pushsection "_kprobe_blacklist","aw" ; \
+ push_section_tbl_any(.init.data, _kprobe_blacklist, aw);\
_ASM_ALIGN ; \
_ASM_PTR (entry); \
.popsection
@@ -3,14 +3,14 @@
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
#ifdef CONFIG_KPROBES
+#include <linux/tables.h>
#include <asm/ranges.h>
/*
* Blacklist ganerating macro. Specify functions which is not probed
* by using this macro.
*/
# define __NOKPROBE_SYMBOL(fname) \
-static unsigned long __used \
- __attribute__((__section__("_kprobe_blacklist"))) \
+static LINKTABLE_INIT_DATA(_kprobe_blacklist, all) \
_kbl_addr_##fname = (unsigned long)fname;
# define NOKPROBE_SYMBOL(fname) __NOKPROBE_SYMBOL(fname)
/* Use this to forbid a kprobes attach on very low level functions */
@@ -114,15 +114,6 @@
#define BRANCH_PROFILE()
#endif
-#ifdef CONFIG_KPROBES
-#define KPROBE_BLACKLIST() . = ALIGN(8); \
- VMLINUX_SYMBOL(__start_kprobe_blacklist) = .; \
- KEEP(*(_kprobe_blacklist)) \
- VMLINUX_SYMBOL(__stop_kprobe_blacklist) = .;
-#else
-#define KPROBE_BLACKLIST()
-#endif
-
#ifdef CONFIG_EVENT_TRACING
#define FTRACE_EVENTS() . = ALIGN(8); \
VMLINUX_SYMBOL(__start_ftrace_events) = .; \
@@ -551,7 +542,6 @@
*(.init.rodata) \
FTRACE_EVENTS() \
TRACE_SYSCALLS() \
- KPROBE_BLACKLIST() \
MEM_DISCARD(init.rodata) \
CLK_OF_TABLES() \
RESERVEDMEM_OF_TABLES() \
@@ -44,8 +44,10 @@
#ifdef CONFIG_KPROBES
#include <linux/ranges.h>
+#include <linux/tables.h>
DECLARE_SECTION_RANGE(kprobes);
+DECLARE_LINKTABLE(unsigned long, _kprobe_blacklist);
/* kprobe_status settings */
#define KPROBE_HIT_ACTIVE 0x00000001
@@ -2053,14 +2053,13 @@ NOKPROBE_SYMBOL(dump_kprobe);
* since a kprobe need not necessarily be at the beginning
* of a function.
*/
-static int __init populate_kprobe_blacklist(unsigned long *start,
- unsigned long *end)
+static int __init populate_kprobe_blacklist(void)
{
unsigned long *iter;
struct kprobe_blacklist_entry *ent;
unsigned long entry, offset = 0, size = 0;
- for (iter = start; iter < end; iter++) {
+ linktable_for_each(iter, _kprobe_blacklist) {
entry = arch_deref_entry_point((void *)*iter);
if (!kernel_text_address(entry) ||
@@ -2125,8 +2124,7 @@ static struct notifier_block kprobe_module_nb = {
};
/* Markers of _kprobe_blacklist section */
-extern unsigned long __start_kprobe_blacklist[];
-extern unsigned long __stop_kprobe_blacklist[];
+DEFINE_LINKTABLE_INIT_DATA(unsigned long, _kprobe_blacklist);
/* Actual kprobes section range */
DEFINE_SECTION_RANGE(kprobes, .text);
@@ -2143,8 +2141,7 @@ static int __init init_kprobes(void)
raw_spin_lock_init(&(kretprobe_table_locks[i].lock));
}
- err = populate_kprobe_blacklist(__start_kprobe_blacklist,
- __stop_kprobe_blacklist);
+ err = populate_kprobe_blacklist();
if (err) {
pr_err("kprobes: failed to populate blacklist: %d\n", err);
pr_err("Please take care of using kprobes.\n");