Nicolas Pitre
c1a95fda2a
kbuild: add fine grained build dependencies for exported symbols
...
Like with kconfig options, we now have the ability to compile in and
out individual EXPORT_SYMBOL() declarations based on the content of
include/generated/autoksyms.h. However we don't want the entire
world to be rebuilt whenever that file is touched.
Let's apply the same build dependency trick used for CONFIG_* symbols
where the time stamp of empty files whose paths matching those symbols
is used to trigger fine grained rebuilds. In our case the key is the
symbol name passed to EXPORT_SYMBOL().
However, unlike config options, we cannot just use fixdep to parse
the source code for EXPORT_SYMBOL(ksym) because several variants exist
and parsing them all in a separate tool, and keeping it in synch, is
not trivially maintainable. Furthermore, there are variants such as
EXPORT_SYMBOL_GPL(pci_user_read_config_##size);
that are instanciated via a macro for which we can't easily determine
the actual exported symbol name(s) short of actually running the
preprocessor on them.
Storing the symbol name string in a special ELF section doesn't work
for targets that output assembly or preprocessed source.
So the best way is really to leverage the preprocessor by having it
output actual symbol names anchored by a special sequence that can be
easily filtered out. Then the list of symbols is simply fed to fixdep
to be merged with the other dependencies.
That implies the preprocessor is executed twice for each source file.
A previous attempt relied on a warning pragma for each EXPORT_SYMBOL()
instance that was filtered apart from stderr by the build system with
a sed script during the actual compilation pass. Unfortunately the
preprocessor/compiler diagnostic output isn't stable between versions
and this solution, although more efficient, was deemed too fragile.
Because of the lowercasing performed by fixdep, there might be name
collisions triggering spurious rebuilds for similar symbols. But this
shouldn't be a big issue in practice. (This is the case for CONFIG_*
symbols and I didn't want to be different here, whatever the original
reason for doing so.)
To avoid needless build overhead, the exported symbol name gathering is
performed only when CONFIG_TRIM_UNUSED_KSYMS is selected.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
2016-03-29 16:30:56 -04:00
..
basic
kbuild: add fine grained build dependencies for exported symbols
2016-03-29 16:30:56 -04:00
coccinelle
Coccinelle: Add api/setup_timer.cocci
2016-02-18 22:17:30 +01:00
dtc
scripts/dtc: Update to upstream commit b06e55c88b9b
2016-02-11 19:45:09 -06:00
gdb
scripts/gdb: account for changes in module data structure
2016-03-22 15:36:02 -07:00
genksyms
genksyms: Handle string literals with spaces in reference files
2015-12-09 15:19:23 +01:00
kconfig
unbreak allmodconfig KCONFIG_ALLCONFIG=...
2016-02-01 15:12:40 +01:00
ksymoops
mod
objtool: Mark non-standard object files and directories
2016-02-29 08:35:02 +01:00
package
kbuild/mkspec: clean boot loader configuration on rpm removal
2016-03-04 22:59:09 +01:00
selinux
selinux: explicitly declare the role "base_r"
2015-07-13 13:32:00 -04:00
tracing
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
.gitignore
KEYS: Reserve an extra certificate symbol for inserting without recompiling
2016-02-26 15:30:20 +00:00
analyze_suspend.py
PM / tools: analyze_suspend.py: update to v3.0
2014-08-09 02:47:58 +02:00
asn1_compiler.c
ASN.1: Copy string names to tokens in ASN.1 compiler
2015-08-07 16:26:13 +01:00
bloat-o-meter
scripts/bloat-o-meter: fix python3 syntax error
2016-01-14 16:00:49 -08:00
bootgraph.pl
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
check-lc_ctype.c
DocBook: Use a fixed encoding for output
2015-09-28 01:31:48 -06:00
check_extable.sh
scripts: add check_extable.sh script.
2015-04-13 21:03:02 +09:30
checkincludes.pl
checkkconfigsymbols.py
checkkconfigsymbols.py: find similar symbols
2015-12-14 10:54:23 -08:00
checkpatch.pl
Merge branch 'akpm' (patches from Andrew)
2016-03-16 11:51:08 -07:00
checkstack.pl
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2014-10-07 21:16:26 -04:00
checksyscalls.sh
x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/
2015-06-04 07:37:37 +02:00
checkversion.pl
cleanfile
cleanpatch
coccicheck
Coccinelle: fix incorrect -include option transformation
2015-10-26 21:32:09 +01:00
config
kbuild: trivial - remove trailing empty lines
2014-06-10 00:04:06 +02:00
conmakehash.c
kbuild: trivial - remove trailing spaces
2014-04-30 17:34:32 +02:00
decode_stacktrace.sh
scripts: decode_stacktrace: fix ARM architecture decoding
2015-09-04 16:54:41 -07:00
decodecode
scripts/decodecode: make faulting insn ptr more robust
2013-04-29 15:54:27 -07:00
depmod.sh
depmod: pass -P $CONFIG_SYMBOL_PREFIX
2013-02-22 11:52:31 +01:00
diffconfig
vfs,ext2: remove CONFIG_EXT2_FS_XIP and rename CONFIG_FS_XIP to CONFIG_FS_DAX
2015-02-16 17:56:04 -08:00
docproc.c
kbuild: trivial - use tabs for code indent where possible
2014-06-10 14:00:53 +02:00
export_report.pl
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
extract-cert.c
KEYS: Remove unnecessary header #inclusions from extract-cert.c
2015-09-25 16:31:45 +01:00
extract-ikconfig
scripts/extract-ikconfig: Support LZ4-compressed images.
2015-04-15 14:01:12 +02:00
extract-module-sig.pl
KEYS: Provide a script to extract a module signature
2015-10-21 15:18:36 +01:00
extract-sys-certs.pl
KEYS: Use the symbol value for list size, updated by scripts/insert-sys-cert
2016-02-26 15:32:05 +00:00
extract-vmlinux
gcc-goto.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
gcc-ld
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
gcc-version.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
gcc-x86_32-has-stack-protector.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
gcc-x86_64-has-stack-protector.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
gen_initramfs_list.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
get_maintainer.pl
scripts/get_maintainer.pl: handle file names beginning with ./
2016-01-20 17:09:18 -08:00
gfp-translate
headerdep.pl
headers.sh
CRIS: Fix headers_install
2014-12-20 00:01:12 +01:00
headers_check.pl
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
headers_install.sh
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
2014-10-14 09:22:26 +02:00
insert-sys-cert.c
KEYS: Reserve an extra certificate symbol for inserting without recompiling
2016-02-26 15:30:20 +00:00
kallsyms.c
kallsyms: add support for relative offsets in kallsyms address table
2016-03-15 16:55:16 -07:00
Kbuild.include
kbuild: add fine grained build dependencies for exported symbols
2016-03-29 16:30:56 -04:00
kernel-doc
A relatively boring cycle in the docs tree. There's a few kernel-doc
2016-01-17 11:55:07 -08:00
kernel-doc-xml-ref
scripts/kernel-doc: Adding cross-reference links to html documentation.
2015-08-16 22:11:16 -06:00
ld-version.sh
ld-version: Fix awk regex compile failure
2016-03-13 10:54:42 +01:00
Lindent
scripts/Lindent: handle missing indent gracefully
2015-09-04 16:54:41 -07:00
link-vmlinux.sh
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
2016-03-24 19:26:47 -07:00
Makefile
KEYS: Reserve an extra certificate symbol for inserting without recompiling
2016-02-26 15:30:20 +00:00
Makefile.asm-generic
kbuild: trivial - remove trailing empty lines
2014-06-10 00:04:06 +02:00
Makefile.build
kbuild: de-duplicate fixdep usage
2016-03-29 16:30:56 -04:00
Makefile.clean
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
2015-02-19 10:07:08 -08:00
Makefile.dtbinst
dtbsinstall: don't move target directory out of the way
2016-01-28 11:40:32 +01:00
Makefile.extrawarn
kbuild: Demote 'sign-compare' warning to W=2
2016-01-12 16:07:03 +01:00
Makefile.fwinst
kbuild: include $(src)/Makefile rather than $(obj)/Makefile
2015-04-02 16:42:08 +02:00
Makefile.headersinst
kbuild: collect shorthands into scripts/Kbuild.include
2014-11-26 14:36:52 +01:00
Makefile.help
Makefile.host
kbuild: handle the dependency of multi-objs hostprogs appropriately
2014-08-19 10:26:20 +02:00
Makefile.kasan
arm64: add KASAN support
2015-10-12 17:46:36 +01:00
Makefile.lib
kernel: add kcov code coverage
2016-03-22 15:36:02 -07:00
Makefile.modbuiltin
Makefile.modinst
modsign: Abort modules_install when signing fails
2015-08-07 16:26:13 +01:00
Makefile.modpost
modpost: Add flag -E for making section mismatches fatal
2015-10-06 10:46:21 +10:30
Makefile.modsign
modsign: lookup lines ending in .ko in .mod files
2014-08-27 21:54:11 +09:30
Makefile.ubsan
ubsan: fix tree-wide -Wmaybe-uninitialized false positives
2016-03-22 15:36:02 -07:00
makelst
markup_oops.pl
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
mkcompile_h
kbuild: trivial - remove trailing spaces
2014-04-30 17:34:32 +02:00
mkmakefile
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
mksysmap
mksysmap: Add h8300 local symbol pattern
2015-06-23 13:35:47 +09:00
mkuboot.sh
mkversion
module-common.lds
kernel: add support for .init_array.* constructors
2015-02-13 21:21:42 -08:00
namespace.pl
kallsyms: add support for relative offsets in kallsyms address table
2016-03-15 16:55:16 -07:00
objdiff
scripts: objdiff: support directories for the augument of record command
2014-06-10 14:59:33 +02:00
patch-kernel
kbuild: trivial - remove trailing spaces
2014-04-30 17:34:32 +02:00
pnmtologo.c
kbuild: trivial - remove trailing empty lines
2014-06-10 00:04:06 +02:00
profile2linkerlist.pl
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00
prune-kernel
scripts: add "prune-kernel" script to clean up old kernel images
2016-02-09 10:09:52 -08:00
recordmcount.c
ftrace/scripts: Fix incorrect use of sprintf in recordmcount
2016-01-04 11:13:16 -05:00
recordmcount.h
recordmcount: Fix endianness handling bug for nop_mcount
2015-11-03 10:45:26 -05:00
recordmcount.pl
scripts/recordmcount.pl: support data in text section on powerpc
2016-01-13 12:35:41 +11:00
setlocalversion
Fix detectition of kernel git repository in setlocalversion script [take #2 ]
2014-01-03 14:48:42 +01:00
show_delta
kbuild: trivial - remove trailing empty lines
2014-06-10 00:04:06 +02:00
sign-file.c
sign-file: fix build with CMS support disabled
2016-03-03 10:50:46 +00:00
sortextable.c
parisc: Use generic extable search and sort routines
2016-03-23 16:00:46 +01:00
sortextable.h
scripts/sortextable: suppress warning: `relocs_size' may be used uninitialized
2014-10-14 02:18:23 +02:00
spelling.txt
scripts/spelling.txt: add some typo-words
2015-09-04 16:54:41 -07:00
stackdelta
scripts: add stackdelta script
2015-08-28 17:04:40 +02:00
stackusage
scripts: add stackusage script
2015-08-28 17:04:40 +02:00
tags.sh
scripts/tags.sh: add regex to map kprobe helpers
2016-02-18 20:56:37 +01:00
unifdef.c
ver_linux
scripts: fix typo in ver_linux
2016-02-07 23:01:45 -08:00
xen-hypercalls.sh
xen: build infrastructure for generating hypercall depending symbols
2015-03-16 14:49:13 +00:00
xz_wrap.sh
kbuild: Make scripts executable
2014-08-20 16:03:45 +02:00