summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacek Pielaszkiewicz <j.pielaszkie@samsung.com>2013-12-17 14:27:39 +0100
committerChanho Park <chanho61.park@samsung.com>2014-11-18 11:46:07 +0900
commita54216436ae264432562965e7630ae0ff52719ea (patch)
treed181b2a7050d1e4d09e0ffa3135f91c363a55ec9
parent44ee7a4b62b2a31d8c80d25252afb3d1309ec97b (diff)
downloadlinux-3.10-a54216436ae264432562965e7630ae0ff52719ea.tar.gz
linux-3.10-a54216436ae264432562965e7630ae0ff52719ea.tar.bz2
linux-3.10-a54216436ae264432562965e7630ae0ff52719ea.zip
abi-checker - tool directory location update.
- abi-checker tool has been moved into tools/directory - abi-checker short documentation has been added. Change-Id: I88d4c6081b1df276243c9edfb44d1de2e009cc10 Signed-off-by: Jacek Pielaszkiewicz <j.pielaszkie@samsung.com>
-rw-r--r--Documentation/abi-checker.txt132
-rwxr-xr-xabi-checker/src/build_api_kernel_checker.sh24
-rw-r--r--packaging/linux-kernel.spec16
-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-xtools/abi-checker/src/abi-module-checker (renamed from abi-checker/src/abi-module-checker)16
-rwxr-xr-xtools/abi-checker/src/abi-module-dumper (renamed from abi-checker/src/abi-module-dumper)17
-rwxr-xr-xtools/abi-checker/src/abi-module-kernels-list (renamed from abi-checker/src/abi-module-kernels-list)16
-rwxr-xr-xtools/abi-checker/src/build_api_kernel_checker.sh38
-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