kallsyms: fix absolute addresses for kASLR
Currently symbols that are absolute addresses are incorrectly displayed
in /proc/kallsyms if the kernel is loaded with kASLR.
The problem was that the scripts/kallsyms.c file which generates the
array of symbol names and addresses uses an relocatable value for all
symbols, even absolute symbols.  This patch fixes that.
Several kallsyms output in different boot states for comparison:
  $ egrep '_(stext|_per_cpu_(start|end))' /root/kallsyms.nokaslr
  
0000000000000000 D __per_cpu_start
  
0000000000014280 D __per_cpu_end
  
ffffffff810001c8 T _stext
  $ egrep '_(stext|_per_cpu_(start|end))' /root/kallsyms.kaslr1
  
000000001f200000 D __per_cpu_start
  
000000001f214280 D __per_cpu_end
  
ffffffffa02001c8 T _stext
  $ egrep '_(stext|_per_cpu_(start|end))' /root/kallsyms.kaslr2
  
000000000d400000 D __per_cpu_start
  
000000000d414280 D __per_cpu_end
  
ffffffff8e4001c8 T _stext
  $ egrep '_(stext|_per_cpu_(start|end))' /root/kallsyms.kaslr-fixed
  
0000000000000000 D __per_cpu_start
  
0000000000014280 D __per_cpu_end
  
ffffffffadc001c8 T _stext
Signed-off-by: Andy Honig <ahonig@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>