Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild

Pull misc kbuild updates from Michal Marek:
 - deb-pkg:
     + module signing fix
     + dtb files are added to the package
     + do not require `hostname -f` to work during build
     + make deb-pkg generates a source package, bindeb-pkg has been
       added to only generate the binary package
 - rpm-pkg packages /lib/modules as well
 - new coccinelle patch and updates to existing ones
 - new stackusage & stackdelta script to collect and compare stack usage
   info (using gcc's -fstack-usage)
 - make tags understands trace_*_rcuidle() macros
 - .gitignore updates, misc cleanups

* 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: (27 commits)
  deb-pkg: add source package
  package/Makefile: move source tar creation to a function
  scripts: add stackdelta script
  kbuild: remove *.su files generated by -fstack-usage
  .gitignore: add *.su pattern
  scripts: add stackusage script
  kbuild: avoid listing /lib/modules in kernel spec file
  fallback to hostname in scripts/package/builddeb
  coccinelle: api: extend spatch for dropping unnecessary owner
  deb-pkg: simplify directory creation
  scripts/tags.sh: Include trace_*_rcuidle() in tags
  scripts/package/Makefile: rpmbuild is needed for rpm targets
  Kbuild: Add ID files to .gitignore
  gitignore: Add MIPS vmlinux.32 to the list
  coccinelle: simple_return: Add a blank line
  coccinelle: irqf_oneshot.cocci: Improve the generated commit log
  coccinelle: api: add vma_pages.cocci
  scripts/coccinelle/misc/irqf_oneshot.cocci: Fix grammar
  scripts/coccinelle/misc/semicolon.cocci: Use imperative mood
  coccinelle: simple_open: Use imperative mood
  ...
This commit is contained in:
Linus Torvalds 2015-09-08 14:23:13 -07:00
commit d9241b22b5
17 changed files with 345 additions and 61 deletions

5
.gitignore vendored
View File

@ -36,6 +36,7 @@
modules.builtin modules.builtin
Module.symvers Module.symvers
*.dwo *.dwo
*.su
# #
# Top-level generic files # Top-level generic files
@ -44,6 +45,7 @@ Module.symvers
/TAGS /TAGS
/linux /linux
/vmlinux /vmlinux
/vmlinux.32
/vmlinux-gdb.py /vmlinux-gdb.py
/vmlinuz /vmlinuz
/System.map /System.map
@ -89,6 +91,9 @@ GRTAGS
GSYMS GSYMS
GTAGS GTAGS
# id-utils files
ID
*.orig *.orig
*~ *~
\#*# \#*#

View File

@ -1425,6 +1425,7 @@ clean: $(clean-dirs)
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '*.ko.*' \ -o -name '*.ko.*' \
-o -name '*.dwo' \ -o -name '*.dwo' \
-o -name '*.su' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.symtypes' -o -name 'modules.order' \ -o -name '*.symtypes' -o -name 'modules.order' \
-o -name modules.builtin -o -name '.tmp_*.o.*' \ -o -name modules.builtin -o -name '.tmp_*.o.*' \

View File

@ -9,11 +9,14 @@ virtual org
virtual report virtual report
@match1@ @match1@
declarer name module_i2c_driver;
declarer name module_platform_driver; declarer name module_platform_driver;
declarer name module_platform_driver_probe; declarer name module_platform_driver_probe;
identifier __driver; identifier __driver;
@@ @@
( (
module_i2c_driver(__driver);
|
module_platform_driver(__driver); module_platform_driver(__driver);
| |
module_platform_driver_probe(__driver, ...); module_platform_driver_probe(__driver, ...);
@ -28,6 +31,15 @@ identifier match1.__driver;
} }
}; };
@fix1_i2c depends on match1 && patch && !context && !org && !report@
identifier match1.__driver;
@@
static struct i2c_driver __driver = {
.driver = {
- .owner = THIS_MODULE,
}
};
@match2@ @match2@
identifier __driver; identifier __driver;
@@ @@
@ -37,6 +49,8 @@ identifier __driver;
platform_driver_probe(&__driver, ...) platform_driver_probe(&__driver, ...)
| |
platform_create_bundle(&__driver, ...) platform_create_bundle(&__driver, ...)
|
i2c_add_driver(&__driver)
) )
@fix2 depends on match2 && patch && !context && !org && !report@ @fix2 depends on match2 && patch && !context && !org && !report@
@ -48,6 +62,15 @@ identifier match2.__driver;
} }
}; };
@fix2_i2c depends on match2 && patch && !context && !org && !report@
identifier match2.__driver;
@@
static struct i2c_driver __driver = {
.driver = {
- .owner = THIS_MODULE,
}
};
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@fix1_context depends on match1 && !patch && (context || org || report)@ @fix1_context depends on match1 && !patch && (context || org || report)@
@ -61,6 +84,17 @@ position j0;
} }
}; };
@fix1_i2c_context depends on match1 && !patch && (context || org || report)@
identifier match1.__driver;
position j0;
@@
static struct i2c_driver __driver = {
.driver = {
* .owner@j0 = THIS_MODULE,
}
};
@fix2_context depends on match2 && !patch && (context || org || report)@ @fix2_context depends on match2 && !patch && (context || org || report)@
identifier match2.__driver; identifier match2.__driver;
position j0; position j0;
@ -72,6 +106,17 @@ position j0;
} }
}; };
@fix2_i2c_context depends on match2 && !patch && (context || org || report)@
identifier match2.__driver;
position j0;
@@
static struct i2c_driver __driver = {
.driver = {
* .owner@j0 = THIS_MODULE,
}
};
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@script:python fix1_org depends on org@ @script:python fix1_org depends on org@
@ -81,6 +126,13 @@ j0 << fix1_context.j0;
msg = "No need to set .owner here. The core will do it." msg = "No need to set .owner here. The core will do it."
coccilib.org.print_todo(j0[0], msg) coccilib.org.print_todo(j0[0], msg)
@script:python fix1_i2c_org depends on org@
j0 << fix1_i2c_context.j0;
@@
msg = "No need to set .owner here. The core will do it."
coccilib.org.print_todo(j0[0], msg)
@script:python fix2_org depends on org@ @script:python fix2_org depends on org@
j0 << fix2_context.j0; j0 << fix2_context.j0;
@@ @@
@ -88,6 +140,13 @@ j0 << fix2_context.j0;
msg = "No need to set .owner here. The core will do it." msg = "No need to set .owner here. The core will do it."
coccilib.org.print_todo(j0[0], msg) coccilib.org.print_todo(j0[0], msg)
@script:python fix2_i2c_org depends on org@
j0 << fix2_i2c_context.j0;
@@
msg = "No need to set .owner here. The core will do it."
coccilib.org.print_todo(j0[0], msg)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@script:python fix1_report depends on report@ @script:python fix1_report depends on report@
@ -97,6 +156,13 @@ j0 << fix1_context.j0;
msg = "No need to set .owner here. The core will do it." msg = "No need to set .owner here. The core will do it."
coccilib.report.print_report(j0[0], msg) coccilib.report.print_report(j0[0], msg)
@script:python fix1_i2c_report depends on report@
j0 << fix1_i2c_context.j0;
@@
msg = "No need to set .owner here. The core will do it."
coccilib.report.print_report(j0[0], msg)
@script:python fix2_report depends on report@ @script:python fix2_report depends on report@
j0 << fix2_context.j0; j0 << fix2_context.j0;
@@ @@
@ -104,3 +170,10 @@ j0 << fix2_context.j0;
msg = "No need to set .owner here. The core will do it." msg = "No need to set .owner here. The core will do it."
coccilib.report.print_report(j0[0], msg) coccilib.report.print_report(j0[0], msg)
@script:python fix2_i2c_report depends on report@
j0 << fix2_i2c_context.j0;
@@
msg = "No need to set .owner here. The core will do it."
coccilib.report.print_report(j0[0], msg)

View File

@ -1,5 +1,5 @@
/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE /// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE
// ///
// Keywords: pm_runtime // Keywords: pm_runtime
// Confidence: Medium // Confidence: Medium
// Copyright (C) 2013 Texas Instruments Incorporated - GPLv2. // Copyright (C) 2013 Texas Instruments Incorporated - GPLv2.

View File

@ -1,5 +1,5 @@
/// This removes an open coded simple_open() function /// Remove an open coded simple_open() function
/// and replaces file operations references to the function /// and replace file operations references to the function
/// with simple_open() instead. /// with simple_open() instead.
/// ///
// Confidence: High // Confidence: High

View File

@ -0,0 +1,60 @@
///
/// Use vma_pages function on vma object instead of explicit computation.
///
// Confidence: High
// Keywords: vma_pages vma
// Comment: Based on resource_size.cocci
virtual context
virtual patch
virtual org
virtual report
//----------------------------------------------------------
// For context mode
//----------------------------------------------------------
@r_context depends on context && !patch && !org && !report@
struct vm_area_struct *vma;
@@
* (vma->vm_end - vma->vm_start) >> PAGE_SHIFT
//----------------------------------------------------------
// For patch mode
//----------------------------------------------------------
@r_patch depends on !context && patch && !org && !report@
struct vm_area_struct *vma;
@@
- ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT)
+ vma_pages(vma)
//----------------------------------------------------------
// For org mode
//----------------------------------------------------------
@r_org depends on !context && !patch && (org || report)@
struct vm_area_struct *vma;
position p;
@@
(vma->vm_end@p - vma->vm_start) >> PAGE_SHIFT
@script:python depends on report@
p << r_org.p;
x << r_org.vma;
@@
msg="WARNING: Consider using vma_pages helper on %s" % (x)
coccilib.report.print_report(p[0], msg)
@script:python depends on org@
p << r_org.p;
x << r_org.vma;
@@
msg="WARNING: Consider using vma_pages helper on %s" % (x)
msg_safe=msg.replace("[","@(").replace("]",")")
coccilib.org.print_todo(p[0], msg_safe)

