Message ID | 1454419174-21290-4-git-send-email-ard.biesheuvel@linaro.org |
---|---|
State | Superseded |
Headers | show |
(+ Uwe, Maxime) Complete thread here: http://thread.gmane.org/gmane.linux.ports.arm.kernel/474400 On 3 February 2016 at 01:05, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Tue, Feb 02, 2016 at 02:19:34PM +0100, Ard Biesheuvel wrote: >> The --page-offset command line option was only used for ARM, to filter >> symbol addresses below CONFIG_PAGE_OFFSET. This is no longer needed, so >> remove the functionality altogether. > > From what I remember, this option has nothing to do with MMU-ful ARM, > but noMMU ARM, where the .text segment can be significantly different > from the .data segment. > > I think you need to talk to noMMU people about this patch. > We have commit f6537f2f0eba4eba3354e48dbe3047db6d8b6254 Author: Ming Lei <tom.leiming@gmail.com> Date: Sat Nov 2 09:11:33 2013 +1030 scripts/kallsyms: filter symbols not in kernel address space This patch uses CONFIG_PAGE_OFFSET to filter symbols which are not in kernel address space because these symbols are generally for generating code purpose and can't be run at kernel mode, so we needn't keep them in /proc/kallsyms. For example, on ARM there are some symbols which may be linked in relocatable code section, then perf can't parse symbols any more from /proc/kallsyms, this patch fixes the problem (introduced b9b32bf70f2fb710b07c94e13afbc729afe221da) which introduces the --page-offset option to kallsyms, in response to your patch that moves .vectors and .stubs to VMA 0x0. Then we have commit 7122c3e9154b5d9a7422f68f02d8acf050fad2b0 Author: Ming Lei <tom.leiming@gmail.com> Date: Tue Dec 10 16:46:29 2013 +1030 scripts/link-vmlinux.sh: only filter kernel symbols for arm Actually CONFIG_PAGE_OFFSET isn't same with PAGE_OFFSET, so it isn't easy to figue out PAGE_OFFSET defined in header file from scripts. Because CONFIG_PAGE_OFFSET may not be defined in some ARCHs( 64bit ARCH), or defined as bogus value in !MMU case, so this patch only applys the filter on ARM when CONFIG_PAGE_OFFSET is defined as the original problem is only on ARM. which restricts the use of --page-offset to CONFIG_ARM, and commit cc8475305203ddfd117b81e2e732194b67d8f310 Author: Maxime Coquelin <mcoquelin.stm32@gmail.com> Date: Thu May 21 19:17:44 2015 +0800 scripts: link-vmlinux: Don't pass page offset to kallsyms if XIP Kernel When Kernel is executed in place from ROM, the symbol addresses can be lower than the page offset. which restricts the use of --page-offset to CONFIG_ARM && !CONFIG_XIP_KERNEL So it looks like the Dec 10 patch fixes some fallout related to !MMU that was caused by the Nov 2 patch, but the original patch has nothing to do with !MMU. Furthermore, 3 out of 4 !MMU configs we have in the tree (efm32, stm32 and vf610m4) are also XIP kernel, for which --page-offset isn't even used to begin with after Maxime's patch. Hopefully Uwe and/or Maxime can confirm, but removing the PAGE_OFFSET lower limit should not affect those platforms at all afaict, especially since, after patch 1/3, there are no symbols left to filter below that limit in the first place. Thanks, Ard. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 02473b71643b..ce36fc02fe8c 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -63,7 +63,6 @@ static unsigned int table_size, table_cnt; static int all_symbols = 0; static int absolute_percpu = 0; static char symbol_prefix_char = '\0'; -static unsigned long long kernel_start_addr = 0; static int base_relative = 0; int token_profit[0x10000]; @@ -229,9 +228,6 @@ static int symbol_valid(struct sym_entry *s) char *sym_name = (char *)s->sym + 1; - if (s->addr < kernel_start_addr) - return 0; - /* skip prefix char */ if (symbol_prefix_char && *sym_name == symbol_prefix_char) sym_name++; @@ -742,21 +738,11 @@ static void record_relative_base(void) { unsigned int i; - if (kernel_start_addr > 0) { - /* - * If the kernel start address was specified, use that as - * the relative base rather than going through the table, - * since it should be a reasonable default, and values below - * it will be ignored anyway. - */ - relative_base = kernel_start_addr; - } else { - relative_base = -1ULL; - for (i = 0; i < table_cnt; i++) - if (!symbol_absolute(&table[i]) && - table[i].addr < relative_base) - relative_base = table[i].addr; - } + relative_base = -1ULL; + for (i = 0; i < table_cnt; i++) + if (!symbol_absolute(&table[i]) && + table[i].addr < relative_base) + relative_base = table[i].addr; } int main(int argc, char **argv) @@ -774,9 +760,6 @@ int main(int argc, char **argv) if ((*p == '"' && *(p+2) == '"') || (*p == '\'' && *(p+2) == '\'')) p++; symbol_prefix_char = *p; - } else if (strncmp(argv[i], "--page-offset=", 14) == 0) { - const char *p = &argv[i][14]; - kernel_start_addr = strtoull(p, NULL, 16); } else if (strcmp(argv[i], "--base-relative") == 0) base_relative = 1; else
The --page-offset command line option was only used for ARM, to filter symbol addresses below CONFIG_PAGE_OFFSET. This is no longer needed, so remove the functionality altogether. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- scripts/kallsyms.c | 27 ++++---------------- 1 file changed, 5 insertions(+), 22 deletions(-) -- 2.5.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel