Go to file
Yonghong Song 3aa3fd506e btf: add func_proto support
Two new btf kinds, BTF_KIND_FUNC and BTF_KIND_FUNC_PROTO,
have been added in kernel since
  https://patchwork.ozlabs.org/cover/1000176/
to support better func introspection.

Currently, for a DW_TAG_subroutine_type dwarf type,
a simple "void *" is generated instead of real subroutine type.

This patch teaches pahole to generate BTF_KIND_FUNC_PROTO
properly. After this patch, pahole should have complete
type coverage for C frontend with types a bpf program cares.

For example,
  $ cat t1.c
  typedef int __int32;
  struct t1 {
    int a1;
    int (*f1)(char p1, __int32 p2);
  } g1;
  $ cat t2.c
  typedef int __int32;
  struct t2 {
    int a2;
    int (*f2)(char q1, __int32 q2, ...);
    int (*f3)();
  } g2;
  int main() { return 0; }
  $ gcc -O2 -o t1 -g t1.c t2.c
  $ pahole -JV t1
  File t1:
  [1] TYPEDEF __int32 type_id=2
  [2] INT int size=4 bit_offset=0 nr_bits=32 encoding=SIGNED
  [3] STRUCT t1 kind_flag=0 size=16 vlen=2
        a1 type_id=2 bits_offset=0
        f1 type_id=6 bits_offset=64
  [4] FUNC_PROTO (anon) return=2 args=(5 (anon), 1 (anon))
  [5] INT char size=1 bit_offset=0 nr_bits=8 encoding=(none)
  [6] PTR (anon) type_id=4
  [7] TYPEDEF __int32 type_id=8
  [8] INT int size=4 bit_offset=0 nr_bits=32 encoding=SIGNED
  [9] STRUCT t2 kind_flag=0 size=24 vlen=3
        a2 type_id=8 bits_offset=0
        f2 type_id=12 bits_offset=64
        f3 type_id=14 bits_offset=128
  [10] FUNC_PROTO (anon) return=8 args=(11 (anon), 7 (anon), vararg)
  [11] INT char size=1 bit_offset=0 nr_bits=8 encoding=(none)
  [12] PTR (anon) type_id=10
  [13] FUNC_PROTO (anon) return=8 args=(vararg)
  [14] PTR (anon) type_id=13
  $

In the above example, type [4], [10] and [13] represent the
func_proto types.

BTF_KIND_FUNC, which represents a real subprogram, is not generated in
this patch and will be considered later.