View File

@ -1,5 +1,4 @@
/// the address of a variable or field is non-zero is likely always to bo /// The address of a variable or field is likely always to be non-zero.
/// non-zero
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.

View File

@ -1,5 +1,8 @@
/// Make sure threaded IRQs without a primary handler are always request with /// Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
/// IRQF_ONESHOT /// threaded IRQs without a primary handler need to be requested with
/// IRQF_ONESHOT, otherwise the request will fail.
///
/// So pass the IRQF_ONESHOT flag in this case.
/// ///
// //
// Confidence: Good // Confidence: Good

View File

@ -1,5 +1,5 @@
/// ///
/// Removes unneeded variable used to store return value. /// Remove unneeded variable used to store return value.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.

View File

@ -1,5 +1,5 @@
/// ///
/// Removes unneeded semicolon. /// Remove unneeded semicolon.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.

View File

@ -1,6 +1,6 @@
/// Simplify a trivial if-return sequence. Possibly combine with a /// Simplify a trivial if-return sequence. Possibly combine with a
/// preceding function call. /// preceding function call.
// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2.

View File

@ -21,37 +21,38 @@
# Note that the rpm-pkg target cannot be used with KBUILD_OUTPUT, # Note that the rpm-pkg target cannot be used with KBUILD_OUTPUT,
# but the binrpm-pkg target can; for some reason O= gets ignored. # but the binrpm-pkg target can; for some reason O= gets ignored.
# Do we have rpmbuild, otherwise fall back to the older rpm
RPM := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \
else echo rpm; fi)
# Remove hyphens since they have special meaning in RPM filenames # Remove hyphens since they have special meaning in RPM filenames
KERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE)) KERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE))
KDEB_SOURCENAME ?= linux-$(KERNELRELEASE)
export KDEB_SOURCENAME
# Include only those top-level files that are needed by make, plus the GPL copy # Include only those top-level files that are needed by make, plus the GPL copy
TAR_CONTENT := $(KBUILD_ALLDIRS) kernel.spec .config .scmversion Makefile \ TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \
Kbuild Kconfig COPYING $(wildcard localversion*) Kbuild Kconfig COPYING $(wildcard localversion*)
TAR_CONTENT := $(addprefix $(KERNELPATH)/,$(TAR_CONTENT))
MKSPEC := $(srctree)/scripts/package/mkspec MKSPEC := $(srctree)/scripts/package/mkspec
quiet_cmd_src_tar = TAR $(2).tar.gz
cmd_src_tar = \
if test "$(objtree)" != "$(srctree)"; then \
echo "Building source tarball is not possible outside the"; \
echo "kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \
echo "binrpm-pkg or bindeb-pkg target instead."; \
false; \
fi ; \
$(srctree)/scripts/setlocalversion --save-scmversion; \
ln -sf $(srctree) $(2); \
tar -cz $(RCS_TAR_IGNORE) -f $(2).tar.gz \
$(addprefix $(2)/,$(TAR_CONTENT) $(3)); \
rm -f $(2) $(objtree)/.scmversion
# rpm-pkg # rpm-pkg
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
rpm-pkg rpm: FORCE rpm-pkg rpm: FORCE
@if test "$(objtree)" != "$(srctree)"; then \
echo "Building source + binary RPM is not possible outside the"; \
echo "kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \
echo "binrpm-pkg target instead."; \
false; \
fi
$(MAKE) clean $(MAKE) clean
ln -sf $(srctree) $(KERNELPATH)
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec $(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
$(CONFIG_SHELL) $(srctree)/scripts/setlocalversion --save-scmversion $(call cmd,src_tar,$(KERNELPATH),kernel.spec)
tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT)
rm $(KERNELPATH)
rm -f $(objtree)/.scmversion
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
mv -f $(objtree)/.tmp_version $(objtree)/.version mv -f $(objtree)/.tmp_version $(objtree)/.version
$(RPM) $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz rpmbuild --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz
rm $(KERNELPATH).tar.gz kernel.spec rm $(KERNELPATH).tar.gz kernel.spec
# binrpm-pkg # binrpm-pkg
@ -62,7 +63,7 @@ binrpm-pkg: FORCE
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
mv -f $(objtree)/.tmp_version $(objtree)/.version mv -f $(objtree)/.tmp_version $(objtree)/.version
$(RPM) $(RPMOPTS) --define "_builddir $(objtree)" --target \ rpmbuild --define "_builddir $(objtree)" --target \
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec $(UTS_MACHINE) -bb $(objtree)/binkernel.spec
rm binkernel.spec rm binkernel.spec
@ -84,11 +85,17 @@ quiet_cmd_builddeb = BUILDDEB
} && \ } && \
\ \
$$KBUILD_PKG_ROOTCMD $(CONFIG_SHELL) \ $$KBUILD_PKG_ROOTCMD $(CONFIG_SHELL) \
$(srctree)/scripts/package/builddeb $(srctree)/scripts/package/builddeb $@
deb-pkg: FORCE deb-pkg: FORCE
$(MAKE) clean
$(call cmd,src_tar,$(KDEB_SOURCENAME))
$(MAKE) KBUILD_SRC= $(MAKE) KBUILD_SRC=
$(call cmd,builddeb) +$(call cmd,builddeb)
bindeb-pkg: FORCE
$(MAKE) KBUILD_SRC=
+$(call cmd,builddeb)
clean-dirs += $(objtree)/debian/ clean-dirs += $(objtree)/debian/
@ -133,8 +140,9 @@ perf-%pkg: FORCE
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
help: FORCE help: FORCE
@echo ' rpm-pkg - Build both source and binary RPM kernel packages' @echo ' rpm-pkg - Build both source and binary RPM kernel packages'
@echo ' binrpm-pkg - Build only the binary kernel package' @echo ' binrpm-pkg - Build only the binary kernel RPM package'
@echo ' deb-pkg - Build the kernel as a deb package' @echo ' deb-pkg - Build both source and binary deb kernel packages'
@echo ' bindeb-pkg - Build only the binary kernel deb package'
@echo ' tar-pkg - Build the kernel as an uncompressed tarball' @echo ' tar-pkg - Build the kernel as an uncompressed tarball'
@echo ' targz-pkg - Build the kernel as a gzip compressed tarball' @echo ' targz-pkg - Build the kernel as a gzip compressed tarball'
@echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball' @echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'

