SHA256
1
0
forked from pool/systemtap
systemtap/pr31288-build-with-gcc14.patch

1293 lines
46 KiB
Diff
Raw Normal View History

From: Frank Ch. Eigler <fche@redhat.com>
Date: Thu Jan 25 14:28:38 2024 -0500
Subject: PR31288: build with gcc14
Git-commit: 2604d135069f74cf5a223631cf92c9d0d818ef9c
References: bsc#1221706
Signed-off-by: Tony Jones <tonyj@suse.de>
X-Info: adjust patch, no 80642fc0d22abf9d5e19e705adfd7f12599ace7c
PR31288: build with gcc14
GCC14 makes -Wmissing-prototypes defaultish on, which triggers on such
gentle-spirited code as:
void foo(void) { }
when you should darn well know to have an exact duplicate declaration
prototype first. Because of course.
void foo(void);
void foo(void) { }
So anyway, with our fondness for -Werror, this broke the stap runtime
autoconf* business, bits of the runtime, bits of the translator.
Probably more stuff as yet unidentified. If your testsuite logs show:
[...]: error: no previous prototype for [...] [-Werror=missing-prototypes]
this is probably to blame.
Since this is coming to clang as well, we now get buildrun.cxx to
force -Wmissing-prototypes on all the time, so as to try to notice
occurrences of this problem earlier.
diff --git a/buildrun.cxx b/buildrun.cxx
index 76551415c..bb7bdcc9d 100644
--- a/buildrun.cxx
+++ b/buildrun.cxx
@@ -315,6 +315,7 @@ compile_pass (systemtap_session& s)
o << "CHECK_BUILD := $(CC) -DMODULE $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CPPFLAGS) "
<< "$(LINUXINCLUDE) $(_KBUILD_CFLAGS) $(CFLAGS_KERNEL) $(EXTRA_CFLAGS) "
<< "$(CFLAGS) -DKBUILD_BASENAME=\\\"" << s.module_name << "\\\" "
+ << "-Wmissing-prototypes " // GCC14 prep, PR31288
<< WERROR << " -S -o /dev/null -xc " << endl;
o << "stap_check_build = $(shell " << superverbose << " if $(CHECK_BUILD) $(1) "
<< redirecterrors << " ; then echo \"$(2)\"; else echo \"$(3)\"; fi)" << endl;
@@ -345,6 +346,8 @@ compile_pass (systemtap_session& s)
// o << module_cflags << " += -Iusr/include" << endl;
// since such headers are cleansed of _KERNEL_ pieces that we need
+ o << module_cflags << " += -Wmissing-prototypes" << endl; // GCC14 prep, PR31288
+
o << "STAPCONF_HEADER := " << s.tmpdir << "/" << s.stapconf_name << endl;
o << ".DELETE_ON_ERROR: $(STAPCONF_HEADER)" << endl;
o << "$(STAPCONF_HEADER):" << endl;
diff --git a/runtime/linux/autoconf-access_ok_2args.c b/runtime/linux/autoconf-access_ok_2args.c
index 2e5c79a65..3e6041dd2 100644
--- a/runtime/linux/autoconf-access_ok_2args.c
+++ b/runtime/linux/autoconf-access_ok_2args.c
@@ -1,5 +1,7 @@
#include <linux/uaccess.h>
+int __something(void);
+
int __something(void)
{
return access_ok ((void*) 0, 4);
diff --git a/runtime/linux/autoconf-alloc-percpu-align.c b/runtime/linux/autoconf-alloc-percpu-align.c
index 158d579c0..912361269 100644
--- a/runtime/linux/autoconf-alloc-percpu-align.c
+++ b/runtime/linux/autoconf-alloc-percpu-align.c
@@ -1,6 +1,7 @@
#include <linux/percpu.h>
/* kernel commit f2a8205c */
+void foo (void);
void foo (void) {
(void) __alloc_percpu(sizeof(int), 8);
}
diff --git a/runtime/linux/autoconf-asm-access-ok.c b/runtime/linux/autoconf-asm-access-ok.c
index 1d0e61776..7a95758c2 100644
--- a/runtime/linux/autoconf-asm-access-ok.c
+++ b/runtime/linux/autoconf-asm-access-ok.c
@@ -1,5 +1,6 @@
#include <linux/uaccess.h>
+bool foo(const void __user *ptr, size_t size);
bool foo(const void __user *ptr, size_t size)
{
return __access_ok(ptr, size);
diff --git a/runtime/linux/autoconf-atomic_fetch_add_unless.c b/runtime/linux/autoconf-atomic_fetch_add_unless.c
index b765c39ef..b79c4742d 100644
--- a/runtime/linux/autoconf-atomic_fetch_add_unless.c
+++ b/runtime/linux/autoconf-atomic_fetch_add_unless.c
@@ -1,5 +1,7 @@
#include <linux/atomic.h>
+int foo(atomic_t *v);
+
int foo(atomic_t *v)
{
return atomic_fetch_add_unless(v, 1, 0);
diff --git a/runtime/linux/autoconf-bio-bi_opf.c b/runtime/linux/autoconf-bio-bi_opf.c
index 20db781f3..047ccd68c 100644
--- a/runtime/linux/autoconf-bio-bi_opf.c
+++ b/runtime/linux/autoconf-bio-bi_opf.c
@@ -19,6 +19,8 @@
* No intended functional changes in this commit.
*/
+void bar (void);
+
void bar (void)
{
struct bio foo;
diff --git a/runtime/linux/autoconf-cpu-clock.c b/runtime/linux/autoconf-cpu-clock.c
index b501bcdf3..6c80afdad 100644
--- a/runtime/linux/autoconf-cpu-clock.c
+++ b/runtime/linux/autoconf-cpu-clock.c
@@ -29,7 +29,8 @@
// reference sched_clock_cpu(). Thus it must be exported with the
// EXPORT_SYMBOL_GPL macro.
//
-
+void foo (void);
+
void foo (void) {
(void) cpu_clock(0);
}
diff --git a/runtime/linux/autoconf-d-real-inode.c b/runtime/linux/autoconf-d-real-inode.c
index 4ab820b8e..b8acdeafe 100644
--- a/runtime/linux/autoconf-d-real-inode.c
+++ b/runtime/linux/autoconf-d-real-inode.c
@@ -2,7 +2,7 @@
/* kernel function d_real_inode() is missing in older kernels like
* kernel-3.10.0-327.el7.x86_64 */
-
+void foo(void);
void foo(void) {
struct inode *ino = d_real_inode(NULL);
(void) ino;
diff --git a/runtime/linux/autoconf-dpath-path.c b/runtime/linux/autoconf-dpath-path.c
index c3654604b..fd2ae2c3c 100644
--- a/runtime/linux/autoconf-dpath-path.c
+++ b/runtime/linux/autoconf-dpath-path.c
@@ -1,6 +1,8 @@
#include <linux/path.h>
#include <linux/dcache.h>
+void ____autoconf_func(struct path *p);
+
void ____autoconf_func(struct path *p)
{
(void)d_path(p, NULL, 0);
diff --git a/runtime/linux/autoconf-files_lookup_fd_raw.c b/runtime/linux/autoconf-files_lookup_fd_raw.c
index 9e98aa064..5e8fd37d3 100644
--- a/runtime/linux/autoconf-files_lookup_fd_raw.c
+++ b/runtime/linux/autoconf-files_lookup_fd_raw.c
@@ -1,6 +1,8 @@
#include <linux/fdtable.h>
#include <linux/file.h>
+void foo(void);
+
void
foo(void)
{
diff --git a/runtime/linux/autoconf-from_kuid_munged.c b/runtime/linux/autoconf-from_kuid_munged.c
index 444dac1a6..6405a3bd7 100644
--- a/runtime/linux/autoconf-from_kuid_munged.c
+++ b/runtime/linux/autoconf-from_kuid_munged.c
@@ -1,6 +1,7 @@
#include <linux/uidgid.h>
/* We need to check for an exported or inlined from_kuid_munged() */
+uid_t bar (struct user_namespace *ns, kuid_t uid);
uid_t bar (struct user_namespace *ns, kuid_t uid) {
return (from_kuid_munged(ns, uid));
}
diff --git a/runtime/linux/autoconf-fs_supers-hlist.c b/runtime/linux/autoconf-fs_supers-hlist.c
index 3d626ce90..d49845548 100644
--- a/runtime/linux/autoconf-fs_supers-hlist.c
+++ b/runtime/linux/autoconf-fs_supers-hlist.c
@@ -11,6 +11,8 @@ vfs: convert fs_supers to hlist
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
*/
+int foo (struct super_block *sb);
+
int foo (struct super_block *sb) {
return (hlist_unhashed (& sb->s_instances));
}
diff --git a/runtime/linux/autoconf-get-kretprobe.c b/runtime/linux/autoconf-get-kretprobe.c
index ae5b4ab51..f25c1eae5 100644
--- a/runtime/linux/autoconf-get-kretprobe.c
+++ b/runtime/linux/autoconf-get-kretprobe.c
@@ -1,5 +1,7 @@
#include <linux/kprobes.h>
+void* foo(struct kretprobe_instance* ri);
+
void* foo(struct kretprobe_instance* ri)
{
return get_kretprobe(ri);
diff --git a/runtime/linux/autoconf-get_user_page_vma_remote.c b/runtime/linux/autoconf-get_user_page_vma_remote.c
index df3d05d27..78b28ce8e 100644
--- a/runtime/linux/autoconf-get_user_page_vma_remote.c
+++ b/runtime/linux/autoconf-get_user_page_vma_remote.c
@@ -31,6 +31,11 @@
// This forms part of a broader set of patches intended to eliminate the vmas
// parameter altogether.
+struct page *get_user_page_vma_remote_wrapper(struct mm_struct *mm,
+ unsigned long addr,
+ unsigned int gup_flags,
+ struct vm_area_struct **vmaps);
+
struct page *get_user_page_vma_remote_wrapper(struct mm_struct *mm,
unsigned long addr,
unsigned int gup_flags,
diff --git a/runtime/linux/autoconf-get_user_pages-flags.c b/runtime/linux/autoconf-get_user_pages-flags.c
index f135afa11..1bc317bb7 100644
--- a/runtime/linux/autoconf-get_user_pages-flags.c
+++ b/runtime/linux/autoconf-get_user_pages-flags.c
@@ -32,6 +32,11 @@
// struct vm_area_struct **vmas);
//
+long gupr_wrapper(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, unsigned long nr_pages,
+ unsigned int gup_flags, struct page **pages,
+ struct vm_area_struct **vmas);
+
long gupr_wrapper(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
diff --git a/runtime/linux/autoconf-get_user_pages-notask_struct.c b/runtime/linux/autoconf-get_user_pages-notask_struct.c
index 15bb73bd2..4def2b4e2 100644
--- a/runtime/linux/autoconf-get_user_pages-notask_struct.c
+++ b/runtime/linux/autoconf-get_user_pages-notask_struct.c
@@ -29,6 +29,11 @@
// struct vm_area_struct **vmas);
//
+long gupr_wrapper(struct mm_struct *mm,
+ unsigned long start, unsigned long nr_pages,
+ unsigned int gup_flags, struct page **pages,
+ struct vm_area_struct **vmas);
+
long gupr_wrapper(struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
diff --git a/runtime/linux/autoconf-get_user_pages_remote-flags.c b/runtime/linux/autoconf-get_user_pages_remote-flags.c
index c0c23609f..1ff9fff76 100644
--- a/runtime/linux/autoconf-get_user_pages_remote-flags.c
+++ b/runtime/linux/autoconf-get_user_pages_remote-flags.c
@@ -30,6 +30,11 @@
// struct vm_area_struct **vmas);
//
+long gupr_wrapper(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, unsigned long nr_pages,
+ unsigned int gup_flags, struct page **pages,
+ struct vm_area_struct **vmas);
+
long gupr_wrapper(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
diff --git a/runtime/linux/autoconf-get_user_pages_remote-flags_locked.c b/runtime/linux/autoconf-get_user_pages_remote-flags_locked.c
index bb9b56717..bda2919a0 100644
--- a/runtime/linux/autoconf-get_user_pages_remote-flags_locked.c
+++ b/runtime/linux/autoconf-get_user_pages_remote-flags_locked.c
@@ -23,6 +23,11 @@
// struct vm_area_struct **vmas, int *locked);
//
+long gupr_wrapper2(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, unsigned long nr_pages,
+ unsigned int gup_flags, struct page **pages,
+ struct vm_area_struct **vmas, int *locked);
+
long gupr_wrapper2(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
diff --git a/runtime/linux/autoconf-get_user_pages_remote-notask_struct.c b/runtime/linux/autoconf-get_user_pages_remote-notask_struct.c
index 3b849af3c..0b50f23ef 100644
--- a/runtime/linux/autoconf-get_user_pages_remote-notask_struct.c
+++ b/runtime/linux/autoconf-get_user_pages_remote-notask_struct.c
@@ -29,6 +29,11 @@
// struct vm_area_struct **vmas, int *locked);
//
+long gupr_wrapper(struct mm_struct *mm,
+ unsigned long start, unsigned long nr_pages,
+ unsigned int gup_flags, struct page **pages,
+ struct vm_area_struct **vmas, int *locked);
+
long gupr_wrapper(struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
diff --git a/runtime/linux/autoconf-grsecurity.c b/runtime/linux/autoconf-grsecurity.c
index ee2e4e55f..2b34290a3 100644
--- a/runtime/linux/autoconf-grsecurity.c
+++ b/runtime/linux/autoconf-grsecurity.c
@@ -5,6 +5,7 @@
struct module *t;
unsigned size;
+void foo (void);
void foo (void)
{
size += t->init_size_rw + t->init_size_rx + t->core_size_rw + t->core_size_rx;
diff --git a/runtime/linux/autoconf-hlist-4args.c b/runtime/linux/autoconf-hlist-4args.c
index ab9f8a5fe..8b504c50d 100644
--- a/runtime/linux/autoconf-hlist-4args.c
+++ b/runtime/linux/autoconf-hlist-4args.c
@@ -7,6 +7,7 @@ struct foo {
struct hlist_head *h;
+void foo (void);
void foo (void)
{
struct hlist_node *n;
diff --git a/runtime/linux/autoconf-hlist_add_tail_rcu.c b/runtime/linux/autoconf-hlist_add_tail_rcu.c
index 2c4660837..e5bc4a75f 100644
--- a/runtime/linux/autoconf-hlist_add_tail_rcu.c
+++ b/runtime/linux/autoconf-hlist_add_tail_rcu.c
@@ -1,5 +1,8 @@
#include <linux/rculist.h>
+void foo(struct hlist_node *n, struct hlist_head *h);
+
+
void foo(struct hlist_node *n, struct hlist_head *h)
{
hlist_add_tail_rcu(n, h);
diff --git a/runtime/linux/autoconf-hrtimer-getset-expires.c b/runtime/linux/autoconf-hrtimer-getset-expires.c
index 951cb99b3..39a0c23fc 100644
--- a/runtime/linux/autoconf-hrtimer-getset-expires.c
+++ b/runtime/linux/autoconf-hrtimer-getset-expires.c
@@ -1,5 +1,6 @@
#include <linux/hrtimer.h>
+void ____autoconf_func(struct hrtimer *t);
void ____autoconf_func(struct hrtimer *t)
{
hrtimer_set_expires(t, hrtimer_get_expires(t));
diff --git a/runtime/linux/autoconf-hw_breakpoint_context.c b/runtime/linux/autoconf-hw_breakpoint_context.c
index 0b625657c..d59d29360 100644
--- a/runtime/linux/autoconf-hw_breakpoint_context.c
+++ b/runtime/linux/autoconf-hw_breakpoint_context.c
@@ -2,6 +2,10 @@
/* void *context parameter is new since linux commit 4dc0da. */
struct perf_event * __percpu *
+hw_breakpoint_context(struct perf_event_attr *attr,
+ perf_overflow_handler_t triggered,
+ void *context);
+struct perf_event * __percpu *
hw_breakpoint_context(struct perf_event_attr *attr,
perf_overflow_handler_t triggered,
void *context)
diff --git a/runtime/linux/autoconf-kernel_read-new-args.c b/runtime/linux/autoconf-kernel_read-new-args.c
index f77c7ccf1..4de0cb7d3 100644
--- a/runtime/linux/autoconf-kernel_read-new-args.c
+++ b/runtime/linux/autoconf-kernel_read-new-args.c
@@ -27,6 +27,8 @@
#include <linux/fs.h>
+ssize_t foo(struct file *file, void *buf, size_t count, loff_t *pos);
+
ssize_t foo(struct file *file, void *buf, size_t count, loff_t *pos)
{
return kernel_read(file, buf, count, pos);
diff --git a/runtime/linux/autoconf-kprobe-symbol-name.c b/runtime/linux/autoconf-kprobe-symbol-name.c
index eeb3f840e..6ee187330 100644
--- a/runtime/linux/autoconf-kprobe-symbol-name.c
+++ b/runtime/linux/autoconf-kprobe-symbol-name.c
@@ -1,5 +1,7 @@
#include <linux/kprobes.h>
+void func(struct kprobe *kp);
+
void func(struct kprobe *kp)
{
kp->symbol_name = "dummy";
diff --git a/runtime/linux/autoconf-ktime-get-real.c b/runtime/linux/autoconf-ktime-get-real.c
index 67b71409d..37164da17 100644
--- a/runtime/linux/autoconf-ktime-get-real.c
+++ b/runtime/linux/autoconf-ktime-get-real.c
@@ -1,5 +1,5 @@
#include <linux/ktime.h>
-
+void ____autoconf_func(struct timespec *ts);
void ____autoconf_func(struct timespec *ts)
{
ktime_get_real_ts(ts);
diff --git a/runtime/linux/autoconf-local-clock.c b/runtime/linux/autoconf-local-clock.c
index d148c873a..f4385ff2f 100644
--- a/runtime/linux/autoconf-local-clock.c
+++ b/runtime/linux/autoconf-local-clock.c
@@ -29,6 +29,7 @@
// reference sched_clock_cpu(). Thus it must be exported with the
// EXPORT_SYMBOL_GPL macro.
//
+void foo (void);
void foo (void) {
(void) local_clock();
diff --git a/runtime/linux/autoconf-lockdown-debugfs.c b/runtime/linux/autoconf-lockdown-debugfs.c
index 33fe50a54..c9a89ab80 100644
--- a/runtime/linux/autoconf-lockdown-debugfs.c
+++ b/runtime/linux/autoconf-lockdown-debugfs.c
@@ -1,5 +1,7 @@
#include <linux/security.h>
+int foo(void);
+
int foo(void) {
return security_locked_down(LOCKDOWN_DEBUGFS);
}
diff --git a/runtime/linux/autoconf-lockdown-kernel.c b/runtime/linux/autoconf-lockdown-kernel.c
index 90c241437..d4439c2fe 100644
--- a/runtime/linux/autoconf-lockdown-kernel.c
+++ b/runtime/linux/autoconf-lockdown-kernel.c
@@ -1,5 +1,7 @@
#include <linux/kernel.h>
+int foo(void);
+
int foo(void) {
return kernel_is_locked_down("something");
}
diff --git a/runtime/linux/autoconf-mm-context-vdso-base.c b/runtime/linux/autoconf-mm-context-vdso-base.c
index 99748fb75..c1428b492 100644
--- a/runtime/linux/autoconf-mm-context-vdso-base.c
+++ b/runtime/linux/autoconf-mm-context-vdso-base.c
@@ -1,5 +1,6 @@
#include <linux/sched.h>
+int context_vdso(struct task_struct *tsk);
int context_vdso(struct task_struct *tsk)
{
return (tsk->mm->context.vdso_base == 0L);
diff --git a/runtime/linux/autoconf-mm-context-vdso.c b/runtime/linux/autoconf-mm-context-vdso.c
index d2babc108..38e88fde1 100644
--- a/runtime/linux/autoconf-mm-context-vdso.c
+++ b/runtime/linux/autoconf-mm-context-vdso.c
@@ -1,5 +1,5 @@
#include <linux/sched.h>
-
+int context_vdso(struct task_struct *tsk);
int context_vdso(struct task_struct *tsk)
{
return (tsk->mm->context.vdso == NULL);
diff --git a/runtime/linux/autoconf-mm-shmempages.c b/runtime/linux/autoconf-mm-shmempages.c
index 2ce742be7..7f914be21 100644
--- a/runtime/linux/autoconf-mm-shmempages.c
+++ b/runtime/linux/autoconf-mm-shmempages.c
@@ -1,5 +1,7 @@
#include <linux/sched.h>
+void foo (void);
+
void foo (void) {
(void) MM_SHMEMPAGES;
}
diff --git a/runtime/linux/autoconf-mmap_lock.c b/runtime/linux/autoconf-mmap_lock.c
index 42119dc84..194e337a7 100644
--- a/runtime/linux/autoconf-mmap_lock.c
+++ b/runtime/linux/autoconf-mmap_lock.c
@@ -1,6 +1,8 @@
#include <linux/mm_types.h>
#include <linux/mmap_lock.h>
+int foobar(struct mm_struct *mm);
+
int foobar(struct mm_struct *mm) {
mmap_write_lock (mm);
mmap_read_unlock (mm);
diff --git a/runtime/linux/autoconf-module-sect-attrs.c b/runtime/linux/autoconf-module-sect-attrs.c
index f589dca30..78c0ada49 100644
--- a/runtime/linux/autoconf-module-sect-attrs.c
+++ b/runtime/linux/autoconf-module-sect-attrs.c
@@ -1,5 +1,7 @@
#include <linux/module.h>
+unsigned long foobar(struct module_sect_attrs *moosas);
+
unsigned long foobar(struct module_sect_attrs *moosas)
{
struct module_sect_attr msa = moosas->attrs[0];
diff --git a/runtime/linux/autoconf-netfilter-313b.c b/runtime/linux/autoconf-netfilter-313b.c
index 3b1883077..41fbaaef0 100644
--- a/runtime/linux/autoconf-netfilter-313b.c
+++ b/runtime/linux/autoconf-netfilter-313b.c
@@ -5,6 +5,13 @@
// to kernel-3.10.0-284.el7 per rhbz1230935#c4 as patch no 119478.
// This fixes PR18711.
+unsigned int
+new_style_hook(const struct nf_hook_ops *ops,
+ struct sk_buff *skb,
+ const struct net_device *nf_in,
+ const struct net_device *nf_out,
+ const struct nf_hook_state *state);
+
unsigned int
new_style_hook(const struct nf_hook_ops *ops,
struct sk_buff *skb,
diff --git a/runtime/linux/autoconf-netfilter-4_1.c b/runtime/linux/autoconf-netfilter-4_1.c
index 9f3ba01d5..a18b46c2b 100644
--- a/runtime/linux/autoconf-netfilter-4_1.c
+++ b/runtime/linux/autoconf-netfilter-4_1.c
@@ -14,6 +14,11 @@
//
// Signed-off-by: David S. Miller <davem@davemloft.net>
+unsigned int
+newer_style_hook(const struct nf_hook_ops *ops,
+ struct sk_buff *skb,
+ const struct nf_hook_state *state);
+
unsigned int
newer_style_hook(const struct nf_hook_ops *ops,
struct sk_buff *skb,
diff --git a/runtime/linux/autoconf-netfilter-4_4.c b/runtime/linux/autoconf-netfilter-4_4.c
index ad953efc3..9e1743515 100644
--- a/runtime/linux/autoconf-netfilter-4_4.c
+++ b/runtime/linux/autoconf-netfilter-4_4.c
@@ -28,6 +28,10 @@
// So we can simply remove all of the owner handling -- when module is
// removed it also needs to unregister all its hooks.
+unsigned int even_newer_style_hook(void *priv,
+ struct sk_buff *skb,
+ const struct nf_hook_state *state);
+
unsigned int even_newer_style_hook(void *priv,
struct sk_buff *skb,
const struct nf_hook_state *state)
diff --git a/runtime/linux/autoconf-netfilter.c b/runtime/linux/autoconf-netfilter.c
index f12266416..42e83fdb7 100644
--- a/runtime/linux/autoconf-netfilter.c
+++ b/runtime/linux/autoconf-netfilter.c
@@ -1,5 +1,11 @@
#include <linux/netfilter.h>
+unsigned int
+new_style_hook(const struct nf_hook_ops *ops, /* not: unsigned int hook; */
+ struct sk_buff *skb,
+ const struct net_device *in, const struct net_device *out,
+ int (*okfn)(struct sk_buff *));
+
unsigned int
new_style_hook(const struct nf_hook_ops *ops, /* not: unsigned int hook; */
struct sk_buff *skb,
diff --git a/runtime/linux/autoconf-nmi-uaccess-okay.c b/runtime/linux/autoconf-nmi-uaccess-okay.c
index fd4f54957..0cb4f63db 100644
--- a/runtime/linux/autoconf-nmi-uaccess-okay.c
+++ b/runtime/linux/autoconf-nmi-uaccess-okay.c
@@ -3,6 +3,8 @@
/* this function was no longer an inline since upstream kernel commit
* af5c40c6ee */
+bool foo(void);
+
bool foo(void)
{
return nmi_uaccess_okay();
diff --git a/runtime/linux/autoconf-pagefault_disable.c b/runtime/linux/autoconf-pagefault_disable.c
index c1b2c3a33..2a65f3f08 100644
--- a/runtime/linux/autoconf-pagefault_disable.c
+++ b/runtime/linux/autoconf-pagefault_disable.c
@@ -1,5 +1,6 @@
#include <linux/uaccess.h>
-
+int foo (int c);
+
int foo (int c)
{
pagefault_disable();
diff --git a/runtime/linux/autoconf-pde_data.c b/runtime/linux/autoconf-pde_data.c
index e8b582330..d5f7d5b0d 100644
--- a/runtime/linux/autoconf-pde_data.c
+++ b/runtime/linux/autoconf-pde_data.c
@@ -4,6 +4,8 @@
#include <linux/proc_fs.h>
+void* __something(const struct inode* i);
+
void* __something(const struct inode* i)
{
return pde_data (i);
diff --git a/runtime/linux/autoconf-perf-structpid.c b/runtime/linux/autoconf-perf-structpid.c
index cbf07ffa1..4fd390821 100644
--- a/runtime/linux/autoconf-perf-structpid.c
+++ b/runtime/linux/autoconf-perf-structpid.c
@@ -1,5 +1,7 @@
#include <linux/perf_event.h>
+void fn (void);
+
void fn (void) {
struct perf_event_attr *attr = NULL;
int cpu = 0;
diff --git a/runtime/linux/autoconf-proc_ops.c b/runtime/linux/autoconf-proc_ops.c
index e3d2f93a9..1d302a254 100644
--- a/runtime/linux/autoconf-proc_ops.c
+++ b/runtime/linux/autoconf-proc_ops.c
@@ -7,6 +7,9 @@
#include <linux/fs.h>
#include <linux/proc_fs.h>
+int
+proc_open_file_test(struct inode *inode, struct file *filp);
+
int
proc_open_file_test(struct inode *inode, struct file *filp)
{
diff --git a/runtime/linux/autoconf-procfs-owner.c b/runtime/linux/autoconf-procfs-owner.c
index dcec58b19..0545a0a50 100644
--- a/runtime/linux/autoconf-procfs-owner.c
+++ b/runtime/linux/autoconf-procfs-owner.c
@@ -1,7 +1,7 @@
#include <linux/proc_fs.h>
/* kernel commit 4d38a69c6 */
-
+void bar (void);
void bar (void) {
struct proc_dir_entry foo;
foo.owner = (void*) 0;
diff --git a/runtime/linux/autoconf-rcu_is_watching.c b/runtime/linux/autoconf-rcu_is_watching.c
index aca153e2a..4636e9057 100644
--- a/runtime/linux/autoconf-rcu_is_watching.c
+++ b/runtime/linux/autoconf-rcu_is_watching.c
@@ -4,7 +4,8 @@
//
// We need to use rcu_is_watching() where available to skip probes in
// rcu-idle state.
-
+struct context * _stp_runtime_get_context(void);
+
struct context * _stp_runtime_get_context(void)
{
if (! rcu_is_watching())
diff --git a/runtime/linux/autoconf-real-parent.c b/runtime/linux/autoconf-real-parent.c
index 16c26c479..fe7e3b567 100644
--- a/runtime/linux/autoconf-real-parent.c
+++ b/runtime/linux/autoconf-real-parent.c
@@ -8,6 +8,7 @@
struct task_struct t;
+void foo (void);
void foo (void)
{
struct task_struct *p;
diff --git a/runtime/linux/autoconf-regset.c b/runtime/linux/autoconf-regset.c
index 9d994b03c..895f58fd9 100644
--- a/runtime/linux/autoconf-regset.c
+++ b/runtime/linux/autoconf-regset.c
@@ -1,5 +1,6 @@
#include <linux/regset.h>
+int foobar(int n);
int foobar(int n) {
const struct user_regset_view *rsv = task_user_regset_view(current);
const struct user_regset *rs = & rsv->regsets[0];
diff --git a/runtime/linux/autoconf-relay-umode_t.c b/runtime/linux/autoconf-relay-umode_t.c
index a9e5126c0..6ebadbcda 100644
--- a/runtime/linux/autoconf-relay-umode_t.c
+++ b/runtime/linux/autoconf-relay-umode_t.c
@@ -27,6 +27,8 @@ static struct rchan_callbacks __stp_relay_callbacks = {
.create_buf_file = umode_t_callback,
};
+void foo (void);
+
void foo (void) {
(void) __stp_relay_callbacks.create_buf_file;
}
diff --git a/runtime/linux/autoconf-relay_buf-per_cpu_ptr.c b/runtime/linux/autoconf-relay_buf-per_cpu_ptr.c
index c105b3301..aae72376b 100644
--- a/runtime/linux/autoconf-relay_buf-per_cpu_ptr.c
+++ b/runtime/linux/autoconf-relay_buf-per_cpu_ptr.c
@@ -19,6 +19,8 @@
#include <linux/percpu.h>
#include <linux/bug.h>
+struct rchan_buf *relay_buf_test(struct rchan *chan, unsigned int cpu);
+
struct rchan_buf *relay_buf_test(struct rchan *chan, unsigned int cpu)
{
BUILD_BUG_ON(sizeof(chan->buf) != sizeof(struct rchan_buf **));
diff --git a/runtime/linux/autoconf-ring_buffer-flags.c b/runtime/linux/autoconf-ring_buffer-flags.c
index 7d7b8df03..7f4e5fa3e 100644
--- a/runtime/linux/autoconf-ring_buffer-flags.c
+++ b/runtime/linux/autoconf-ring_buffer-flags.c
@@ -1,5 +1,5 @@
#include <linux/ring_buffer.h>
-
+void ___autoconf_func(void);
void ___autoconf_func(void)
{
(void)ring_buffer_lock_reserve(NULL, 0, 0);
diff --git a/runtime/linux/autoconf-ring_buffer_lost_events.c b/runtime/linux/autoconf-ring_buffer_lost_events.c
index df3e315b3..52f3f7982 100644
--- a/runtime/linux/autoconf-ring_buffer_lost_events.c
+++ b/runtime/linux/autoconf-ring_buffer_lost_events.c
@@ -2,7 +2,7 @@
ring_buffer peek and consume calls. */
#include <linux/types.h>
#include <linux/ring_buffer.h>
-
+struct ring_buffer_event *foo (void);
struct ring_buffer_event *foo (void)
{
/* last field is not always there */
diff --git a/runtime/linux/autoconf-ring_buffer_read_prepare.c b/runtime/linux/autoconf-ring_buffer_read_prepare.c
index 03dc6ea10..22fa46d44 100644
--- a/runtime/linux/autoconf-ring_buffer_read_prepare.c
+++ b/runtime/linux/autoconf-ring_buffer_read_prepare.c
@@ -2,6 +2,7 @@
#include <linux/types.h>
#include <linux/ring_buffer.h>
+void foo (void);
void foo (void)
{
ring_buffer_read_prepare(NULL, 1);
diff --git a/runtime/linux/autoconf-save-stack-trace-no-bp.c b/runtime/linux/autoconf-save-stack-trace-no-bp.c
index 5c940f2d3..f1485ef8a 100644
--- a/runtime/linux/autoconf-save-stack-trace-no-bp.c
+++ b/runtime/linux/autoconf-save-stack-trace-no-bp.c
@@ -3,6 +3,8 @@
#include <linux/stacktrace.h>
#include <asm/stacktrace.h>
+void foo(struct task_struct *foo);
+
void foo(struct task_struct *foo)
{
struct stack_trace trace;
diff --git a/runtime/linux/autoconf-save-stack-trace.c b/runtime/linux/autoconf-save-stack-trace.c
index 07d45c312..922017126 100644
--- a/runtime/linux/autoconf-save-stack-trace.c
+++ b/runtime/linux/autoconf-save-stack-trace.c
@@ -3,6 +3,8 @@
#include <linux/stacktrace.h>
#include <asm/stacktrace.h>
+void foo(struct task_struct *foo);
+
void foo(struct task_struct *foo)
{
struct stack_trace trace;
@@ -16,6 +18,8 @@ void foo(struct task_struct *foo)
static const struct stacktrace_ops print_stack_ops;
+void dumper(struct task_struct *foo);
+
void dumper(struct task_struct *foo)
{
dump_trace(foo, 0, 0, 0, &print_stack_ops, 0);
diff --git a/runtime/linux/autoconf-set_fs.c b/runtime/linux/autoconf-set_fs.c
index 939e22f83..3fbdf8fac 100644
--- a/runtime/linux/autoconf-set_fs.c
+++ b/runtime/linux/autoconf-set_fs.c
@@ -1,6 +1,7 @@
#include <linux/uaccess.h>
// XXX set_fs is an inline function, so we can't detect it with exportconf:
+void __something(void);
void __something(void)
{
mm_segment_t oldfs = get_fs();
diff --git a/runtime/linux/autoconf-smpcall-4args.c b/runtime/linux/autoconf-smpcall-4args.c
index 2966d95ee..168b6c991 100644
--- a/runtime/linux/autoconf-smpcall-4args.c
+++ b/runtime/linux/autoconf-smpcall-4args.c
@@ -1,11 +1,15 @@
#include <linux/kernel.h>
#include <linux/smp.h>
+void foo (void *arg);
+
void foo (void *arg)
{
(void) arg;
}
+void bar (void);
+
void bar (void)
{
smp_call_function_single (0, &foo, 0, 1);
diff --git a/runtime/linux/autoconf-smpcall-5args.c b/runtime/linux/autoconf-smpcall-5args.c
index 83060f48d..1c8a948ea 100644
--- a/runtime/linux/autoconf-smpcall-5args.c
+++ b/runtime/linux/autoconf-smpcall-5args.c
@@ -1,11 +1,15 @@
#include <linux/kernel.h>
#include <linux/smp.h>
+void foo (void *arg);
+
void foo (void *arg)
{
(void) arg;
}
+void bar (void);
+
void bar (void)
{
smp_call_function_single (0, &foo, 0, 1, 0);
diff --git a/runtime/linux/autoconf-stack-trace-save-regs.c b/runtime/linux/autoconf-stack-trace-save-regs.c
index 1fd515f8f..d1e541a9f 100644
--- a/runtime/linux/autoconf-stack-trace-save-regs.c
+++ b/runtime/linux/autoconf-stack-trace-save-regs.c
@@ -1,5 +1,7 @@
#include <linux/stacktrace.h>
+unsigned int foo (void);
+
unsigned int foo (void)
{
unsigned long e[10];
diff --git a/runtime/linux/autoconf-stacktrace_h.c b/runtime/linux/autoconf-stacktrace_h.c
index ced52b2cb..236e41331 100644
--- a/runtime/linux/autoconf-stacktrace_h.c
+++ b/runtime/linux/autoconf-stacktrace_h.c
@@ -3,6 +3,8 @@
// Check to see if there is an <asm/stacktrace.h>
// and a struc stack_frame defined.
// Older kernels have struct stack_frame in <asm/processor.h>.
+int stack_frame_size(void);
+
int stack_frame_size(void) {
return sizeof(struct stack_frame);
}
diff --git a/runtime/linux/autoconf-stacktrace_ops-int-address.c b/runtime/linux/autoconf-stacktrace_ops-int-address.c
index 8ca277a6e..fb215ef11 100644
--- a/runtime/linux/autoconf-stacktrace_ops-int-address.c
+++ b/runtime/linux/autoconf-stacktrace_ops-int-address.c
@@ -4,6 +4,10 @@
// check for 4.6 patch which changed the function signature of
// stacktrace_ops 'address' member.
+int print_stack_address(void *data __attribute__ ((unused)),
+ unsigned long addr __attribute__ ((unused)),
+ int reliable __attribute__ ((unused)));
+
int print_stack_address(void *data __attribute__ ((unused)),
unsigned long addr __attribute__ ((unused)),
int reliable __attribute__ ((unused)))
diff --git a/runtime/linux/autoconf-stacktrace_ops-warning.c b/runtime/linux/autoconf-stacktrace_ops-warning.c
index 9c00f0583..75243e79f 100644
--- a/runtime/linux/autoconf-stacktrace_ops-warning.c
+++ b/runtime/linux/autoconf-stacktrace_ops-warning.c
@@ -2,6 +2,8 @@
#include <linux/sched.h>
#include <asm/stacktrace.h>
+void foo (void);
+
void foo (void)
{
struct stacktrace_ops t;
diff --git a/runtime/linux/autoconf-syscall_get_args_3args.c b/runtime/linux/autoconf-syscall_get_args_3args.c
index c08faa915..3435d99b0 100644
--- a/runtime/linux/autoconf-syscall_get_args_3args.c
+++ b/runtime/linux/autoconf-syscall_get_args_3args.c
@@ -7,6 +7,7 @@ struct task_struct *task;
struct pt_regs *regs;
unsigned long *args;
+void __something(void);
void __something(void)
{
syscall_get_arguments(task, regs, args);
diff --git a/runtime/linux/autoconf-task-state.c b/runtime/linux/autoconf-task-state.c
index 27a1d7c13..2941f2ef3 100644
--- a/runtime/linux/autoconf-task-state.c
+++ b/runtime/linux/autoconf-task-state.c
@@ -13,6 +13,8 @@
#include <linux/sched.h>
+unsigned int bar (struct task_struct *foo);
+
unsigned int bar (struct task_struct *foo) {
return (foo->state = 0);
}
diff --git a/runtime/linux/autoconf-task-uid.c b/runtime/linux/autoconf-task-uid.c
index 8e40f8314..614b450e2 100644
--- a/runtime/linux/autoconf-task-uid.c
+++ b/runtime/linux/autoconf-task-uid.c
@@ -1,5 +1,7 @@
#include <linux/sched.h>
+int bar (struct task_struct *foo);
+
int bar (struct task_struct *foo) {
return (foo->uid = 0);
}
diff --git a/runtime/linux/autoconf-task_work-struct.c b/runtime/linux/autoconf-task_work-struct.c
index b6dbf14d2..aedaea9ed 100644
--- a/runtime/linux/autoconf-task_work-struct.c
+++ b/runtime/linux/autoconf-task_work-struct.c
@@ -2,6 +2,8 @@
/* Original task_work code used 'struct task_work' (and
* init_task_work() had 3 arguments). */
+void __autoconf_func(void);
+
void __autoconf_func(void)
{
struct task_work work;
diff --git a/runtime/linux/autoconf-trace-printk.c b/runtime/linux/autoconf-trace-printk.c
index c7515bc64..dbed8880c 100644
--- a/runtime/linux/autoconf-trace-printk.c
+++ b/runtime/linux/autoconf-trace-printk.c
@@ -1,6 +1,7 @@
#include <linux/kernel.h>
#include <linux/string.h>
+int bar (void);
int bar (void) {
static char *fmt = "%s\n";
trace_printk (fmt, "hello world");
diff --git a/runtime/linux/autoconf-tracepoint-has-data.c b/runtime/linux/autoconf-tracepoint-has-data.c
index 777c31378..c34c6db38 100644
--- a/runtime/linux/autoconf-tracepoint-has-data.c
+++ b/runtime/linux/autoconf-tracepoint-has-data.c
@@ -1,6 +1,9 @@
#include <linux/tracepoint.h>
#include <trace/events/sched.h>
+
+void baz (void *cb_data, struct task_struct *parent, struct task_struct *child);
+
void baz (void *cb_data, struct task_struct *parent, struct task_struct *child) {
(void) cb_data;
(void) parent;
@@ -10,6 +13,8 @@ void baz (void *cb_data, struct task_struct *parent, struct task_struct *child)
/* Until 2.6.35 (commit 38516ab59fbc5b), register_trace_* took one argument.
Until 5.7.0 (commit a2806ef77ff9a9), this could be checked by checking
for the absence of DECLARE_TRACE_NOARGS. Now _NOARGS variant is removed. */
+void bar (void);
+
void bar (void) {
register_trace_sched_process_fork(baz, NULL);
}
diff --git a/runtime/linux/autoconf-tracepoint-strings.c b/runtime/linux/autoconf-tracepoint-strings.c
index 1b4785c8d..fcfaa0c2e 100644
--- a/runtime/linux/autoconf-tracepoint-strings.c
+++ b/runtime/linux/autoconf-tracepoint-strings.c
@@ -1,6 +1,7 @@
#include <linux/tracepoint.h>
/* Until 3.15 (commit de7b2973903c), tracepoints used strings to register. */
+void foo (void);
void foo (void) {
(void) tracepoint_probe_register("foo", NULL, NULL);
tracepoint_probe_unregister("foo", NULL, NULL);
diff --git a/runtime/linux/autoconf-twa_resume.c b/runtime/linux/autoconf-twa_resume.c
index 306cd28ef..5a6a1d958 100644
--- a/runtime/linux/autoconf-twa_resume.c
+++ b/runtime/linux/autoconf-twa_resume.c
@@ -2,6 +2,8 @@
// Check to see if there is a define or enum for TWA_RESUME.
// Older kernels just pass in true or false into task_work_add()
+int twa_resume_exist(void);
+
int twa_resume_exist(void) {
return (TWA_RESUME == TWA_RESUME);
}
diff --git a/runtime/linux/autoconf-udelay_simple.c b/runtime/linux/autoconf-udelay_simple.c
index 3a7b19fb3..755448e7c 100644
--- a/runtime/linux/autoconf-udelay_simple.c
+++ b/runtime/linux/autoconf-udelay_simple.c
@@ -1,5 +1,7 @@
#include <asm/delay.h>
+void foo (unsigned long long usecs);
+
void foo (unsigned long long usecs)
{
udelay_simple(usecs);
diff --git a/runtime/linux/autoconf-unwind-stack-trace.c b/runtime/linux/autoconf-unwind-stack-trace.c
index 2ec399e67..8f784ffa4 100644
--- a/runtime/linux/autoconf-unwind-stack-trace.c
+++ b/runtime/linux/autoconf-unwind-stack-trace.c
@@ -1,6 +1,8 @@
#include <linux/sched.h>
#include <asm/unwind.h>
+void unwind_stack_trace (void);
+
void unwind_stack_trace (void)
{
struct unwind_state state;
diff --git a/runtime/linux/autoconf-user-access-begin-2-args.c b/runtime/linux/autoconf-user-access-begin-2-args.c
index 2ecc5af9e..32a82ae7a 100644
--- a/runtime/linux/autoconf-user-access-begin-2-args.c
+++ b/runtime/linux/autoconf-user-access-begin-2-args.c
@@ -1,5 +1,7 @@
#include <linux/uaccess.h>
+bool foo(const void __user *ptr, size_t size);
+
bool foo(const void __user *ptr, size_t size)
{
return user_access_begin(ptr, size);
diff --git a/runtime/linux/autoconf-user-access-begin-3-args.c b/runtime/linux/autoconf-user-access-begin-3-args.c
index 2942ddf08..2bb795b5f 100644
--- a/runtime/linux/autoconf-user-access-begin-3-args.c
+++ b/runtime/linux/autoconf-user-access-begin-3-args.c
@@ -1,5 +1,7 @@
#include <linux/uaccess.h>
+bool foo(int mode, const void __user *ptr, size_t size);
+
bool foo(int mode, const void __user *ptr, size_t size)
{
return user_access_begin(mode, ptr, size);
diff --git a/runtime/linux/autoconf-user-access-end.c b/runtime/linux/autoconf-user-access-end.c
index 4eafb8222..6109d42b6 100644
--- a/runtime/linux/autoconf-user-access-end.c
+++ b/runtime/linux/autoconf-user-access-end.c
@@ -1,5 +1,5 @@
#include <linux/uaccess.h>
-
+void foo(void);
void foo(void)
{
user_access_end();
diff --git a/runtime/linux/autoconf-utrace-via-tracepoints.c b/runtime/linux/autoconf-utrace-via-tracepoints.c
index 89ba29822..95f844015 100644
--- a/runtime/linux/autoconf-utrace-via-tracepoints.c
+++ b/runtime/linux/autoconf-utrace-via-tracepoints.c
@@ -13,6 +13,10 @@
#error "CONFIG_TRACEPOINTS is not enabled"
#endif
+void __sched_process_fork(void *cb_data __attribute__((unused)),
+ struct task_struct *parent __attribute__((unused)),
+ struct task_struct *child __attribute__((unused)));
+
void __sched_process_fork(void *cb_data __attribute__((unused)),
struct task_struct *parent __attribute__((unused)),
struct task_struct *child __attribute__((unused)))
@@ -20,12 +24,18 @@ void __sched_process_fork(void *cb_data __attribute__((unused)),
return;
}
+void __sched_process_exit(void *cb_data __attribute__((unused)),
+ struct task_struct *task __attribute__((unused)));
void __sched_process_exit(void *cb_data __attribute__((unused)),
struct task_struct *task __attribute__((unused)))
{
return;
}
+void __sched_process_exec(void *cb_data __attribute__ ((unused)),
+ struct task_struct *task __attribute__((unused)),
+ pid_t old_pid __attribute__((unused)),
+ struct linux_binprm *bprm __attribute__((unused)));
void __sched_process_exec(void *cb_data __attribute__ ((unused)),
struct task_struct *task __attribute__((unused)),
pid_t old_pid __attribute__((unused)),
@@ -34,6 +44,9 @@ void __sched_process_exec(void *cb_data __attribute__ ((unused)),
return;
}
+void __sys_enter(void *cb_data __attribute__ ((unused)),
+ struct pt_regs *regs __attribute__((unused)),
+ long id __attribute__((unused)));
void __sys_enter(void *cb_data __attribute__ ((unused)),
struct pt_regs *regs __attribute__((unused)),
long id __attribute__((unused)))
@@ -41,6 +54,9 @@ void __sys_enter(void *cb_data __attribute__ ((unused)),
return;
}
+void __sys_exit(void *cb_data __attribute__ ((unused)),
+ struct pt_regs *regs __attribute__((unused)),
+ long ret __attribute__((unused)));
void __sys_exit(void *cb_data __attribute__ ((unused)),
struct pt_regs *regs __attribute__((unused)),
long ret __attribute__((unused)))
@@ -48,7 +64,8 @@ void __sys_exit(void *cb_data __attribute__ ((unused)),
return;
}
-void __autoconf_func(void)
+void __autoconf_func(void);
+void __autoconf_func(void)
{
(void) register_trace_sched_process_fork(__sched_process_fork, NULL);
(void) register_trace_sched_process_exit(__sched_process_exit, NULL);
diff --git a/runtime/linux/autoconf-vm-area-pte.c b/runtime/linux/autoconf-vm-area-pte.c
index 6493cb0d1..f1541e931 100644
--- a/runtime/linux/autoconf-vm-area-pte.c
+++ b/runtime/linux/autoconf-vm-area-pte.c
@@ -1,6 +1,8 @@
#include <linux/vmalloc.h>
/* kernel commit cd12909cb576d373 */
+struct vm_struct * foo (void);
+
struct vm_struct * foo (void) {
return alloc_vm_area(PAGE_SIZE, NULL);
}
diff --git a/runtime/linux/autoconf-walk-stack.c b/runtime/linux/autoconf-walk-stack.c
index c6c972917..2b02e45ba 100644
--- a/runtime/linux/autoconf-walk-stack.c
+++ b/runtime/linux/autoconf-walk-stack.c
@@ -2,6 +2,8 @@
#include <linux/sched.h>
#include <asm/stacktrace.h>
+void foo (void);
+
void foo (void)
{
struct stacktrace_ops t;
diff --git a/runtime/linux/perf_event_counter_context.c b/runtime/linux/perf_event_counter_context.c
index 04d5912cb..88ff2bc87 100644
--- a/runtime/linux/perf_event_counter_context.c
+++ b/runtime/linux/perf_event_counter_context.c
@@ -1,6 +1,13 @@
#include <linux/perf_event.h>
/* void *context parameter is new since linux commit 4dc0da. */
+struct perf_event *
+pref_ec_context(struct perf_event_attr *attr,
+ int cpu,
+ struct task_struct *task,
+ perf_overflow_handler_t callback,
+ void *context);
+
struct perf_event *
pref_ec_context(struct perf_event_attr *attr,
int cpu,
diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h
index a0a9ac389..1fa62c7ed 100644
--- a/runtime/linux/runtime.h
+++ b/runtime/linux/runtime.h
@@ -457,6 +457,7 @@ static int stap_init_module (void)
module_init(stap_init_module);
+void stap_cleanup_module(void);
void stap_cleanup_module(void)
{
_stp_transport_close();
diff --git a/runtime/linux/task_finder2.c b/runtime/linux/task_finder2.c
index 3e97dd817..9c2f5ad88 100644
--- a/runtime/linux/task_finder2.c
+++ b/runtime/linux/task_finder2.c
@@ -695,6 +695,10 @@ __stp_call_callbacks(struct stap_task_finder_target *tgt,
}
}
+bool
+__verify_build_id(struct task_struct *tsk, unsigned long addr,
+ unsigned const char *build_id, int build_id_len);
+
bool
__verify_build_id(struct task_struct *tsk, unsigned long addr,
unsigned const char *build_id, int build_id_len)
diff --git a/runtime/sym.c b/runtime/sym.c
index 720ba2239..d702d1f11 100644
--- a/runtime/sym.c
+++ b/runtime/sym.c
@@ -368,9 +368,9 @@ static void _stp_filename_lookup_5(struct _stp_module *mod, char ** filename,
#endif /* STP_NEED_LINE_DATA */
-unsigned long _stp_linenumber_lookup(unsigned long addr, struct task_struct *task,
- char ** filename, int need_filename,
- struct context *c)
+static unsigned long _stp_linenumber_lookup(unsigned long addr, struct task_struct *task,
+ char ** filename, int need_filename,
+ struct context *c)
{
struct _stp_module *m;
struct _stp_section *sec;
diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c
index 64ade9e0f..92635f3be 100644
--- a/runtime/transport/symbols.c
+++ b/runtime/transport/symbols.c
@@ -154,6 +154,8 @@ struct stap_module_sect_attrs
void get_module_sect_attrs(struct module* mod,
struct stap_module_sect_attrs* as);
+void put_module_sect_attrs(struct stap_module_sect_attrs* as);
+
void put_module_sect_attrs(struct stap_module_sect_attrs* as)
{
_stp_kfree(as->sections);
diff --git a/tapset/linux/aux_syscalls.stp b/tapset/linux/aux_syscalls.stp
index 0a7cd74dc..cf54aa152 100644
--- a/tapset/linux/aux_syscalls.stp
+++ b/tapset/linux/aux_syscalls.stp
@@ -152,6 +152,8 @@ _stp_lookup_or_str(const _stp_val_array * const array, long val, char *ptr,
#ifndef STAPCONF_SIGSET_FROM_COMPAT_EXPORTED
void
+sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
+void
sigset_from_compat(sigset_t *set, compat_sigset_t *compat)
{
switch (_NSIG_WORDS) {
diff --git a/tapsets.cxx b/tapsets.cxx
index 4b8fa853d..05ad07e75 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -12229,6 +12229,7 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s)
if (used_args.empty())
{
tpop->newline() << "STP_TRACE_ENTER_REAL_NOARGS(" << enter_real_fn << ");";
+ s.op->newline() << "STP_TRACE_ENTER_REAL_NOARGS(" << enter_real_fn << ");";
s.op->newline() << "STP_TRACE_ENTER_REAL_NOARGS(" << enter_real_fn << ")";
}
else
@@ -12242,6 +12243,14 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline() << ", int64_t __tracepoint_arg_" << used_args[j]->name;
}
tpop->line() << ");";
+ s.op->newline() << ");";
+ s.op->indent(-2);
+ s.op->newline() << "STP_TRACE_ENTER_REAL(" << enter_real_fn;
+ s.op->indent(2);
+ for (unsigned j = 0; j < used_args.size(); ++j)
+ {
+ s.op->newline() << ", int64_t __tracepoint_arg_" << used_args[j]->name;
+ }
s.op->newline() << ")";
s.op->indent(-2);
}
@@ -12294,6 +12303,8 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s)
// emit normalized registration functions
+ s.op->newline() << "int register_tracepoint_probe_" << i << "(void);";
+ tpop->newline() << "int register_tracepoint_probe_" << i << "(void);" << endl;
tpop->newline() << "int register_tracepoint_probe_" << i << "(void) {";
tpop->newline(1) << "return STP_TRACE_REGISTER(" << p->tracepoint_name
<< ", " << enter_fn << ");";
@@ -12303,16 +12314,16 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s)
// can only occur if the tracepoint doesn't exist (yet?), or if we
// weren't even registered. The former should be OKed by the initial
// registration call, and the latter is safe to ignore.
+
+ // declare normalized registration functions
+ s.op->newline() << "void unregister_tracepoint_probe_" << i << "(void);";
+ tpop->newline() << "void unregister_tracepoint_probe_" << i << "(void);" << endl;
tpop->newline() << "void unregister_tracepoint_probe_" << i << "(void) {";
tpop->newline(1) << "(void) STP_TRACE_UNREGISTER(" << p->tracepoint_name
<< ", " << enter_fn << ");";
tpop->newline(-1) << "}";
tpop->newline();
- // declare normalized registration functions
- s.op->newline() << "int register_tracepoint_probe_" << i << "(void);";
- s.op->newline() << "void unregister_tracepoint_probe_" << i << "(void);";
-
tpop->assert_0_indent();
}
diff --git a/translate.cxx b/translate.cxx
index 675ef589f..24091d62b 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -1211,6 +1211,7 @@ c_unparser::emit_common_header ()
o->newline( 0) << "#define STP_ON_THE_FLY_INTERVAL (100*1000*1000)"; // default to 100 ms
o->newline( 0) << "#endif";
+ o->newline( 0) << "hrtimer_return_t module_refresh_timer_cb(struct hrtimer *timer);";
o->newline( 0) << "hrtimer_return_t module_refresh_timer_cb(struct hrtimer *timer) {";
o->newline(+1) << "if (atomic_cmpxchg(&need_module_refresh, 1, 0) == 1)";
// NB: one might like to invoke systemtap_module_refresh(NULL) directly from