Problems with commit 'kallsyms: add support for relative offsets in kallsyms address table' (in mmotm)
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets (32 and 64 bit, big and little endian) are stuck in boot after this commit.
Bisect points to commit d13682e4d9d2 ("kallsyms: add support for relative offsets in kallsyms address table". Disabling CONFIG_KALLSYMS_BASE_RELATIVE fixes the problem, ie I can boot the image with qemu.
Bisect log is attached.
Playing with the problem, I found the following:
1) The problem is only seen with a toolchain using binutils 2.22, but not with a toolchain using binutils 2.25. The compiler configuration may be different for both toolchains.
2) Message "kallsyms failure: absolute symbol value 0xffffffff807afd14 out of range in relative mode" (twice) when using the toolchain with binutils 2.22. This does not cause the build to fail, though.
3) kallsyms_sym_address() parameter variable type is "int". In the calling code, the variable type used is "unsigned long". That has no impact on the problem, though.
Please let me know if there is anything I can do to help tracking down the problem.
Thanks,
Guenter
---
# bad: [437b7ef6d6484bb36afb2c75897e14bf03113dbd] pci: test for unexpectedly disabled bridges
# good: [afd2ff9b7e1b367172f18ba7f693dfb62bdcb2dc] Linux 4.4
git bisect start 'HEAD' 'v4.4'
# bad: [10078c1820d81131bc338c7c919feb2638a912ad] ocfs2: o2hb: add NEGOTIATE_APPROVE message
git bisect bad 10078c1820d81131bc338c7c919feb2638a912ad
# bad: [1b06048b37e888edb609e1509070ec0c6580eedd] kallsyms-add-support-for-relative-offsets-in-kallsyms-address-table-fix git bisect bad 1b06048b37e888edb609e1509070ec0c6580eedd
# good: [ed312d94332968c86f53295795a3d122fd32cea2] arch/alpha/kernel/systbls.S: remove debug check git bisect good ed312d94332968c86f53295795a3d122fd32cea2
# good: [1cbe7000217b0126821ecd8fba0ba5f9315a0560] thp: limit number of object to scan on deferred_split_scan() git bisect good 1cbe7000217b0126821ecd8fba0ba5f9315a0560
# good: [474324b13e8184aa088c722b771f0f31ab773476] vmstat: remove BUG_ON from vmstat_update
git bisect good 474324b13e8184aa088c722b771f0f31ab773476
# good: [d94a9840c248207040d62ca0f380943db9423418] proc: fix missing reference of mm
git bisect good d94a9840c248207040d62ca0f380943db9423418
# bad: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table git bisect bad d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38
# first bad commit: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table
Quoted 13 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets (32 and 64 bit, big and little endian) are stuck in boot after this commit.
Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem, ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 10 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not with a toolchain using binutils 2.25. The compiler configuration may be different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range in relative mode" (twice) when using the toolchain with binutils 2.22. This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code, the variable type used is "unsigned long". That has no impact on the problem, though.
An additional data point: When using the older toolchain, many symbols in System.map are marked "A".
ffffffff80100000 A _text With the more recent toolchain, the same symbols are marked "T". ffffffff80100000 T _text
Guenter
Quoted 24 lines
Please let me know if there is anything I can do to help tracking down the problem.
Thanks,
Guenter---
# bad: [437b7ef6d6484bb36afb2c75897e14bf03113dbd] pci: test for unexpectedly disabled bridges
# good: [afd2ff9b7e1b367172f18ba7f693dfb62bdcb2dc] Linux 4.4
git bisect start 'HEAD' 'v4.4'
# bad: [10078c1820d81131bc338c7c919feb2638a912ad] ocfs2: o2hb: addNEGOTIATE_APPROVEmessage
git bisect bad10078c1820d81131bc338c7c919feb2638a912ad
# bad: [1b06048b37e888edb609e1509070ec0c6580eedd] kallsyms-add-support-for-relative-offsets-in-kallsyms-address-table-fix git bisect bad1b06048b37e888edb609e1509070ec0c6580eedd
# good: [ed312d94332968c86f53295795a3d122fd32cea2]arch/alpha/kernel/systbls.S: remove debug check git bisect gooded312d94332968c86f53295795a3d122fd32cea2
# good: [1cbe7000217b0126821ecd8fba0ba5f9315a0560] thp: limit number of object to scan ondeferred_split_scan()git bisect good1cbe7000217b0126821ecd8fba0ba5f9315a0560
# good: [474324b13e8184aa088c722b771f0f31ab773476] vmstat: removeBUG_ONfromvmstat_update
git bisect good474324b13e8184aa088c722b771f0f31ab773476
# good: [d94a9840c248207040d62ca0f380943db9423418] proc: fix missing reference of mm
git bisect goodd94a9840c248207040d62ca0f380943db9423418
# bad: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table git bisect badd13682e4d9d2ad8220354b5e1a2bd6623e1f2e38# first bad commit: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table
Quoted 28 lines · Guenter Roeck
Quoted 15 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets (32 and 64 bit, big and little endian) are stuck in boot after this commit.
Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem, ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 9 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not with a toolchain using binutils 2.25. The compiler configuration may be different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range in relative mode" (twice) when using the toolchain with binutils 2.22. This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code, the variable type used is "unsigned long". That has no impact on the problem, though.
Quoted 6 lines
An additional data point: When using the older toolchain, many symbols in System.map are marked "A".
ffffffff80100000A_text
With the more recent toolchain, the same symbols are marked "T".
ffffffff80100000T_text
Thanks for the analysis. It is surprising that the build does not fail when this occurs, and the subsequent hangs themselves are probably caused by missing kallsyms data.
scripts/kallsyms.c ignores all A symbols except _text, which is actually a relative symbol by nature so we can simply assume it is relative (i.e., override it as T)
Re x86_64 !SMP, any build time errors there as well? Likewise for sparc32?
Thanks again, and sorry for the trouble,
Ard.
Quoted 26 lines
Quoted 25 lines
Please let me know if there is anything I can do to help tracking down the problem.
Thanks,
Guenter---
# bad: [437b7ef6d6484bb36afb2c75897e14bf03113dbd] pci: test for unexpectedly disabled bridges
# good: [afd2ff9b7e1b367172f18ba7f693dfb62bdcb2dc] Linux 4.4
git bisect start 'HEAD' 'v4.4'
# bad: [10078c1820d81131bc338c7c919feb2638a912ad] ocfs2: o2hb: addNEGOTIATE_APPROVEmessage
git bisect bad10078c1820d81131bc338c7c919feb2638a912ad
# bad: [1b06048b37e888edb609e1509070ec0c6580eedd] kallsyms-add-support-for-relative-offsets-in-kallsyms-address-table-fix git bisect bad1b06048b37e888edb609e1509070ec0c6580eedd
# good: [ed312d94332968c86f53295795a3d122fd32cea2]arch/alpha/kernel/systbls.S: remove debug check git bisect gooded312d94332968c86f53295795a3d122fd32cea2
# good: [1cbe7000217b0126821ecd8fba0ba5f9315a0560] thp: limit number of object to scan ondeferred_split_scan()git bisect good1cbe7000217b0126821ecd8fba0ba5f9315a0560
# good: [474324b13e8184aa088c722b771f0f31ab773476] vmstat: removeBUG_ONfromvmstat_update
git bisect good474324b13e8184aa088c722b771f0f31ab773476
# good: [d94a9840c248207040d62ca0f380943db9423418] proc: fix missing reference of mm
git bisect goodd94a9840c248207040d62ca0f380943db9423418
# bad: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table git bisect badd13682e4d9d2ad8220354b5e1a2bd6623e1f2e38# first bad commit: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table
Quoted 28 lines · Ard Biesheuvel
Quoted 28 lines · Guenter Roeck
Quoted 24 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets (32 and 64 bit, big and little endian) are stuck in boot after this commit.
Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem, ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
1) The problem is only seen with a toolchain using binutils 2.22, but not with a toolchain using binutils 2.25. The compiler configuration may be different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range in relative mode" (twice) when using the toolchain with binutils 2.22. This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code, the variable type used is "unsigned long". That has no impact on the problem, though.
Quoted 9 lines
Quoted 6 lines
An additional data point: When using the older toolchain, many symbols in System.map are marked "A".
ffffffff80100000 A _text With the more recent toolchain, the same symbols are marked "T". ffffffff80100000 T _textThanks for the analysis. It is surprising that the build does not fail when this occurs, and the subsequent hangs themselves are probably caused by missing kallsyms data.
Yes, I wondered why the build doesn't fail. Seems odd.
Quoted 4 lines
scripts/kallsyms.cignores all A symbols except_text, which is actually a relative symbol by nature so we can simply assume it is relative (i.e., override it as T)Re
x86_64!SMP, any build time errors there as well? Likewise for sparc32?
Yes, same kind of errors for both. For x86_64/nosmp I also get the error message when using the Ubuntu native toolchain, so it doesn't seem to be (directly) related to binutils 2.22 vs. 2.25 for that architecture.
Runtime behavior is a bit different for the different architectures. x86_64 dies silently without any console output, mips just hangs, and sparc32 gets a panic with NULL pointer access.
Of course, with missing kallsyms data all bets are off.
Quoted 2 lines
Thanks again, and sorry for the trouble,
No worries. Hope you'll get this sorted out.
Guenter
Quoted 73 lines · Guenter Roeck
Quoted 48 lines · Ard Biesheuvel
Quoted 40 lines · Guenter Roeck
Quoted 19 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets
(32 and 64 bit, big and little endian) are stuck in boot after this commit.Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets
in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem,
ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 15 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not
with a toolchain using binutils 2.25. The compiler configuration may
be
different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range
in relative mode" (twice) when using the toolchain with binutils
2.22.
This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code,
the variable type used is "unsigned long". That has no impact on the
problem,
though.Quoted 7 lines
An additional data point: When using the older toolchain, many symbols in System.map
are marked "A".ffffffff80100000 A _text With the more recent toolchain, the same symbols are marked "T". ffffffff80100000 T _textQuoted 4 lines
Thanks for the analysis. It is surprising that the build does not fail when this occurs, and the subsequent hangs themselves are probably caused by missing kallsyms data.
Yes, I wondered why the build doesn't fail. Seems odd.
Quoted 6 lines
scripts/kallsyms.cignores all A symbols except_text, which is actually a relative symbol by nature so we can simply assume it is relative (i.e., override it as T)Re
x86_64!SMP, any build time errors there as well? Likewise for sparc32?Yes, same kind of errors for both. For x86_64/nosmp I also get the error message
when using the Ubuntu native toolchain, so it doesn't seem to be (directly) related to binutils 2.22 vs. 2.25 for that architecture.Runtime behavior is a bit different for the different architectures.
x86_64dies silently without any console output, mips just hangs, and sparc32 gets a panic with NULL pointer access.
Of course, with missing kallsyms data all bets are off.Quoted 1 line
Quoted 5 lines
Quoted 1 line
Thanks again, and sorry for the trouble,
No worries. Hope you'll get this sorted out.
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)
scripts/kallsyms.c +4 -2
@@ -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" ); }
Thanks,
Ard.
Quoted 103 lines · Ard Biesheuvel
Quoted 73 lines · Guenter Roeck
Quoted 48 lines · Ard Biesheuvel
Quoted 40 lines · Guenter Roeck
Quoted 19 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets
(32 and 64 bit, big and little endian) are stuck in boot after this commit.Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets
in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem,
ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 15 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not
with a toolchain using binutils 2.25. The compiler configuration may
be
different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range
in relative mode" (twice) when using the toolchain with binutils
2.22.
This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code,
the variable type used is "unsigned long". That has no impact on the
problem,
though.Quoted 7 lines
An additional data point: When using the older toolchain, many symbols in System.map
are marked "A".ffffffff80100000 A _text With the more recent toolchain, the same symbols are marked "T". ffffffff80100000 T _textQuoted 4 lines
Thanks for the analysis. It is surprising that the build does not fail when this occurs, and the subsequent hangs themselves are probably caused by missing kallsyms data.
Yes, I wondered why the build doesn't fail. Seems odd.
Quoted 6 lines
scripts/kallsyms.cignores all A symbols except_text, which is actually a relative symbol by nature so we can simply assume it is relative (i.e., override it as T)Re
x86_64!SMP, any build time errors there as well? Likewise for sparc32?Yes, same kind of errors for both. For x86_64/nosmp I also get the error message
when using the Ubuntu native toolchain, so it doesn't seem to be (directly) related to binutils 2.22 vs. 2.25 for that architecture.Runtime behavior is a bit different for the different architectures.
x86_64dies silently without any console output, mips just hangs, and sparc32 gets a panic with NULL pointer access.
Of course, with missing kallsyms data all bets are off.Quoted 1 line
Quoted 5 lines
Quoted 1 line
Thanks again, and sorry for the trouble,
No worries. Hope you'll get this sorted out.
OK, there's an additional issue in my latest version: the
kallsyms_relative_basevalue 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)
scripts/kallsyms.c +3
-1@@ -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 */ ;
scripts/kallsyms.c static void write_src(void) · line 414
Quoted 8 lines
scripts/kallsyms.c +1
-1@@ -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.
Here is part of the problem. This is from a log message added to make_percpus_absolute().
Marking symbol 'B__bss_start' as absolute
Marking symbol '?__init_end' as absolute
Marking symbol 'D__nosave_begin' as absolute
Marking symbol 'D__nosave_end' as absolute
Marking symbol 'D__per_cpu_end' as absolute
Marking symbol 'D__per_cpu_load' as absolute
Marking symbol 'D__per_cpu_start' as absolute
Marking symbol '?__smp_locks' as absolute
Marking symbol '?__smp_locks_end' as absolute
Marking symbol 'Bempty_zero_page' as absolute
This is with x86_64/nosmp. At least some of those symbols don't really reflect 'percpu' values. Maybe the distinction between percpu and non-percpu variables gets lost if SMP is not configured.
On top of that, older versions of binutils mark additional symbols as absolute, even with x86_64.
ffffffff81a00000 A __end_rodata_hpage_alignffffffff81b19000 A __vvar_pageffffffff81d3d000 A _end
Hope this helps,
Guenter
Quoted 104 lines · Guenter Roeck
Quoted 102 lines · Ard Biesheuvel
Quoted 71 lines · Guenter Roeck
Quoted 48 lines · Ard Biesheuvel
Quoted 40 lines
Quoted 23 lines · Guenter Roeck
On 01/23/2016 06:06 PM, Guenter Roeck wrote:
Hi,I see runtime problems with the current mmotm branch. All qemu mips targets
(32 and 64 bit, big and little endian) are stuck in boot after this commit.Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets
in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem,
ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 15 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not
with a toolchain using binutils 2.25. The compiler configuration may
be
different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range
in relative mode" (twice) when using the toolchain with binutils
2.22.
This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code,
the variable type used is "unsigned long". That has no impact on the
problem,
though.Quoted 6 lines
An additional data point: When using the older toolchain, many symbols in System.map
are marked "A".ffffffff80100000 A _text With the more recent toolchain, the same symbols are marked "T". ffffffff80100000 T _textQuoted 3 lines
Thanks for the analysis. It is surprising that the build does not fail when this occurs, and the subsequent hangs themselves are probably caused by missing kallsyms data.
Yes, I wondered why the build doesn't fail. Seems odd.
Quoted 5 lines
scripts/kallsyms.cignores all A symbols except_text, which is actually a relative symbol by nature so we can simply assume it is relative (i.e., override it as T)Re
x86_64!SMP, any build time errors there as well? Likewise for sparc32?Yes, same kind of errors for both. For x86_64/nosmp I also get the error message
when using the Ubuntu native toolchain, so it doesn't seem to be (directly) related to binutils 2.22 vs. 2.25 for that architecture.Runtime behavior is a bit different for the different architectures.
x86_64dies silently without any console output, mips just hangs, and sparc32 gets a panic with NULL pointer access.
Of course, with missing kallsyms data all bets are off.Quoted 1 line
Quoted 4 lines
Quoted 1 line
Thanks again, and sorry for the trouble,
No worries. Hope you'll get this sorted out.
OK, there's an additional issue in my latest version: the
kallsyms_relative_basevalue 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)
scripts/kallsyms.c +3
-1@@ -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)
Quoted 9 lines
scripts/kallsyms.c static void write_src(void) · line 413
Quoted 6 lines
scripts/kallsyms.c +1
-1if (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?
Quoted 13 lines
Here is part of the problem. This is from a log message added to
make_percpus_absolute().Marking symbol '
B__bss_start' as absolute
Marking symbol '?__init_end' as absolute
Marking symbol 'D__nosave_begin' as absolute
Marking symbol 'D__nosave_end' as absolute
Marking symbol 'D__per_cpu_end' as absolute
Marking symbol 'D__per_cpu_load' as absolute
Marking symbol 'D__per_cpu_start' as absolute
Marking symbol '?__smp_locks' as absolute
Marking symbol '?__smp_locks_end' as absolute
Marking symbol 'Bempty_zero_page' as absolute
Quoted 4 lines
This is with x86_64/nosmp. At least some of those symbols don't really reflect 'percpu' values. Maybe the distinction between percpu and non-percpu variables gets lost if SMP is not configured.
Yes, sounds plausible, and that probably means some latent issue gets uncovered here rather than created. I suppose few people are testing x86_64+!SMP+CONFIG_RELOCATABLE thoroughly.
Quoted 7 lines
On top of that, older versions of binutils mark additional symbols as absolute, even with
x86_64.
ffffffff81a00000A__end_rodata_hpage_alignffffffff81b19000A__vvar_pageffffffff81d3d000A_end
Yes, but _text is the *only* symbol that is natively A that does not get filtered out (save for some ia64 specific ones) so these should not matter. Only _text and the percpu ones that get marked A explicitly should end up in the final table.
Quoted 1 line
Hope this helps,
A great deal, thanks a lot
Ard.
On 01/24/2016 09:20 AM, Ard Biesheuvel wrote:
[ ... ]
Quoted 34 lines
Quoted 24 lines
Quoted 24 lines
OK, there's an additional issue in my latest version: the
kallsyms_relative_basevalue 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)
scripts/kallsyms.c +3
-1@@ -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)Quoted 9 lines
scripts/kallsyms.c static void write_src(void) · line 413
Quoted 6 lines
scripts/kallsyms.c +1
-1if (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.
Quoted 2 lines
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 _etextf03d9000 A _sdataf03de8c4 A jiffiesf03f8860 A _edataf03fc000 A __init_beginf041bdc8 A __init_text_endf0423000 A __bss_startf0423000 A __init_endf044457d A __bss_stopf044457d 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
Quoted 46 lines · Guenter Roeck
On 01/24/2016 09:20 AM, Ard Biesheuvel wrote:
[ ... ]Quoted 34 lines
Quoted 24 lines
Quoted 24 lines
OK, there's an additional issue in my latest version: the
kallsyms_relative_basevalue 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)
scripts/kallsyms.c +3
-1@@ -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)Quoted 9 lines
scripts/kallsyms.c static void write_src(void) · line 413
Quoted 6 lines
scripts/kallsyms.c +1
-1if (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.
Quoted 2 lines
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.
Quoted 11 lines
f035a420A_etextf03d9000A_sdataf03de8c4A jiffiesf03f8860A_edataf03fc000A__init_beginf041bdc8A__init_text_endf0423000A__bss_startf0423000A__init_endf044457dA__bss_stopf044457dA_end
Any clue why these don't get dropped? Am I missing something? Afaict A symbols get dropped unless they are whitelisted (i.e., the few ia64 ones)
Quoted 10 lines
This results in:
kallsyms failure: absolute symbol value
0xf035a420out of range in relative modeThis 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.
Thanks once again
Quoted 59 lines · Ard Biesheuvel
Quoted 45 lines · Guenter Roeck
On 01/24/2016 09:20 AM, Ard Biesheuvel wrote:
[ ... ]Quoted 33 lines
Quoted 24 lines
Quoted 24 lines
OK, there's an additional issue in my latest version: the
kallsyms_relative_basevalue 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)
scripts/kallsyms.c +3
-1@@ -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)Quoted 8 lines
scripts/kallsyms.c static void write_src(void) · line 413
Quoted 6 lines
scripts/kallsyms.c +1
-1if (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.
Quoted 1 line
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.
Quoted 10 lines
f035a420A_etextf03d9000A_sdataf03de8c4A jiffiesf03f8860A_edataf03fc000A__init_beginf041bdc8A__init_text_endf0423000A__bss_startf0423000A__init_endf044457dA__bss_stopf044457dA_end
Quoted 2 lines
Any clue why these don't get dropped? Am I missing something? Afaict A symbols get dropped unless they are whitelisted (i.e., the few ia64 ones)
ok, never mind. it's the symbol range check.
anyway, i should have enough info now to get this sorted
thanks,
ard
Quoted 11 lines
Quoted 9 lines
This results in:
kallsyms failure: absolute symbol value
0xf035a420out of range in relative modeThis 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.
Thanks once again
Quoted 13 lines · Guenter Roeck
Hi,
I see runtime problems with the current mmotm branch. All qemu mips targets (32 and 64 bit, big and little endian) are stuck in boot after this commit.
Bisect points to commit
d13682e4d9d2("kallsyms: add support for relative offsets in kallsyms address table". DisablingCONFIG_KALLSYMS_BASE_RELATIVEfixes the problem, ie I can boot the image with qemu.Bisect log is attached.
Playing with the problem, I found the following:
Quoted 10 lines
1) The problem is only seen with a toolchain using binutils 2.22, but not with a toolchain using binutils 2.25. The compiler configuration may be different for both toolchains.
2) Message "kallsyms failure: absolute symbol value0xffffffff807afd14out of range in relative mode" (twice) when using the toolchain with binutils 2.22. This does not cause the build to fail, though.
3)kallsyms_sym_address()parameter variable type is "int". In the calling code, the variable type used is "unsigned long". That has no impact on the problem, though.
More trouble: All sparc32 qemu tests fail, and x86_64 qemu tests fail for images built with SMP disabled. In all cases, disabling KALLSYMS_BASE_RELATIVE fixes the problem.
Guenter
Quoted 24 lines
Please let me know if there is anything I can do to help tracking down the problem.
Thanks,
Guenter---
# bad: [437b7ef6d6484bb36afb2c75897e14bf03113dbd] pci: test for unexpectedly disabled bridges
# good: [afd2ff9b7e1b367172f18ba7f693dfb62bdcb2dc] Linux 4.4
git bisect start 'HEAD' 'v4.4'
# bad: [10078c1820d81131bc338c7c919feb2638a912ad] ocfs2: o2hb: addNEGOTIATE_APPROVEmessage
git bisect bad10078c1820d81131bc338c7c919feb2638a912ad
# bad: [1b06048b37e888edb609e1509070ec0c6580eedd] kallsyms-add-support-for-relative-offsets-in-kallsyms-address-table-fix git bisect bad1b06048b37e888edb609e1509070ec0c6580eedd
# good: [ed312d94332968c86f53295795a3d122fd32cea2]arch/alpha/kernel/systbls.S: remove debug check git bisect gooded312d94332968c86f53295795a3d122fd32cea2
# good: [1cbe7000217b0126821ecd8fba0ba5f9315a0560] thp: limit number of object to scan ondeferred_split_scan()git bisect good1cbe7000217b0126821ecd8fba0ba5f9315a0560
# good: [474324b13e8184aa088c722b771f0f31ab773476] vmstat: removeBUG_ONfromvmstat_update
git bisect good474324b13e8184aa088c722b771f0f31ab773476
# good: [d94a9840c248207040d62ca0f380943db9423418] proc: fix missing reference of mm
git bisect goodd94a9840c248207040d62ca0f380943db9423418
# bad: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table git bisect badd13682e4d9d2ad8220354b5e1a2bd6623e1f2e38# first bad commit: [d13682e4d9d2ad8220354b5e1a2bd6623e1f2e38] kallsyms: add support for relative offsets in kallsyms address table