[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56A51182.9040105@roeck-us.net>
Date: Sun, 24 Jan 2016 10:01:38 -0800
From: Guenter Roeck <linux@...ck-us.net>
To: Ard Biesheuvel <ard.biesheuvel@...aro.org>
Cc: Heiko Carstens <heiko.carstens@...ibm.com>,
Michael Ellerman <mpe@...erman.id.au>,
Kees Cook <keescook@...omium.org>,
Andrew Morton <akpm@...ux-foundation.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: Problems with commit 'kallsyms: add support for relative offsets
in kallsyms address table' (in mmotm)
On 01/24/2016 09:20 AM, Ard Biesheuvel wrote:
[ ... ]
>>> OK, there's an additional issue in my latest version: the
>>> kallsyms_relative_base value itself is not relocated.
>>>
>>> If you have more time to burn on this, could you try the following on
>>> top? (If not, that is also fine, I will look into it myself on Monday)
>>>
>>> diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
>>> index 5ab13394dfd9..0f43f0751d47 100644
>>> --- a/scripts/kallsyms.c
>>> +++ b/scripts/kallsyms.c
>>> @@ -137,8 +137,10 @@ static int read_symbol(FILE *in, struct sym_entry *s)
>>> sym++;
>>>
>>> /* Ignore most absolute/undefined (?) symbols. */
>>> - if (strcmp(sym, "_text") == 0)
>>> + if (strcmp(sym, "_text") == 0) {
>>> _text = s->addr;
>>> + stype = 'T';
>>> + }
>>> else if (check_symbol_range(sym, s->addr, text_ranges,
>>> ARRAY_SIZE(text_ranges)) == 0)
>>> /* nothing to do */;
>>> @@ -406,7 +408,7 @@ static void write_src(void)
>>>
>>> if (base_relative) {
>>> output_label("kallsyms_relative_base");
>>> - printf("\tPTR\t%#llx\n", relative_base);
>>> + printf("\tPTR\t_text - %#llx\n", _text - relative_base);
>>> printf("\n");
>>> }
>>
>> Does not help.
>>
>
> For x86? Or none of them?
>
I tested sparc32 and x86_64/nosmp. Doesn't help for any of them.
sparc32 has the following absolute symbols.
f035a420 A _etext
f03d9000 A _sdata
f03de8c4 A jiffies
f03f8860 A _edata
f03fc000 A __init_begin
f041bdc8 A __init_text_end
f0423000 A __bss_start
f0423000 A __init_end
f044457d A __bss_stop
f044457d A _end
This results in:
kallsyms failure: absolute symbol value 0xf035a420 out of range in relative mode
This is with binutils 2.22. I didn't test with binutils 2.25 for sparc, or re-test mips.
Looks like I'll need to add more test cases with binutils 2.22 vs. 2.25 for various
architectures, as well as more SMP vs. !SMP builds.
Guenter
Powered by blists - more mailing lists