Signed-off-by: Yonghong Song <yhs@fb.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@fb.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-12-20 11:33:35 -03:00
cmake/modules cmake: Add comments explaining build_id and fedora/rh detection 2009-06-27 13:32:20 -03:00
lib [LICENSE]: Add COPYING file and add missing license info on some files 2007-12-17 14:15:42 -02:00
man-pages man-pages: Add entry for --hex 2017-09-05 10:13:06 -03:00
ostra [OSTRA]: Change ostra-cg license to GPLv2 2007-12-24 12:25:17 -02:00
rpm/SPECS v1.12 - New Release 2018-08-16 16:15:27 -03:00
CMakeLists.txt v1.12 - New Release 2018-08-16 16:15:27 -03:00
COPYING [LICENSE]: Add COPYING file and add missing license info on some files 2007-12-17 14:15:42 -02:00
MANIFEST MANIFEST: Add missing COPYING file 2018-09-11 11:22:41 -03:00
NEWS v1.12 - New Release 2018-08-16 16:15:27 -03:00
README [CMAKE]: Make the default install prefix be /usr/local 2007-04-19 18:01:47 -03:00
README.DEBUG README.DEBUG: Add an extra step to make the instructions cut'n'exec 2017-12-14 14:15:54 -03:00
README.btf README.btf: Add section on validating the .BTF section via the kernel 2018-08-16 12:05:29 -03:00
README.ctracer ctracer: update README.ctracer, f9 has the dwarves 2008-10-29 08:54:53 -02:00
btf.h btf: add func_proto support 2018-12-20 11:33:35 -03:00
btf_encoder.c btf: add func_proto support 2018-12-20 11:33:35 -03:00
btf_encoder.h btf: Allow multiple cu's in dwarf->btf conversion 2018-12-20 10:44:48 -03:00
codiff.c dwarves: Support static class data members 2012-08-20 14:42:17 -03:00
config.h.cmake [DWARVES] Fixes a FIXME relating to a missing elf (libdw) symbol check. 2008-02-12 21:08:49 -02:00
ctf.h libctf: Use the same coding style as the dwarves 2008-09-25 16:01:26 -03:00
ctf_encoder.c dwarves: Rename variable->location to ->scope 2018-09-26 16:45:25 -03:00
ctf_encoder.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
ctf_loader.c dwarves: Rename variable->location to ->scope 2018-09-26 16:45:25 -03:00
ctfdwdiff ctfdwdiff: Don't ask for variables and inline expansions in pfunct 2009-03-31 19:21:46 -03:00
ctracer.c dwarves_fprintf: Shorten class__fprintf() sig 2016-06-29 16:19:20 -03:00
dtagnames.c dwarves: Use cus__fprintf_load_files_err() in the remaining tools 2016-03-15 14:29:57 -03:00
dutil.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
dutil.h dutil: Add ____ilog2_NaN declaration to silence compiler warning 2016-03-15 11:42:16 -03:00
dwarf_loader.c btf: fix struct/union/fwd types with kind_flag 2018-12-20 11:27:20 -03:00
dwarves.c dwarves: Introduce {cu,cus}__find_struct_or_union_by_name() methods 2018-12-03 13:13:51 -03:00
dwarves.h btf: fix struct/union/fwd types with kind_flag 2018-12-20 11:27:20 -03:00
dwarves_emit.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
dwarves_emit.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
dwarves_fprintf.c dwarves_fprintf: Set conf.cachelinep in union__fprintf() too 2018-10-03 10:38:44 -03:00
dwarves_reorganize.c dwarves_fprintf: Shorten class__fprintf() sig 2016-06-29 16:19:20 -03:00
dwarves_reorganize.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
elf_symtab.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
elf_symtab.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
elfcreator.c Add scncopy - like object copy but tries not to change section content 2010-01-12 14:23:32 -02:00
elfcreator.h Add scncopy - like object copy but tries not to change section content 2010-01-12 14:23:32 -02:00
gobuffer.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
gobuffer.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
hash.h [DWARVES]: Use a hash table for the tags in a CU 2008-02-11 11:47:17 -02:00
libbtf.c btf: add func_proto support 2018-12-20 11:33:35 -03:00
libbtf.h btf: add func_proto support 2018-12-20 11:33:35 -03:00
libctf.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
libctf.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
list.h coding style: remove trailing whitespaces, etc 2009-03-14 13:50:36 -03:00
pahole.c btf: fix struct/union/fwd types with kind_flag 2018-12-20 11:27:20 -03:00
pdwtags.c dwarves: Update e-mail address 2016-06-28 14:24:41 -03:00
pfunct.c pahole: Search and use running kernel vmlinux when no file is passed 2017-11-24 11:24:16 -03:00
pglobal.c dwarves: Use cus__fprintf_load_files_err() in the remaining tools 2016-03-15 14:29:57 -03:00
prefcnt.c dwarves: Use cus__fprintf_load_files_err() in the remaining tools 2016-03-15 14:29:57 -03:00
rbtree.c dwarves: Add an rbtree for the functions in a cu 2009-06-04 14:56:44 -03:00
rbtree.h dwarves: Add an rbtree for the functions in a cu 2009-06-04 14:56:44 -03:00
regtest regtest: Accept --diff instad of plain 'diff' as long option 2012-05-14 19:36:58 -03:00
scncopy.c scncopy: Fix minor problems with --usage. 2010-01-12 16:37:27 -02:00
strings.c dwarves: Stop using 'self' 2012-08-17 18:47:15 -03:00
strings.h dwarves: Stop using 'self' 2014-01-06 16:46:50 -03:00
syscse.c dwarves: Update e-mail address 2016-06-28 14:24:41 -03:00

README

Build instructions:

1. install cmake
2. mkdir build
3. cd build
4. cmake -D__LIB=lib ..
5. make install

Default is to be installed on /usr/local, see rpm spec file for
installing on other places.

Known to work scenarios:

Mandriva Cooker:

cmake 2.4.5-1mdv2007.1
libelfutils1-devel 0.123-1mdv2007.1

Debian Unstable:

cmake 2.4.5-1
libdw-dev 0.123-2

Fedora Core 6:

cmake 2.4.5-2.fc6
elfutils-devel 0.126-1.fc6