• Andreas Gruenbacher's avatar
    kbuild: support for %.symtypes files · 15fde675
    Andreas Gruenbacher authored
    Here is a patch that adds a new -T option to genksyms for generating dumps of
    the type definition that makes up the symbol version hashes. This allows to
    trace modversion changes back to what caused them. The dump format is the
    name of the type defined, followed by its definition (which is almost C):
    
      s#list_head struct list_head { s#list_head * next , * prev ; }
    
    The s#, u#, e#, and t# prefixes stand for struct, union, enum, and typedef.
    The exported symbols do not define types, and thus do not have an x# prefix:
    
      nfs4_acl_get_whotype int nfs4_acl_get_whotype ( char * , t#u32 )
    
    The symbol type defintion of a single file can be generated with:
    
      make fs/jbd/journal.symtypes
    
    If KBUILD_SYMTYPES is defined, all the *.symtypes of all object files that
    export symbols are generated.
    
    The single *.symtypes files can be combined into a single file after a kernel
    build with a script like the following:
    
    for f in $(find -name '*.symtypes' | sort); do
        f=${f#./}
        echo "/* ${f%.symtypes}.o */"
        cat $f
        echo
    done \
    | sed -e '\:UNKNOWN:d' \
          -e 's:[,;] }:}:g' \
          -e 's:\([[({]\) :\1:g' \
          -e 's: \([])},;]\):\1:g' \
          -e 's: $::' \
          $f \
    | awk '
    /^.#/   { if (defined[$1] == $0) {
                print $1
                next
              }
              defined[$1] = $0
            }
            { print }
    '
    
    When the kernel ABI changes, diffing individual *.symtype files, or the
    combined files, against each other will show which symbol changes caused the
    ABI changes. This can save a tremendous amount of time.
    
    Dump the types that make up modversions
    Signed-off-by: default avatarAndreas Gruenbacher <agruen@suse.de>
    Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
    15fde675
Makefile 44.3 KB