diff options
-rw-r--r-- | Documentation/abi-checker.txt | 132 | ||||
-rwxr-xr-x | abi-checker/src/build_api_kernel_checker.sh | 24 | ||||
-rw-r--r-- | packaging/linux-kernel.spec | 16 | ||||
-rw-r--r-- | tools/abi-checker/data/abi_3.10.19_1 (renamed from abi-checker/data/abi_3.10.19_1) | 0 | ||||
-rw-r--r-- | tools/abi-checker/sample/LICENSE (renamed from abi-checker/sample/LICENSE) | 0 | ||||
-rw-r--r-- | tools/abi-checker/sample/Makefile (renamed from abi-checker/sample/Makefile) | 0 | ||||
-rw-r--r-- | tools/abi-checker/sample/packaging/sample-module.spec.txt (renamed from abi-checker/sample/packaging/udisks-automount-agent.spec.txt) | 0 | ||||
-rw-r--r-- | tools/abi-checker/sample/sample_module.c (renamed from abi-checker/sample/sample_module.c) | 0 | ||||
-rw-r--r-- | tools/abi-checker/src/Makefile (renamed from abi-checker/src/Makefile) | 0 | ||||
-rwxr-xr-x | tools/abi-checker/src/abi-module-checker (renamed from abi-checker/src/abi-module-checker) | 16 | ||||
-rwxr-xr-x | tools/abi-checker/src/abi-module-dumper (renamed from abi-checker/src/abi-module-dumper) | 17 | ||||
-rwxr-xr-x | tools/abi-checker/src/abi-module-kernels-list (renamed from abi-checker/src/abi-module-kernels-list) | 16 | ||||
-rwxr-xr-x | tools/abi-checker/src/build_api_kernel_checker.sh | 38 | ||||
-rw-r--r-- | tools/abi-checker/src/kernel_abi_checker.c (renamed from abi-checker/src/kernel_abi_checker.c) | 0 | ||||
-rw-r--r-- | tools/abi-checker/src/kernel_abi_checker.h (renamed from abi-checker/src/kernel_abi_checker.h) | 0 | ||||
-rw-r--r-- | tools/abi-checker/src/kernel_abi_checker_elf.c (renamed from abi-checker/src/kernel_abi_checker_elf.c) | 0 |
16 files changed, 223 insertions, 36 deletions
diff --git a/Documentation/abi-checker.txt b/Documentation/abi-checker.txt new file mode 100644 index 00000000000..57caa2119e5 --- /dev/null +++ b/Documentation/abi-checker.txt @@ -0,0 +1,132 @@ + + Linux kernel ABI/API checker +-------------------------------------------------------------------------- + +I. Introduction +=============== + + "abi-checker" is a simple set of tools to: +- test changes in Linux kernel API/ABI. +- test compatibility kernel module wth kernel +- creates dump for external kernel modules with list of kernel symbols + used by the module. + + +II. Application/scripts +======================= + +1. abi-checker + + The application can be run in the following modes: + - "test-kernel" - in the mode compares two Module.symvers files. + In case if some changes have been detected the + application creates report containg list of changed symbols + (added/changed/removed). Additionally summary ireport with + total number symbols, itotal number changed/modified/removed + symbols is created. + + Usage: + abi-checker test-kernel file1 file2 + + Return values: + 0 - if Module.symvers are identical + 1 - if some changes have been detected. + + - "build-list" - in the mode the applications creates file containing linux kernel + symbols uses by the module. + As input the application expect: + - kernel Module.symvers file + - module symbols file - each line of the file has + name of the module symbol. + + As output the application creates file in format like "Modules.symvers". + + Usage: + abi-checker build-list Module.symvers kernel_symbols_file output_file + + Return: + 0 - success + 1 - any error + + - "dump-module" - in the mode the application directly extracts from *.ko file + symbols and creates file in format like Module.symvers containing list + of kernel symbols used by the module. + + Usage: + abi-checker dump-module Module.symvers module_ko_file output_file + + Return: + 0 - success + 1 - any error + + - "test-module" - in the mode the application compares kernel "Module.symvers" file + with external module "Module.symvers" file. In case of any differences + list of changed/removed symbols is reported. Additionally summary info + with numer total number symbols, total number changed/modified/removed + symbols is created also. + + Usage: + abi-checker test-module kernel_Module.symvers module_Module.symvers + + Return: + 0 - if all module symbols are identical with kernel symbols + 1 - if some changes have been detected. + +2. abi-module-checker - helper script. It simplify API/API checks for kernel module. Internally + the script call abi-checker in "test-module" mode. The script assumes that in + /boot/abi directory is present ABI/API repository for linux kernel. + + Usage: + abi-module-checker kernel_module_abi_file + + Return: + 0 - if module API/ABI file is compatible with current kernel + 1 - in case if module is not compatible with current kernel or error + +3. abi-module-dumper - helper script. It simplify ABI/API module dump file creation. The script + assumes that in /boot/abi directory is present ABI/API repository for linux kernel. + + Usage: + abi-module-dumper _module_ko_file_ _output_file_ + + Return: + 0 - success + 1 - any error + +4. abi-module-kernels-list - helper script. The script reporst all kernel version compatible + with the given kernel module. The script assumes that in /boot/abi directory + is present ABI/API repository for linux kernel. + + Usage: + abi-module-kernels-list _module_abi_file_ + + Return: + 0 - success + 1 - any error + +III. Module.symvers file format +=============================== + + Each line of the Module.symvers file has the folloing format: + + symbol_name<tab>symbol_crc<tab>module_name<tab>additiona_info + +Example: + ... + 0x27e1a049 printk vmlinux EXPORT_SYMBOL + 0xf85bebf9 dev_printk_emit vmlinux EXPORT_SYMBOL + ... + +IV. Kernel ABI/API repository +============================= + + The ABI/API repository is located in /boot/abi direcotry. The repository contains list of all +ABI/API versions (also for historical kernel versions). + The repository contains list of files which names are in format abi_${KERNELVERSION}_${ABIVERSION}. +ABI/API file for current kernel version is marked by current symbolic link. + +V. Kernel ABI/API repository +============================ + + Directory tools/abi-checker/data ABI/API Module.symvers for current and older kernel version. +Module.symvers for current kernel version is indicated by current symbolic link. diff --git a/abi-checker/src/build_api_kernel_checker.sh b/abi-checker/src/build_api_kernel_checker.sh deleted file mode 100755 index d9e348b753a..00000000000 --- a/abi-checker/src/build_api_kernel_checker.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# Find abi_version file -ksymver=`find ../.. -name "Module.symvers"` - -# compare abi fingerprint file with kernel abi file -./abi-checker test-kernel "${ksymver}" "../data/abi_${1}_${2}" -rc="${?}" - -# Test result -if [ ${rc} != "0" ] -then - echo "" - echo "----------------------------------------------------------------------------------------------------------------------------" - echo "" - echo "The kernel ABI/API has changed. Please update kernel version and add a new abi-checker/data/abi_VERSION_ABIVER file " - echo "(example abi-checker/data/abi_${1}_${2} )." - echo "The kernel sources build will abort." - echo "" - echo "" - exit 1 -fi - -exit 0 diff --git a/packaging/linux-kernel.spec b/packaging/linux-kernel.spec index 485f06e39e6..0bbbfa50582 100644 --- a/packaging/linux-kernel.spec +++ b/packaging/linux-kernel.spec @@ -92,7 +92,7 @@ Linux kernel uImage %build # 0. Build abi checker -make -C abi-checker/src +make -C tools/abi-checker/src # 1. Create main build directory rm -rf %{kernel_build_dir} @@ -112,7 +112,7 @@ make EXTRAVERSION="-%{build_id}" O=%{kernel_build_dir}/linux-kernel-build-%{vers %if %{with abidev} echo "No linuks kernel ABI/API checks" %else -( cd abi-checker/src; chmod 755 build_api_kernel_checker.sh; ./build_api_kernel_checker.sh "%{version}" "%{abiver}" ) +( cd tools/abi-checker/src; chmod 755 build_api_kernel_checker.sh; ./build_api_kernel_checker.sh "%{version}" "%{abiver}" ) %endif make EXTRAVERSION="-%{build_id}" O=%{kernel_build_dir}/linux-kernel-build-%{version}-%{build_id} uImage %{?jobs:-j%jobs} @@ -146,17 +146,17 @@ make INSTALL_PATH=%{buildroot}/boot INSTALL_MOD_PATH=%{buildroot} O=%{kernel_bui make INSTALL_PATH=%{buildroot} INSTALL_MOD_PATH=%{buildroot} O=%{kernel_build_dir}/linux-kernel-build-%{version}-%{build_id} INSTALL_HDR_PATH=%{buildroot}/usr headers_install # 4.1 Install ABI/API tools -cp abi-checker/src/abi-checker %{buildroot}/usr/local/bin -cp abi-checker/src/abi-module-checker %{buildroot}/usr/local/bin -cp abi-checker/src/abi-module-dumper %{buildroot}/usr/local/bin -cp abi-checker/src/abi-module-kernels-list %{buildroot}/usr/local/bin +cp tools/abi-checker/src/abi-checker %{buildroot}/usr/local/bin +cp tools/abi-checker/src/abi-module-checker %{buildroot}/usr/local/bin +cp tools/abi-checker/src/abi-module-dumper %{buildroot}/usr/local/bin +cp tools/abi-checker/src/abi-module-kernels-list %{buildroot}/usr/local/bin chmod 755 %{buildroot}/usr/local/bin/* # 4.2 Install abi_%{version} file %if %{with abidev} find ../.. -name "Module.symvers" -exec cp {} %{buildroot}/boot/abi/abi_devel \; %else -cp abi-checker/data/abi* %{buildroot}/boot/abi/. +cp tools/abi-checker/data/abi* %{buildroot}/boot/abi/. ln -sf /boot/abi/abi_%{version}_%{abiver} %{buildroot}/boot/abi/current %endif @@ -183,7 +183,7 @@ rm -rf %{buildroot}/usr/src/linux-kernel-sources-%{version}-%{build_id}/%{kernel rm -f %{buildroot}/usr/src/linux-kernel-sources-%{version}-%{build_id}/source rm -f %{buildroot}/usr/src/linux-kernel-build-%{version}-%{build_id}/source -rm -rf %{buildroot}/usr/src/linux-kernel-sources-%{version}-%{build_id}/abi-checker +rm -rf %{buildroot}/usr/src/linux-kernel-sources-%{version}-%{build_id}/tools/abi-checker rm -rf %{buildroot}/System.map* rm -rf %{buildroot}/vmlinux* diff --git a/abi-checker/data/abi_3.10.19_1 b/tools/abi-checker/data/abi_3.10.19_1 index eea34557901..eea34557901 100644 --- a/abi-checker/data/abi_3.10.19_1 +++ b/tools/abi-checker/data/abi_3.10.19_1 diff --git a/abi-checker/sample/LICENSE b/tools/abi-checker/sample/LICENSE index 63fabc1b163..63fabc1b163 100644 --- a/abi-checker/sample/LICENSE +++ b/tools/abi-checker/sample/LICENSE diff --git a/abi-checker/sample/Makefile b/tools/abi-checker/sample/Makefile index 4759f3cb804..4759f3cb804 100644 --- a/abi-checker/sample/Makefile +++ b/tools/abi-checker/sample/Makefile diff --git a/abi-checker/sample/packaging/udisks-automount-agent.spec.txt b/tools/abi-checker/sample/packaging/sample-module.spec.txt index bca84165312..bca84165312 100644 --- a/abi-checker/sample/packaging/udisks-automount-agent.spec.txt +++ b/tools/abi-checker/sample/packaging/sample-module.spec.txt diff --git a/abi-checker/sample/sample_module.c b/tools/abi-checker/sample/sample_module.c index b95a7afa5ce..b95a7afa5ce 100644 --- a/abi-checker/sample/sample_module.c +++ b/tools/abi-checker/sample/sample_module.c diff --git a/abi-checker/src/Makefile b/tools/abi-checker/src/Makefile index b020bc698f4..b020bc698f4 100644 --- a/abi-checker/src/Makefile +++ b/tools/abi-checker/src/Makefile diff --git a/abi-checker/src/abi-module-checker b/tools/abi-checker/src/abi-module-checker index 78e5a89b132..2666fbd9dc9 100755 --- a/abi-checker/src/abi-module-checker +++ b/tools/abi-checker/src/abi-module-checker @@ -24,6 +24,20 @@ then exit 1 fi -/usr/local/bin/abi-checker "test-module" "${kerne_abi_file}" "${1}" +ABI_TOOL_LOCATION="/usr/local/bin" +ABI_TOOL_NAME="abi-checker" +ABI_TOOL="${ABI_TOOL_LOCATION}/${ABI_TOOL_NAME}" + +if [ -x "${ABI_TOOL}" ] +then + CMD="${ABI_TOOL}" +elif [ -x "./${ABI_TOOL_NAME}" ] +then + CMD="./${ABI_TOOL_NAME}" +else + CMD="${ABI_TOOL_NAME}" +fi + +"${CMD}" "test-module" "${kerne_abi_file}" "${1}" exit ${?} diff --git a/abi-checker/src/abi-module-dumper b/tools/abi-checker/src/abi-module-dumper index 783e02aaf4a..3af55fb8b15 100755 --- a/abi-checker/src/abi-module-dumper +++ b/tools/abi-checker/src/abi-module-dumper @@ -30,9 +30,22 @@ then echo "ERROR: Please check input file ${1}" echo "" exit 1 - fi -/usr/local/bin/abi-checker "dump-module" "${kerne_abi_file}" "${1}" "${2}" +ABI_TOOL_LOCATION="/usr/local/bin" +ABI_TOOL_NAME="abi-checker" +ABI_TOOL="${ABI_TOOL_LOCATION}/${ABI_TOOL_NAME}" + +if [ -x "${ABI_TOOL}" ] +then + CMD="${ABI_TOOL}" +elif [ -x "./${ABI_TOOL_NAME}" ] +then + CMD="./${ABI_TOOL_NAME}" +else + CMD="${ABI_TOOL_NAME}" +fi + +"${CMD}" "dump-module" "${kerne_abi_file}" "${1}" "${2}" exit ${?} diff --git a/abi-checker/src/abi-module-kernels-list b/tools/abi-checker/src/abi-module-kernels-list index 12105e1b04f..e07f523bd0a 100755 --- a/abi-checker/src/abi-module-kernels-list +++ b/tools/abi-checker/src/abi-module-kernels-list @@ -13,6 +13,20 @@ then exit 1 fi +ABI_TOOL_LOCATION="/usr/local/bin" +ABI_TOOL_NAME="abi-checker" +ABI_TOOL="${ABI_TOOL_LOCATION}/${ABI_TOOL_NAME}" + +if [ -x "${ABI_TOOL}" ] +then + CMD="${ABI_TOOL}" +elif [ -x "./${ABI_TOOL_NAME}" ] +then + CMD="./${ABI_TOOL_NAME}" +else + CMD="${ABI_TOOL_NAME}" +fi + # # Check all historical abi kernel files # @@ -22,7 +36,7 @@ do version=`echo ${filename} | awk -F _ '{ print $2 }'` abi=`echo ${filename} | awk -F _ '{ print $3 }'` - /usr/local/bin/abi-checker "test-module" "${file}" "${1}" 2> /dev/null > /dev/null + "${CMD}" "test-module" "${file}" "${1}" 2> /dev/null > /dev/null if [ "${?}" = "0" ] then echo " Kernel:${version}, ABI/API:${abi} .... compatible" diff --git a/tools/abi-checker/src/build_api_kernel_checker.sh b/tools/abi-checker/src/build_api_kernel_checker.sh new file mode 100755 index 00000000000..52693f8a5ff --- /dev/null +++ b/tools/abi-checker/src/build_api_kernel_checker.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +# Find abi_version file +ksymver=`find ../../.. -name "Module.symvers"` + +ABI_TOOL_LOCATION="/usr/local/bin" +ABI_TOOL_NAME="abi-checker" +ABI_TOOL="${ABI_TOOL_LOCATION}/${ABI_TOOL_NAME}" + +if [ -x "${ABI_TOOL}" ] +then + CMD="${ABI_TOOL}" +elif [ -x "./${ABI_TOOL_NAME}" ] +then + CMD="./${ABI_TOOL_NAME}" +else + CMD="${ABI_TOOL_NAME}" +fi + +# compare abi fingerprint file with kernel abi file +"${CMD}" test-kernel "${ksymver}" "../data/abi_${1}_${2}" +rc="${?}" + +# Test result +if [ ${rc} != "0" ] +then + echo "" + echo "----------------------------------------------------------------------------------------------------------------------------" + echo "" + echo "The kernel ABI/API has changed. Please update kernel version and add a new tools/abi-checker/data/abi_VERSION_ABIVER file " + echo "(example tools/abi-checker/data/abi_${1}_${2} )." + echo "The kernel sources build will abort." + echo "" + echo "" + exit 1 +fi + +exit 0 diff --git a/abi-checker/src/kernel_abi_checker.c b/tools/abi-checker/src/kernel_abi_checker.c index da396e135b3..da396e135b3 100644 --- a/abi-checker/src/kernel_abi_checker.c +++ b/tools/abi-checker/src/kernel_abi_checker.c diff --git a/abi-checker/src/kernel_abi_checker.h b/tools/abi-checker/src/kernel_abi_checker.h index 8df231ee0e7..8df231ee0e7 100644 --- a/abi-checker/src/kernel_abi_checker.h +++ b/tools/abi-checker/src/kernel_abi_checker.h diff --git a/abi-checker/src/kernel_abi_checker_elf.c b/tools/abi-checker/src/kernel_abi_checker_elf.c index 6f4f28cd9a6..6f4f28cd9a6 100644 --- a/abi-checker/src/kernel_abi_checker_elf.c +++ b/tools/abi-checker/src/kernel_abi_checker_elf.c |