View File

@ -15,6 +15,8 @@ set -e
create_package() { create_package() {
local pname="$1" pdir="$2" local pname="$1" pdir="$2"
mkdir -m 755 -p "$pdir/DEBIAN"
mkdir -p "$pdir/usr/share/doc/$pname"
cp debian/copyright "$pdir/usr/share/doc/$pname/" cp debian/copyright "$pdir/usr/share/doc/$pname/"
cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
@ -25,8 +27,13 @@ create_package() {
chown -R root:root "$pdir" chown -R root:root "$pdir"
chmod -R go-w "$pdir" chmod -R go-w "$pdir"
# Create the package
dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir"
dpkg --build "$pdir" ..
}
set_debarch() {
# Attempt to find the correct Debian architecture # Attempt to find the correct Debian architecture
local forcearch="" debarch=""
case "$UTS_MACHINE" in case "$UTS_MACHINE" in
i386|ia64|alpha) i386|ia64|alpha)
debarch="$UTS_MACHINE" ;; debarch="$UTS_MACHINE" ;;
@ -47,6 +54,7 @@ create_package() {
arm*) arm*)
debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;; debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
*) *)
debarch=$(dpkg --print-architecture)
echo "" >&2 echo "" >&2
echo "** ** ** WARNING ** ** **" >&2 echo "** ** ** WARNING ** ** **" >&2
echo "" >&2 echo "" >&2
@ -59,13 +67,8 @@ create_package() {
if [ -n "$KBUILD_DEBARCH" ] ; then if [ -n "$KBUILD_DEBARCH" ] ; then
debarch="$KBUILD_DEBARCH" debarch="$KBUILD_DEBARCH"
fi fi
if [ -n "$debarch" ] ; then
forcearch="-DArchitecture=$debarch" forcearch="-DArchitecture=$debarch"
fi
# Create the package
dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
dpkg --build "$pdir" ..
} }
# Some variables and settings used throughout the script # Some variables and settings used throughout the script
@ -76,6 +79,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then
else else
packageversion=$version-$revision packageversion=$version-$revision
fi fi
sourcename=$KDEB_SOURCENAME
tmpdir="$objtree/debian/tmp" tmpdir="$objtree/debian/tmp"
fwdir="$objtree/debian/fwtmp" fwdir="$objtree/debian/fwtmp"
kernel_headers_dir="$objtree/debian/hdrtmp" kernel_headers_dir="$objtree/debian/hdrtmp"
@ -86,6 +90,9 @@ fwpackagename=linux-firmware-image-$version
kernel_headers_packagename=linux-headers-$version kernel_headers_packagename=linux-headers-$version
libc_headers_packagename=linux-libc-dev libc_headers_packagename=linux-libc-dev
dbg_packagename=$packagename-dbg dbg_packagename=$packagename-dbg
debarch=
forcearch=
set_debarch
if [ "$ARCH" = "um" ] ; then if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version packagename=user-mode-linux-$version
@ -110,24 +117,13 @@ BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
# Setup the directory structure # Setup the directory structure
rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename" mkdir -p "$tmpdir/lib" "$tmpdir/boot"
mkdir -m 755 -p "$fwdir/DEBIAN" mkdir -p "$fwdir/lib/firmware/$version/"
mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename"
mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
mkdir -p "$kernel_headers_dir/lib/modules/$version/" mkdir -p "$kernel_headers_dir/lib/modules/$version/"
if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
fi
if [ -n "$BUILD_DEBUG" ] ; then
mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
mkdir -m 755 -p "$dbg_dir/DEBIAN"
fi
# Build and install the kernel # Build and install the kernel
if [ "$ARCH" = "um" ] ; then if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
$MAKE linux $MAKE linux
cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
@ -143,6 +139,13 @@ else
cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path" cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path"
fi fi
if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
# Only some architectures with OF support have this target
if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
$MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
fi
fi
if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
rm -f "$tmpdir/lib/modules/$version/build" rm -f "$tmpdir/lib/modules/$version/build"
@ -162,6 +165,12 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
# then add a link to those # then add a link to those
$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
done done
# resign stripped modules
MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)"
if [ -n "$MODULE_SIG_ALL" ]; then
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign
fi
fi fi
fi fi
@ -206,7 +215,7 @@ if [ -n "$DEBEMAIL" ]; then
elif [ -n "$EMAIL" ]; then elif [ -n "$EMAIL" ]; then
email=$EMAIL email=$EMAIL
else else
email=$(id -nu)@$(hostname -f) email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
fi fi
if [ -n "$DEBFULLNAME" ]; then if [ -n "$DEBFULLNAME" ]; then
name=$DEBFULLNAME name=$DEBFULLNAME
@ -230,7 +239,7 @@ fi
# Generate a simple changelog template # Generate a simple changelog template
cat <<EOF > debian/changelog cat <<EOF > debian/changelog
linux-upstream ($packageversion) $distribution; urgency=low $sourcename ($packageversion) $distribution; urgency=low
* Custom built Linux kernel. * Custom built Linux kernel.
@ -257,12 +266,16 @@ On Debian GNU/Linux systems, the complete text of the GNU General Public
License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
EOF EOF
build_depends="bc, kmod, cpio "
# Generate a control file # Generate a control file
cat <<EOF > debian/control cat <<EOF > debian/control
Source: linux-upstream Source: $sourcename
Section: kernel Section: kernel
Priority: optional Priority: optional
Maintainer: $maintainer Maintainer: $maintainer
Build-Depends: $build_depends
Standards-Version: 3.8.4 Standards-Version: 3.8.4
Homepage: http://www.kernel.org/ Homepage: http://www.kernel.org/
EOF EOF
@ -383,4 +396,33 @@ EOF
create_package "$dbg_packagename" "$dbg_dir" create_package "$dbg_packagename" "$dbg_dir"
fi fi
if [ "x$1" = "xdeb-pkg" ]
then
cat <<EOF > debian/rules
#!/usr/bin/make -f
build:
\$(MAKE)
binary-arch:
\$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
clean:
rm -rf debian/*tmp
mv debian/ debian.backup # debian/ might be cleaned away
\$(MAKE) clean
mv debian.backup debian
binary: binary-arch
EOF
mv ${sourcename}.tar.gz ../${sourcename}_${version}.orig.tar.gz
tar caf ../${sourcename}_${packageversion}.debian.tar.gz debian/{copyright,rules,changelog,control}
dpkg-source -cdebian/control -ldebian/changelog --format="3.0 (custom)" --target-format="3.0 (quilt)" \
-b / ../${sourcename}_${version}.orig.tar.gz ../${sourcename}_${packageversion}.debian.tar.gz
mv ${sourcename}_${packageversion}*dsc ..
dpkg-genchanges > ../${sourcename}_${packageversion}_${debarch}.changes
else
dpkg-genchanges -b > ../${sourcename}_${packageversion}_${debarch}.changes
fi
exit 0 exit 0

View File

@ -111,10 +111,8 @@ echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE"
echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE"
echo "%ifnarch ppc64" echo "%ifnarch ppc64"
echo 'cp vmlinux vmlinux.orig' echo 'bzip2 -9 --keep vmlinux'
echo 'bzip2 -9 vmlinux'
echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2" echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2"
echo 'mv vmlinux.orig vmlinux'
echo "%endif" echo "%endif"
if ! $PREBUILT; then if ! $PREBUILT; then
@ -142,7 +140,6 @@ echo "fi"
echo "" echo ""
echo "%files" echo "%files"
echo '%defattr (-, root, root)' echo '%defattr (-, root, root)'
echo "%dir /lib/modules"
echo "/lib/modules/$KERNELRELEASE" echo "/lib/modules/$KERNELRELEASE"
echo "%exclude /lib/modules/$KERNELRELEASE/build" echo "%exclude /lib/modules/$KERNELRELEASE/build"
echo "%exclude /lib/modules/$KERNELRELEASE/source" echo "%exclude /lib/modules/$KERNELRELEASE/source"

59
scripts/stackdelta Executable file
View File

@ -0,0 +1,59 @@
#!/usr/bin/perl
# Read two files produced by the stackusage script, and show the
# delta between them.
#
# Currently, only shows changes for functions listed in both files. We
# could add an option to show also functions which have vanished or
# appeared (which would often be due to gcc making other inlining
# decisions).
#
# Another possible option would be a minimum absolute value for the
# delta.
#
# A third possibility is for sorting by delta, but that can be
# achieved by piping to sort -k5,5g.
sub read_stack_usage_file {
my %su;
my $f = shift;
open(my $fh, '<', $f)
or die "cannot open $f: $!";
while (<$fh>) {
chomp;
my ($file, $func, $size, $type) = split;
# Old versions of gcc (at least 4.7) have an annoying quirk in
# that a (static) function whose name has been changed into
# for example ext4_find_unwritten_pgoff.isra.11 will show up
# in the .su file with a name of just "11". Since such a
# numeric suffix is likely to change across different
# commits/compilers/.configs or whatever else we're trying to
# tweak, we can't really track those functions, so we just
# silently skip them.
#
# Newer gcc (at least 5.0) report the full name, so again,
# since the suffix is likely to change, we strip it.
next if $func =~ m/^[0-9]+$/;
$func =~ s/\..*$//;
# Line numbers are likely to change; strip those.
$file =~ s/:[0-9]+$//;
$su{"${file}\t${func}"} = {size => $size, type => $type};
}
close($fh);
return \%su;
}
@ARGV == 2
or die "usage: $0 <old> <new>";
my $old = read_stack_usage_file($ARGV[0]);
my $new = read_stack_usage_file($ARGV[1]);
my @common = sort grep {exists $new->{$_}} keys %$old;
for (@common) {
my $x = $old->{$_}{size};
my $y = $new->{$_}{size};
my $delta = $y - $x;
if ($delta) {
printf "%s\t%d\t%d\t%+d\n", $_, $x, $y, $delta;
}
}

33
scripts/stackusage Executable file
View File

@ -0,0 +1,33 @@
#!/bin/sh
outfile=""
now=`date +%s`
while [ $# -gt 0 ]
do
case "$1" in
-o)
outfile="$2"
shift 2;;
-h)
echo "usage: $0 [-o outfile] <make options/args>"
exit 0;;
*) break;;
esac
done
if [ -z "$outfile" ]
then
outfile=`mktemp --tmpdir stackusage.$$.XXXX`
fi
KCFLAGS="${KCFLAGS} -fstack-usage" make "$@"
# Prepend directory name to file names, remove column information,
# make file:line/function/size/type properly tab-separated.
find . -name '*.su' -newermt "@${now}" -print | \
xargs perl -MFile::Basename -pe \
'$d = dirname($ARGV); s#([^:]+:[0-9]+):[0-9]+:#$d/$1\t#;' | \
sort -k3,3nr > "${outfile}"
echo "$0: output written to ${outfile}"

View File

@ -170,7 +170,9 @@ exuberant()
--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \ --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
--regex-c='/^COMPAT_SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/compat_sys_\1/' \ --regex-c='/^COMPAT_SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/compat_sys_\1/' \
--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \ --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \
--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1_rcuidle/' \
--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' \ --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' \
--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1_rcuidle/' \
--regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \ --regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \
--regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \ --regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \
--regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \ --regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \
@ -233,7 +235,9 @@ emacs()
--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \ --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \
--regex='/^COMPAT_SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/compat_sys_\1/' \ --regex='/^COMPAT_SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/compat_sys_\1/' \
--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \ --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \
--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1_rcuidle/' \
--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \ --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1_rcuidle/' \
--regex='/PAGEFLAG(\([^,)]*\).*/Page\1/' \ --regex='/PAGEFLAG(\([^,)]*\).*/Page\1/' \
--regex='/PAGEFLAG(\([^,)]*\).*/SetPage\1/' \ --regex='/PAGEFLAG(\([^,)]*\).*/SetPage\1/' \
--regex='/PAGEFLAG(\([^,)]*\).*/ClearPage\1/' \ --regex='/PAGEFLAG(\([^,)]*\).*/ClearPage\1/' \