From mboxrd@z Thu Jan 1 00:00:00 1970 From: vladimir.zapolskiy@nokia.com (Vladimir Zapolskiy) Date: Thu, 22 Dec 2011 17:05:29 +0200 Subject: [PATCH] arm: oprofile: fix linkage issue In-Reply-To: <20111222145412.GV16765@erda.amd.com> References: <1324561016-19389-1-git-send-email-vladimir.zapolskiy@nokia.com> <20111222142140.GP16765@erda.amd.com> <20111222145412.GV16765@erda.amd.com> Message-ID: <4EF34739.1070704@nokia.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 12/22/2011 04:54 PM, ext Robert Richter wrote: > On 22.12.11 15:21:40, Robert Richter wrote: >> On 22.12.11 15:36:56, Vladimir Zapolskiy wrote: >>> This change fixes a linking problem, which happens if oprofile is selected to >>> be compiled as built-in: >>> >>> `oprofile_arch_exit' referenced in section `.init.text' of >>> arch/arm/oprofile/built-in.o: defined in discarded section >>> `.exit.text' of arch/arm/oprofile/built-in.o >>> >>> The problem is appeared after commit 87121ca504, which introduced >>> oprofile_arch_exit() calls from __init function. Note that the aforementioned >>> commit has been backported to stable branches, and the problem is known to be >>> reproduced at least with 3.0.13 and 3.1.5 kernels. >> >> I will fix it upstream, afterwards this goes into stable due to the >> stable tag. >> >> Right, commit 87121ca504 went into stable kernels 3.0 and 3.1, need to >> fix them too: >> >> CC: stable at kernel.org # 3.0+ >> >> Please fix also arch/sh with this patch: >> >> $ git grep exit.*oprofile_arch_exit arch/*/oprofile drivers/oprofile/ >> arch/arm/oprofile/common.c:void __exit oprofile_arch_exit(void) >> arch/sh/oprofile/common.c:void __exit oprofile_arch_exit(void) >> arch/sh/oprofile/common.c:void __exit oprofile_arch_exit(void) {} >> >> Thanks, > > To make things easier: if you aggree I will apply your patch with the > changes below in addition. No need to respin a new patch version. > Certainly, thanks. With best wishes, Vladimir > > > diff --git a/arch/sh/oprofile/common.c b/arch/sh/oprofile/common.c > index b4c2d2b..e4dd5d5 100644 > --- a/arch/sh/oprofile/common.c > +++ b/arch/sh/oprofile/common.c > @@ -49,7 +49,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) > return oprofile_perf_init(ops); > } > > -void __exit oprofile_arch_exit(void) > +void oprofile_arch_exit(void) > { > oprofile_perf_exit(); > kfree(sh_pmu_op_name); > @@ -60,5 +60,5 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) > ops->backtrace = sh_backtrace; > return -ENODEV; > } > -void __exit oprofile_arch_exit(void) {} > +void oprofile_arch_exit(void) {} > #endif /* CONFIG_HW_PERF_EVENTS */ > >