[PATCH] arm: oprofile: fix linkage issue

Vladimir Zapolskiy vladimir.zapolskiy at nokia.com
Thu Dec 22 10:05:29 EST 2011


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 */
>
>



More information about the linux-arm-kernel mailing list