/s390x-objtool

objtool research for s390x kpatch port

Primary LanguageAwk

Usage
=====

Direct usage:

  objdump -dr input.o | ./objtool.awk

Or loop over all kernel objects under a given path:

  loop <path>

Note that "loop" will use binutils-s390x-linux-gnu's objdump (available in EPEL
https://fedoraproject.org/wiki/EPEL) if installed, otherwise the local version.


Verbose
-------

By default objtook.awk only reports on functions that match its search
heuristic.  It can report on all functions when put into verbose mode:

  objdump -dr input.o | ./objtool.awk -v verbose=1

  - or -

  verbose=1 ./loop linux/ | grep :: | wc -l


Pre-built object files
======================

The linux/ directory consists of object files generated by linux v4.16
'allyesconfig' and CONFIG_COMPILE_TEST.  The report file was created from these
files.

Total number of functions considered:

  % verbose=1 ./loop linux/ | grep :: | wc -l
  249032

Interesting functions:

  % ./loop linux/ | grep ::
  linux/arch/s390/kernel/head.o :: iplstart-0x3c0()
  linux/arch/s390/kernel/head.o :: iplstart()
  linux/arch/s390/kernel/head.o :: startup()
  linux/arch/s390/kernel/head.o :: startup_kdump()
  linux/arch/s390/kernel/head.o :: startup_kdump()
  linux/arch/s390/kernel/head.o :: startup_kdump_relocated()
  linux/arch/s390/kernel/head64.o :: startup_continue()
  linux/arch/s390/kernel/head64.o :: _stext()
  linux/arch/s390/kernel/vdso64/gettimeofday.o :: __kernel_gettimeofday()
  linux/arch/s390/kernel/base.o :: s390_base_mcck_handler()
  linux/arch/s390/kernel/base.o :: s390_base_ext_handler()
  linux/arch/s390/kernel/base.o :: s390_base_pgm_handler()
  linux/arch/s390/kernel/swsusp.o :: pgm_check_entry()
  linux/arch/s390/kernel/swsusp.o :: restore_registers()
  linux/arch/s390/kernel/mcount.o :: ftrace_graph_caller()
  linux/arch/s390/kernel/entry.o :: sie64a()
  linux/arch/s390/kernel/entry.o :: system_call()
  linux/arch/s390/kernel/entry.o :: ret_from_fork()
  linux/arch/s390/kernel/entry.o :: kernel_thread_starter()
  linux/arch/s390/kernel/entry.o :: pgm_check_handler()
  linux/arch/s390/kernel/entry.o :: io_int_handler()
  linux/arch/s390/kernel/entry.o :: ext_int_handler()
  linux/arch/s390/kernel/entry.o :: mcck_int_handler()
  linux/arch/s390/kernel/entry.o :: restart_int_handler()
  linux/arch/s390/kernel/relocate_kernel.o :: relocate_kernel()
  linux/arch/s390/kernel/irq.o :: do_softirq_own_stack()
  linux/arch/s390/kernel/vdso32/clock_gettime.o :: __kernel_clock_gettime()
  linux/arch/s390/kernel/vdso32/gettimeofday.o :: __kernel_gettimeofday()
  linux/arch/s390/kernel/vdso32/clock_getres.o :: __kernel_clock_getres()
  linux/arch/s390/net/bpf_jit.o :: sk_load_word_slow()
  linux/arch/s390/net/bpf_jit.o :: sk_load_half_slow()
  linux/arch/s390/net/bpf_jit.o :: sk_load_byte_slow()
  linux/arch/s390/net/bpf_jit.o :: sk_load_word_slow_neg()
  linux/arch/s390/net/bpf_jit.o :: sk_load_half_slow_neg()
  linux/arch/s390/net/bpf_jit.o :: sk_load_byte_slow_neg()

See the report file for a full assembly listing.


References
==========

zSeries ELF Application Binary Interface Supplement
http://refspecs.linuxfoundation.org/ELF/zSeries/lzsabi0_zSeries.pdf

Enterprise Systems Architecture/390: Principles of Operation
http://publibfp.dhe.ibm.com/cgi-bin/bookmgr/download/DZ9AR008.pdf

System z Instructions Mnemonic List
http://www.tachyonsoft.com/inst390m.htm