mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
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:
commit
d9241b22b5
5
.gitignore
vendored
5
.gitignore
vendored
@ -36,6 +36,7 @@
|
||||
modules.builtin
|
||||
Module.symvers
|
||||
*.dwo
|
||||
*.su
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
@ -44,6 +45,7 @@ Module.symvers
|
||||
/TAGS
|
||||
/linux
|
||||
/vmlinux
|
||||
/vmlinux.32
|
||||
/vmlinux-gdb.py
|
||||
/vmlinuz
|
||||
/System.map
|
||||
@ -89,6 +91,9 @@ GRTAGS
|
||||
GSYMS
|
||||
GTAGS
|
||||
|
||||
# id-utils files
|
||||
ID
|
||||
|
||||
*.orig
|
||||
*~
|
||||
\#*#
|
||||
|
1
Makefile
1
Makefile
@ -1425,6 +1425,7 @@ clean: $(clean-dirs)
|
||||
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
|
||||
-o -name '*.ko.*' \
|
||||
-o -name '*.dwo' \
|
||||
-o -name '*.su' \
|
||||
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
||||
-o -name '*.symtypes' -o -name 'modules.order' \
|
||||
-o -name modules.builtin -o -name '.tmp_*.o.*' \
|
||||
|
@ -9,11 +9,14 @@ virtual org
|
||||
virtual report
|
||||
|
||||
@match1@
|
||||
declarer name module_i2c_driver;
|
||||
declarer name module_platform_driver;
|
||||
declarer name module_platform_driver_probe;
|
||||
identifier __driver;
|
||||
@@
|
||||
(
|
||||
module_i2c_driver(__driver);
|
||||
|
|
||||
module_platform_driver(__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@
|
||||
identifier __driver;
|
||||
@@
|
||||
@ -37,6 +49,8 @@ identifier __driver;
|
||||
platform_driver_probe(&__driver, ...)
|
||||
|
|
||||
platform_create_bundle(&__driver, ...)
|
||||
|
|
||||
i2c_add_driver(&__driver)
|
||||
)
|
||||
|
||||
@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)@
|
||||
@ -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)@
|
||||
identifier match2.__driver;
|
||||
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@
|
||||
@ -81,6 +126,13 @@ j0 << fix1_context.j0;
|
||||
msg = "No need to set .owner here. The core will do it."
|
||||
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@
|
||||
j0 << fix2_context.j0;
|
||||
@@
|
||||
@ -88,6 +140,13 @@ j0 << fix2_context.j0;
|
||||
msg = "No need to set .owner here. The core will do it."
|
||||
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@
|
||||
@ -97,6 +156,13 @@ j0 << fix1_context.j0;
|
||||
msg = "No need to set .owner here. The core will do it."
|
||||
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@
|
||||
j0 << fix2_context.j0;
|
||||
@@
|
||||
@ -104,3 +170,10 @@ j0 << fix2_context.j0;
|
||||
msg = "No need to set .owner here. The core will do it."
|
||||
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)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE
|
||||
//
|
||||
///
|
||||
// Keywords: pm_runtime
|
||||
// Confidence: Medium
|
||||
// Copyright (C) 2013 Texas Instruments Incorporated - GPLv2.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/// This removes an open coded simple_open() function
|
||||
/// and replaces file operations references to the function
|
||||
/// Remove an open coded simple_open() function
|
||||
/// and replace file operations references to the function
|
||||
/// with simple_open() instead.
|
||||
///
|
||||
// Confidence: High
|
||||
|
60
scripts/coccinelle/api/vma_pages.cocci
Normal file
60
scripts/coccinelle/api/vma_pages.cocci
Normal 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)
|
@ -1,5 +1,4 @@
|
||||
/// the address of a variable or field is non-zero is likely always to bo
|
||||
/// non-zero
|
||||
/// The address of a variable or field is likely always to be non-zero.
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
|
@ -1,5 +1,8 @@
|
||||
/// Make sure threaded IRQs without a primary handler are always request with
|
||||
/// IRQF_ONESHOT
|
||||
/// Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
|
||||
/// 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
|
||||
|
@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Removes unneeded variable used to store return value.
|
||||
/// Remove unneeded variable used to store return value.
|
||||
///
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
|
||||
|
@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Removes unneeded semicolon.
|
||||
/// Remove unneeded semicolon.
|
||||
///
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/// Simplify a trivial if-return sequence. Possibly combine with a
|
||||
/// preceding function call.
|
||||
//
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
|
@ -21,37 +21,38 @@
|
||||
# Note that the rpm-pkg target cannot be used with KBUILD_OUTPUT,
|
||||
# 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
|
||||
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
|
||||
TAR_CONTENT := $(KBUILD_ALLDIRS) kernel.spec .config .scmversion Makefile \
|
||||
TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \
|
||||
Kbuild Kconfig COPYING $(wildcard localversion*)
|
||||
TAR_CONTENT := $(addprefix $(KERNELPATH)/,$(TAR_CONTENT))
|
||||
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: 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
|
||||
ln -sf $(srctree) $(KERNELPATH)
|
||||
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/setlocalversion --save-scmversion
|
||||
tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT)
|
||||
rm $(KERNELPATH)
|
||||
rm -f $(objtree)/.scmversion
|
||||
$(call cmd,src_tar,$(KERNELPATH),kernel.spec)
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_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
|
||||
|
||||
# binrpm-pkg
|
||||
@ -62,7 +63,7 @@ binrpm-pkg: FORCE
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_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
|
||||
rm binkernel.spec
|
||||
|
||||
@ -84,11 +85,17 @@ quiet_cmd_builddeb = BUILDDEB
|
||||
} && \
|
||||
\
|
||||
$$KBUILD_PKG_ROOTCMD $(CONFIG_SHELL) \
|
||||
$(srctree)/scripts/package/builddeb
|
||||
$(srctree)/scripts/package/builddeb $@
|
||||
|
||||
deb-pkg: FORCE
|
||||
$(MAKE) clean
|
||||
$(call cmd,src_tar,$(KDEB_SOURCENAME))
|
||||
$(MAKE) KBUILD_SRC=
|
||||
$(call cmd,builddeb)
|
||||
+$(call cmd,builddeb)
|
||||
|
||||
bindeb-pkg: FORCE
|
||||
$(MAKE) KBUILD_SRC=
|
||||
+$(call cmd,builddeb)
|
||||
|
||||
clean-dirs += $(objtree)/debian/
|
||||
|
||||
@ -133,8 +140,9 @@ perf-%pkg: FORCE
|
||||
# ---------------------------------------------------------------------------
|
||||
help: FORCE
|
||||
@echo ' rpm-pkg - Build both source and binary RPM kernel packages'
|
||||
@echo ' binrpm-pkg - Build only the binary kernel package'
|
||||
@echo ' deb-pkg - Build the kernel as a deb package'
|
||||
@echo ' binrpm-pkg - Build only the binary kernel RPM 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 ' targz-pkg - Build the kernel as a gzip compressed tarball'
|
||||
@echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'
|
||||
|
@ -15,6 +15,8 @@ set -e
|
||||
create_package() {
|
||||
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/changelog "$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"
|
||||
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
|
||||
local forcearch="" debarch=""
|
||||
case "$UTS_MACHINE" in
|
||||
i386|ia64|alpha)
|
||||
debarch="$UTS_MACHINE" ;;
|
||||
@ -47,6 +54,7 @@ create_package() {
|
||||
arm*)
|
||||
debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
|
||||
*)
|
||||
debarch=$(dpkg --print-architecture)
|
||||
echo "" >&2
|
||||
echo "** ** ** WARNING ** ** **" >&2
|
||||
echo "" >&2
|
||||
@ -59,13 +67,8 @@ create_package() {
|
||||
if [ -n "$KBUILD_DEBARCH" ] ; then
|
||||
debarch="$KBUILD_DEBARCH"
|
||||
fi
|
||||
if [ -n "$debarch" ] ; then
|
||||
forcearch="-DArchitecture=$debarch"
|
||||
fi
|
||||
forcearch="-DArchitecture=$debarch"
|
||||
|
||||
# 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
|
||||
@ -76,6 +79,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then
|
||||
else
|
||||
packageversion=$version-$revision
|
||||
fi
|
||||
sourcename=$KDEB_SOURCENAME
|
||||
tmpdir="$objtree/debian/tmp"
|
||||
fwdir="$objtree/debian/fwtmp"
|
||||
kernel_headers_dir="$objtree/debian/hdrtmp"
|
||||
@ -86,6 +90,9 @@ fwpackagename=linux-firmware-image-$version
|
||||
kernel_headers_packagename=linux-headers-$version
|
||||
libc_headers_packagename=linux-libc-dev
|
||||
dbg_packagename=$packagename-dbg
|
||||
debarch=
|
||||
forcearch=
|
||||
set_debarch
|
||||
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
packagename=user-mode-linux-$version
|
||||
@ -110,24 +117,13 @@ BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
|
||||
# Setup the directory structure
|
||||
rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
|
||||
mkdir -m 755 -p "$tmpdir/DEBIAN"
|
||||
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
|
||||
mkdir -m 755 -p "$fwdir/DEBIAN"
|
||||
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 "$tmpdir/lib" "$tmpdir/boot"
|
||||
mkdir -p "$fwdir/lib/firmware/$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
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
|
||||
$MAKE linux
|
||||
cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
|
||||
cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
|
||||
@ -143,6 +139,13 @@ else
|
||||
cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path"
|
||||
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
|
||||
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
|
||||
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
|
||||
$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
|
||||
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
|
||||
|
||||
@ -206,7 +215,7 @@ if [ -n "$DEBEMAIL" ]; then
|
||||
elif [ -n "$EMAIL" ]; then
|
||||
email=$EMAIL
|
||||
else
|
||||
email=$(id -nu)@$(hostname -f)
|
||||
email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
|
||||
fi
|
||||
if [ -n "$DEBFULLNAME" ]; then
|
||||
name=$DEBFULLNAME
|
||||
@ -230,7 +239,7 @@ fi
|
||||
|
||||
# Generate a simple changelog template
|
||||
cat <<EOF > debian/changelog
|
||||
linux-upstream ($packageversion) $distribution; urgency=low
|
||||
$sourcename ($packageversion) $distribution; urgency=low
|
||||
|
||||
* 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'.
|
||||
EOF
|
||||
|
||||
|
||||
build_depends="bc, kmod, cpio "
|
||||
|
||||
# Generate a control file
|
||||
cat <<EOF > debian/control
|
||||
Source: linux-upstream
|
||||
Source: $sourcename
|
||||
Section: kernel
|
||||
Priority: optional
|
||||
Maintainer: $maintainer
|
||||
Build-Depends: $build_depends
|
||||
Standards-Version: 3.8.4
|
||||
Homepage: http://www.kernel.org/
|
||||
EOF
|
||||
@ -383,4 +396,33 @@ EOF
|
||||
create_package "$dbg_packagename" "$dbg_dir"
|
||||
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
|
||||
|
@ -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 "%ifnarch ppc64"
|
||||
echo 'cp vmlinux vmlinux.orig'
|
||||
echo 'bzip2 -9 vmlinux'
|
||||
echo 'bzip2 -9 --keep vmlinux'
|
||||
echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2"
|
||||
echo 'mv vmlinux.orig vmlinux'
|
||||
echo "%endif"
|
||||
|
||||
if ! $PREBUILT; then
|
||||
@ -142,7 +140,6 @@ echo "fi"
|
||||
echo ""
|
||||
echo "%files"
|
||||
echo '%defattr (-, root, root)'
|
||||
echo "%dir /lib/modules"
|
||||
echo "/lib/modules/$KERNELRELEASE"
|
||||
echo "%exclude /lib/modules/$KERNELRELEASE/build"
|
||||
echo "%exclude /lib/modules/$KERNELRELEASE/source"
|
||||
|
59
scripts/stackdelta
Executable file
59
scripts/stackdelta
Executable 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
33
scripts/stackusage
Executable 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}"
|
@ -170,7 +170,9 @@ exuberant()
|
||||
--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
|
||||
--regex-c='/^COMPAT_SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/compat_sys_\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_rcuidle/' \
|
||||
--regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \
|
||||
--regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \
|
||||
--regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \
|
||||
@ -233,7 +235,9 @@ emacs()
|
||||
--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \
|
||||
--regex='/^COMPAT_SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/compat_sys_\1/' \
|
||||
--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \
|
||||
--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1_rcuidle/' \
|
||||
--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
|
||||
--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1_rcuidle/' \
|
||||
--regex='/PAGEFLAG(\([^,)]*\).*/Page\1/' \
|
||||
--regex='/PAGEFLAG(\([^,)]*\).*/SetPage\1/' \
|
||||
--regex='/PAGEFLAG(\([^,)]*\).*/ClearPage\1/' \
|
||||
|
Loading…
Reference in New Issue
Block a user