11 Sep, 2020

1 commit

  • The default way of building documentation is to use
    Sphinx toolchain installed via pip, inside the
    Kernel tree main directory. That's what's recommended by:

    scripts/sphinx-pre-install

    As it usually provides a better version of this package
    than the one installed, specially on LTS distros.

    So, add the directories created by running the commands
    suggested by the script.

    Signed-off-by: Mauro Carvalho Chehab
    Link: https://lore.kernel.org/r/ac4e23d556c7d95cb11d6d5c605f43e425b2c3c7.1599660067.git.mchehab+huawei@kernel.org
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

31 Jul, 2020

1 commit

  • For now, that's arch/x86/boot/compressed/vmlinux.bin.zst but probably more
    will come, thus let's be consistent with all other compressors.

    Signed-off-by: Adam Borowski
    Signed-off-by: Nick Terrell
    Signed-off-by: Ingo Molnar
    Tested-by: Sedat Dilek
    Reviewed-by: Kees Cook
    Link: https://lore.kernel.org/r/20200730190841.2071656-8-nickrterrell@gmail.com

    Adam Borowski
     

05 Jul, 2020

1 commit


06 Jun, 2020

1 commit

  • The full build runs modpost twice, first for vmlinux.o and second for
    modules.

    The first pass dumps all the vmlinux symbols into Module.symvers, but
    the second pass parses vmlinux again instead of reusing the dump file,
    presumably because it needs to avoid accumulating stale symbols.

    Loading symbol info from a dump file is faster than parsing an ELF object.
    Besides, modpost deals with various issues to parse vmlinux in the second
    pass.

    A solution is to make the first pass dumps symbols into a separate file,
    vmlinux.symvers. The second pass reads it, and parses module .o files.
    The merged symbol information is dumped into Module.symvers in the same
    way as before.

    This makes further modpost cleanups possible.

    Also, it fixes the problem of 'make vmlinux', which previously overwrote
    Module.symvers, throwing away module symbols.

    I slightly touched scripts/link-vmlinux.sh so that vmlinux is re-linked
    when you cross this commit. Otherwise, vmlinux.symvers would not be
    generated.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

25 Mar, 2020

1 commit


02 Mar, 2020

1 commit

  • Commit 68ca0fd272da ("selftest/lkdtm: Don't pollute 'git status'")
    introduced patterns for git to ignore files generated in
    tools/testing/selftests/lkdtm/

    Use local .gitignore file instead of using the root one.

    Fixes: 68ca0fd272da ("selftest/lkdtm: Don't pollute 'git status'")
    Signed-off-by: Christophe Leroy
    Acked-by: Kees Cook
    Signed-off-by: Shuah Khan

    Christophe Leroy
     

20 Feb, 2020

1 commit

  • Commit 46d1a0f03d66 ("selftests/lkdtm: Add tests for LKDTM targets")
    added generation of lkdtm test scripts.

    Ignore those generated scripts when performing 'git status'

    Fixes: 46d1a0f03d66 ("selftests/lkdtm: Add tests for LKDTM targets")
    Signed-off-by: Christophe Leroy
    Signed-off-by: Shuah Khan

    Christophe Leroy
     

11 Nov, 2019

1 commit

  • The modpost, with the -d option given, generates per-module .ns_deps
    files.

    Kbuild generates per-module .mod files to carry module information.
    This is convenient because Make handles multiple jobs in parallel
    when the -j option is given.

    On the other hand, the modpost always runs as a single thread.
    I do not see a strong reason to produce separate .ns_deps files.

    This commit changes the modpost to generate just one file,
    modules.nsdeps, each line of which has the following format:

    :

    Please note it contains *missing* namespaces instead of required ones.
    So, modules.nsdeps is empty if the namespace dependency is all good.

    This will work more efficiently because spatch will no longer process
    already imported namespaces. I removed the '(if needed)' from the
    nsdeps log since spatch is invoked only when needed.

    This also solves the stale .ns_deps problem reported by Jessica Yu:

    https://lkml.org/lkml/2019/10/28/467

    Signed-off-by: Masahiro Yamada
    Tested-by: Jessica Yu
    Acked-by: Jessica Yu
    Reviewed-by: Matthias Maennich
    Tested-by: Matthias Maennich

    Masahiro Yamada
     

23 Sep, 2019

1 commit

  • Pull modules updates from Jessica Yu:
    "The main bulk of this pull request introduces a new exported symbol
    namespaces feature. The number of exported symbols is increasingly
    growing with each release (we're at about 31k exports as of 5.3-rc7)
    and we currently have no way of visualizing how these symbols are
    "clustered" or making sense of this huge export surface.

    Namespacing exported symbols allows kernel developers to more
    explicitly partition and categorize exported symbols, as well as more
    easily limiting the availability of namespaced symbols to other parts
    of the kernel. For starters, we have introduced the USB_STORAGE
    namespace to demonstrate the API's usage. I have briefly summarized
    the feature and its main motivations in the tag below.

    Summary:

    - Introduce exported symbol namespaces.

    This new feature allows subsystem maintainers to partition and
    categorize their exported symbols into explicit namespaces. Module
    authors are now required to import the namespaces they need.

    Some of the main motivations of this feature include: allowing
    kernel developers to better manage the export surface, allow
    subsystem maintainers to explicitly state that usage of some
    exported symbols should only be limited to certain users (think:
    inter-module or inter-driver symbols, debugging symbols, etc), as
    well as more easily limiting the availability of namespaced symbols
    to other parts of the kernel.

    With the module import requirement, it is also easier to spot the
    misuse of exported symbols during patch review.

    Two new macros are introduced: EXPORT_SYMBOL_NS() and
    EXPORT_SYMBOL_NS_GPL(). The API is thoroughly documented in
    Documentation/kbuild/namespaces.rst.

    - Some small code and kbuild cleanups here and there"

    * tag 'modules-for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux:
    module: Remove leftover '#undef' from export header
    module: remove unneeded casts in cmp_name()
    module: move CONFIG_UNUSED_SYMBOLS to the sub-menu of MODULES
    module: remove redundant 'depends on MODULES'
    module: Fix link failure due to invalid relocation on namespace offset
    usb-storage: export symbols in USB_STORAGE namespace
    usb-storage: remove single-use define for debugging
    docs: Add documentation for Symbol Namespaces
    scripts: Coccinelle script for namespace dependencies.
    modpost: add support for generating namespace dependencies
    export: allow definition default namespaces in Makefiles or sources
    module: add config option MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
    modpost: add support for symbol namespaces
    module: add support for symbol namespaces.
    export: explicitly align struct kernel_symbol
    module: support reading multiple values per modinfo tag

    Linus Torvalds
     

10 Sep, 2019

1 commit

  • This patch adds an option to modpost to generate a .ns_deps file
    per module, containing the namespace dependencies for that module.

    E.g. if the linked module my-module.ko would depend on the symbol
    myfunc.MY_NS in the namespace MY_NS, the my-module.ns_deps file created
    by modpost would contain the entry MY_NS to express the namespace
    dependency of my-module imposed by using the symbol myfunc.

    These files can subsequently be used by static analysis tools (like
    coccinelle scripts) to address issues with missing namespace imports. A
    later patch of this series will introduce such a script 'nsdeps' and a
    corresponding make target to automatically add missing
    MODULE_IMPORT_NS() definitions to the module's sources. For that it uses
    the information provided in the generated .ns_deps files.

    Co-developed-by: Martijn Coenen
    Signed-off-by: Martijn Coenen
    Reviewed-by: Greg Kroah-Hartman
    Signed-off-by: Matthias Maennich
    Signed-off-by: Jessica Yu

    Matthias Maennich
     

22 Aug, 2019

1 commit


27 Jul, 2019

1 commit

  • This file is used by clangd to use language server protocol.
    It can be generated at each compile using scripts/gen_compile_commands.py.
    Therefore it is different depending on the environment and should be
    ignored.

    Signed-off-by: Toru Komatsu
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Masahiro Yamada

    Toru Komatsu
     

18 Jul, 2019

1 commit

  • While descending directories, Kbuild produces objects for modules,
    but do not link final *.ko files; it is done in the modpost.

    To keep track of modules, Kbuild creates a *.mod file in $(MODVERDIR)
    for every module it is building. Some post-processing steps read the
    necessary information from *.mod files. This avoids descending into
    directories again. This mechanism was introduced in 2003 or so.

    Later, commit 551559e13af1 ("kbuild: implement modules.order") added
    modules.order. So, we can simply read it out to know all the modules
    with directory paths. This is easier than parsing the first line of
    *.mod files.

    $(MODVERDIR) has a flat directory structure, that is, *.mod files
    are named only with base names. This is based on the assumption that
    the module name is unique across the tree. This assumption is really
    fragile.

    Stephen Rothwell reported a race condition caused by a module name
    conflict:

    https://lkml.org/lkml/2019/5/13/991

    In parallel building, two different threads could write to the same
    $(MODVERDIR)/*.mod simultaneously.

    Non-unique module names are the source of all kind of troubles, hence
    commit 3a48a91901c5 ("kbuild: check uniqueness of module names")
    introduced a new checker script.

    However, it is still fragile in the build system point of view because
    this race happens before scripts/modules-check.sh is invoked. If it
    happens again, the modpost will emit unclear error messages.

    To fix this issue completely, create *.mod with full directory path
    so that two threads never attempt to write to the same file.

    $(MODVERDIR) is no longer needed.

    Since modules with directory paths are listed in modules.order, Kbuild
    is still able to find *.mod files without additional descending.

    I also killed cmd_secanalysis; scripts/mod/sumversion.c computes MD4 hash
    for modules with MODULE_VERSION(). When CONFIG_DEBUG_SECTION_MISMATCH=y,
    it occurs not only in the modpost stage, but also during directory
    descending, where sumversion.c may parse stale *.mod files. It would emit
    'No such file or directory' warning when an object consisting a module is
    renamed, or when a single-obj module is turned into a multi-obj module or
    vice versa.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     

18 May, 2019

1 commit


08 May, 2019

1 commit


07 May, 2019

2 commits

  • Problem:

    When a kernel module is compiled as a separate module, some important
    information about the kernel module is available via .modinfo section of
    the module. In contrast, when the kernel module is compiled into the
    kernel, that information is not available.

    Information about built-in modules is necessary in the following cases:

    1. When it is necessary to find out what additional parameters can be
    passed to the kernel at boot time.

    2. When you need to know which module names and their aliases are in
    the kernel. This is very useful for creating an initrd image.

    Proposal:

    The proposed patch does not remove .modinfo section with module
    information from the vmlinux at the build time and saves it into a
    separate file after kernel linking. So, the kernel does not increase in
    size and no additional information remains in it. Information is stored
    in the same format as in the separate modules (null-terminated string
    array). Because the .modinfo section is already exported with a separate
    modules, we are not creating a new API.

    It can be easily read in the userspace:

    $ tr '\0' '\n' < modules.builtin.modinfo
    ext4.softdep=pre: crc32c
    ext4.license=GPL
    ext4.description=Fourth Extended Filesystem
    ext4.author=Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
    ext4.alias=fs-ext4
    ext4.alias=ext3
    ext4.alias=fs-ext3
    ext4.alias=ext2
    ext4.alias=fs-ext2
    md_mod.alias=block-major-9-*
    md_mod.alias=md
    md_mod.description=MD RAID framework
    md_mod.license=GPL
    md_mod.parmtype=create_on_open:bool
    md_mod.parmtype=start_dirty_degraded:int
    ...

    Co-Developed-by: Gleb Fotengauer-Malinovskiy
    Signed-off-by: Gleb Fotengauer-Malinovskiy
    Signed-off-by: Alexey Gladkov
    Acked-by: Jessica Yu
    Signed-off-by: Masahiro Yamada

    Alexey Gladkov
     
  • Clarify these directory paths are relative to the top of the source
    tree.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

13 Dec, 2018

1 commit

  • This adds the build infrastructure for checking DT binding schema
    documents and validating dts files using the binding schema.

    Check DT binding schema documents:
    make dt_binding_check

    Build dts files and check using DT binding schema:
    make dtbs_check

    Optionally, DT_SCHEMA_FILES can be passed in with a schema file(s) to
    use for validation. This makes it easier to find and fix errors
    generated by a specific schema.

    Currently, the validation targets are separate from a normal build to
    avoid a hard dependency on the external DT schema project and because
    there are lots of warnings generated.

    Cc: Jonathan Corbet
    Cc: Mark Rutland
    Acked-by: Masahiro Yamada
    Cc: Michal Marek
    Cc: linux-doc@vger.kernel.org
    Cc: devicetree@vger.kernel.org
    Cc: linux-kbuild@vger.kernel.org
    Signed-off-by: Rob Herring

    Rob Herring
     

16 Apr, 2018

1 commit

  • Pull more Kbuild updates from Masahiro Yamada:

    - pass HOSTLDFLAGS when compiling single .c host programs

    - build genksyms lexer and parser files instead of using shipped
    versions

    - rename *-asn1.[ch] to *.asn1.[ch] for suffix consistency

    - let the top .gitignore globally ignore artifacts generated by flex,
    bison, and asn1_compiler

    - let the top Makefile globally clean artifacts generated by flex,
    bison, and asn1_compiler

    - use safer .SECONDARY marker instead of .PRECIOUS to prevent
    intermediate files from being removed

    - support -fmacro-prefix-map option to make __FILE__ a relative path

    - fix # escaping to prepare for the future GNU Make release

    - clean up deb-pkg by using debian tools instead of handrolled
    source/changes generation

    - improve rpm-pkg portability by supporting kernel-install as a
    fallback of new-kernel-pkg

    - extend Kconfig listnewconfig target to provide more information

    * tag 'kbuild-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kconfig: extend output of 'listnewconfig'
    kbuild: rpm-pkg: use kernel-install as a fallback for new-kernel-pkg
    Kbuild: fix # escaping in .cmd files for future Make
    kbuild: deb-pkg: split generating packaging and build
    kbuild: use -fmacro-prefix-map to make __FILE__ a relative path
    kbuild: mark $(targets) as .SECONDARY and remove .PRECIOUS markers
    kbuild: rename *-asn1.[ch] to *.asn1.[ch]
    kbuild: clean up *-asn1.[ch] patterns from top-level Makefile
    .gitignore: move *-asn1.[ch] patterns to the top-level .gitignore
    kbuild: add %.dtb.S and %.dtb to 'targets' automatically
    kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically
    genksyms: generate lexer and parser during build instead of shipping
    kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile
    .gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore
    kbuild: use HOSTLDFLAGS for single .c executables

    Linus Torvalds
     

12 Apr, 2018

1 commit

  • clang-format is a tool to format C/C++/... code according to a set of
    rules and heuristics. Like most tools, it is not perfect nor covers
    every single case, but it is good enough to be helpful.

    In particular, it is useful for quickly re-formatting blocks of code
    automatically, for reviewing full files in order to spot coding style
    mistakes, typos and possible improvements. It is also handy for sorting
    ``#includes``, for aligning variables and macros, for reflowing text and
    other similar tasks. It also serves as a teaching tool/guide for
    newcomers.

    The tool itself has been already included in the repositories of popular
    Linux distributions for a long time. The rules in this file are
    intended for clang-format >= 4, which is easily available in most
    distributions.

    This commit adds the configuration file that contains the rules that the
    tool uses to know how to format the code according to the kernel coding
    style. This gives us several advantages:

    * clang-format works out of the box with reasonable defaults;
    avoiding that everyone has to re-do the configuration.

    * Everyone agrees (eventually) on what is the most useful default
    configuration for most of the kernel.

    * If it becomes commonplace among kernel developers, clang-format
    may feel compelled to support us better. They already recognize
    the Linux kernel and its style in their documentation and in one
    of the style sub-options.

    Some of clang-format's features relevant for the kernel are:

    * Uses clang's tooling support behind the scenes to parse and rewrite
    the code. It is not based on ad-hoc regexps.

    * Supports reasonably well the Linux kernel coding style.

    * Fast enough to be used at the press of a key.

    * There are already integrations (either built-in or third-party)
    for many common editors used by kernel developers (e.g. vim,
    emacs, Sublime, Atom...) that allow you to format an entire file
    or, more usefully, just your selection.

    * Able to parse unified diffs -- you can, for instance, reformat
    only the lines changed by a git commit.

    * Able to reflow text comments as well.

    * Widely supported and used by hundreds of developers in highly
    complex projects and organizations (e.g. the LLVM project itself,
    Chromium, WebKit, Google, Mozilla...). Therefore, it will be
    supported for a long time.

    See more information about the tool at:

    https://clang.llvm.org/docs/ClangFormat.html
    https://clang.llvm.org/docs/ClangFormatStyleOptions.html

    Link: http://lkml.kernel.org/r/20180318171632.qfkemw3mwbcukth6@gmail.com
    Signed-off-by: Miguel Ojeda
    Cc: Randy Dunlap
    Cc: Andy Whitcroft
    Cc: Joe Perches
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Miguel Ojeda
     

07 Apr, 2018

3 commits


26 Mar, 2018

1 commit

  • The idea of using fixdep was inspired by Kconfig, but autoksyms
    belongs to a different group. So, I want to move those touched
    files under include/config/ksym/ to include/ksym/.

    The directory include/ksym/ can be removed by 'make clean' because
    it is meaningless for the external module building.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     

15 Feb, 2018

1 commit

  • when build kernel with default configure, files:

    generatenet/ipv4/netfilter/nf_nat_snmp_basic-asn1.c
    net/ipv4/netfilter/nf_nat_snmp_basic-asn1.h

    will be automatically generated by ASN.1 compiler, so
    No need to track them in git, it's better to ignore them.

    Signed-off-by: Zhu Lingshan
    Signed-off-by: Pablo Neira Ayuso

    Zhu Lingshan
     

12 Dec, 2017

1 commit

  • Following in footsteps of other targets like 'deb-pkg, 'rpm-pkg' and 'tar-pkg',
    this patch adds a 'snap-pkg' target for the creation of a Linux kernel snap
    package using the kbuild infrastructure.

    A snap, in its general form, is a self contained, sandboxed, universal package
    and it is intended to work across multiple distributions and/or devices. A snap
    package is distributed as a single compressed squashfs filesystem.

    A kernel snap is a snap package carrying the Linux kernel, kernel modules,
    accessory files (DTBs, System.map, etc) and a manifesto file. The purpose of a
    kernel snap is to carry the Linux kernel during the creation of a system image,
    eg. Ubuntu Core, and its subsequent upgrades.

    For more information on snap packages: https://snapcraft.io/docs/

    Signed-off-by: Paolo Pisati
    Signed-off-by: Masahiro Yamada

    Paolo Pisati
     

18 Nov, 2017

1 commit

  • …asahiroy/linux-kbuild

    Pull Kbuild misc updates from Masahiro Yamada:

    - Clean up and fix RPM package build

    - Fix a warning in DEB package build

    - Improve coccicheck script

    - Improve some semantic patches

    * tag 'kbuild-misc-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    docs: dev-tools: coccinelle: delete out of date wiki reference
    coccinelle: orplus: reorganize to improve performance
    coccinelle: use exists to improve efficiency
    builddeb: Pass the kernel:debarch substvar to dpkg-genchanges
    Coccinelle: use false positive annotation
    coccinelle: fix verbose message about .cocci file being run
    coccinelle: grep Options and Requires fields more precisely
    Coccinelle: make DEBUG_FILE option more useful
    coccinelle: api: detect identical chip data arrays
    coccinelle: Improve setup_timer.cocci matching
    Coccinelle: setup_timer: improve messages from setup_timer
    kbuild: rpm-pkg: do not force -jN in submake
    kbuild: rpm-pkg: keep spec file until make mrproper
    kbuild: rpm-pkg: fix jobserver unavailable warning
    kbuild: rpm-pkg: replace $RPM_BUILD_ROOT with %{buildroot}
    kbuild: rpm-pkg: fix build error when CONFIG_MODULES is disabled
    kbuild: rpm-pkg: refactor mkspec with here doc
    kbuild: rpm-pkg: clean up mkspec
    kbuild: rpm-pkg: install vmlinux.bz2 unconditionally
    kbuild: rpm-pkg: remove ppc64 specific image handling

    Linus Torvalds
     

14 Nov, 2017

1 commit

  • If build fails during (bin)rpm-pkg, the spec file is not cleaned by
    anyone until the next successful build of the package.

    We do not have to immediately delete the spec file in case somebody
    may want to take a look at it. Instead, make them ignored by git,
    and cleaned up by make mrproper.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

09 Nov, 2017

2 commits


25 Apr, 2017

1 commit


03 Aug, 2016

1 commit

  • Pull misc kbuild updates from Michal Marek:

    - coccicheck script improvements by Luis Rodriguez and Deepa Dinamani

    - new coccinelle patches by Yann Droneaud and Vaishali Thakkar

    - debian packaging fixes by Wilfried Klaebe, Henning Schild and Marcin
    Mielniczuk

    * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    Fix the Debian packaging script on systems with no codename
    builddeb: fix file permissions before packaging
    scripts/coccinelle: require coccinelle >= 1.0.4 on device_node_continue.cocci
    coccicheck: refer to Documentation/coccinelle.txt and wiki
    coccicheck: add support for requring a coccinelle version
    scripts: add Linux .cocciconfig for coccinelle
    coccicheck: replace --very-quiet with --quiet when debugging
    coccicheck: add support for DEBUG_FILE
    coccicheck: enable parmap support
    coccicheck: make SPFLAGS more useful
    coccicheck: move spatch binary check up
    builddeb: really include objtool binary in headers package
    coccinelle: catch krealloc() on devm_*() allocated memory
    coccinelle: recognize more devm_* memory allocation functions
    coccinelle: also catch kzfree() issues
    coccicheck: Allow for overriding spatch flags
    Coccinelle: noderef: Add new rules and correct the old rule

    Linus Torvalds
     

22 Jul, 2016

1 commit

  • Coccinelle supports reading .cocciconfig, the order of precedence for
    variables for .cocciconfig is as follows:

    o Your current user's home directory is processed first
    o Your directory from which spatch is called is processed next
    o The directory provided with the --dir option is processed last, if used

    Since coccicheck runs through make, it naturally runs from the kernel
    proper dir, as such the second rule above would be implied for picking up a
    .cocciconfig when using 'make coccicheck'.

    'make coccicheck' also supports using M= targets.If you do not supply
    any M= target, it is assumed you want to target the entire kernel.
    The kernel coccicheck script has:

    if [ "$KBUILD_EXTMOD" = "" ] ; then
    OPTIONS="--dir $srctree $COCCIINCLUDE"
    else
    OPTIONS="--dir $KBUILD_EXTMOD $COCCIINCLUDE"
    fi

    KBUILD_EXTMOD is set when an explicit target with M= is used. For both cases
    the spatch --dir argument is used, as such third rule applies when
    whether M= is used or not, and when M= is used the target directory can
    have its own .cocciconfig file. When M= is not passed as an argument to
    coccicheck the target directory is the same as the directory from where
    spatch was called.

    If not using the kernel's coccicheck target, keep the above precedence order
    logic of .cocciconfig reading. If using the kernel's coccicheck target,
    override any of the kernel's .coccicheck's settings using SPFLAGS.

    We help Coccinelle when used against Linux with a set of sensible defaults
    options for Linux with our own Linux .cocciconfig. This hints to coccinelle
    git can be used for 'git grep' queries over coccigrep. A timeout of 200
    seconds should suffice for now.

    The options picked up by coccinelle when reading a .cocciconfig do not appear
    as arguments to spatch processes running on your system, to confirm what
    options will be used by Coccinelle run:

    spatch --print-options-only

    You can override with your own preferred index option by using SPFLAGS.
    Coccinelle supports both glimpse and idutils. Glimpse had historically
    provided the best performance, however recent benchmarks reveal idutils
    is performing just as well. Due to some recent fixes however you however
    will need at least coccinelle >= 1.0.6 if using idutils.

    Coccinelle carries a script scripts/idutils_index.sh which creates the
    idutils database with as follows:

    mkid -i C --output .id-utils.index

    If using just "--use-idutils" coccinelle expects your idutils database to be
    on the top level of the kernel as a file named ".id-utils.index". If you do
    not use this you can symlink your database file to it, or you can specify the
    database file following the "--use-idutils" argument. Examples:

    make SPFLAGS=--use-idutils coccicheck

    This assumes you have $srctree/.id-utils.index, where $srctree is
    the top level of the kernel.

    make SPFLAGS="--use-idutils /full-path/to/ID" coccicheck

    Here you specify the full path of the idutils ID database. Using
    .cocciconfig is possible, however given the order of precedence followed
    by Coccinelle, and since the kernel now carries its own .cocciconfig,
    you will need to use SPFLAGS to use idutils if desired.

    v4:

    o Recommend upgrade for using idutils with coccinelle due to some
    recent fixes.

    o Refer to using --print-options-only for testing what options are
    picked up by .cocciconfig reading.

    o Expand commit log considerably explaining *why* .cocconfig from
    two precedence rules are used when using coccicheck, and how to
    properly override these if needed.

    o Expand Documentation/coccinelle.txt

    v3: Expand commit log a bit more

    Signed-off-by: Luis R. Rodriguez
    Acked-by: Julia Lawall
    Signed-off-by: Michal Marek

    Luis R. Rodriguez
     

08 Jun, 2016

1 commit

  • This patch allows to build the whole kernel with GCC plugins. It was ported from
    grsecurity/PaX. The infrastructure supports building out-of-tree modules and
    building in a separate directory. Cross-compilation is supported too.
    Currently the x86, arm, arm64 and uml architectures enable plugins.

    The directory of the gcc plugins is scripts/gcc-plugins. You can use a file or a directory
    there. The plugins compile with these options:
    * -fno-rtti: gcc is compiled with this option so the plugins must use it too
    * -fno-exceptions: this is inherited from gcc too
    * -fasynchronous-unwind-tables: this is inherited from gcc too
    * -ggdb: it is useful for debugging a plugin (better backtrace on internal
    errors)
    * -Wno-narrowing: to suppress warnings from gcc headers (ipa-utils.h)
    * -Wno-unused-variable: to suppress warnings from gcc headers (gcc_version
    variable, plugin-version.h)

    The infrastructure introduces a new Makefile target called gcc-plugins. It
    supports all gcc versions from 4.5 to 6.0. The scripts/gcc-plugin.sh script
    chooses the proper host compiler (gcc-4.7 can be built by either gcc or g++).
    This script also checks the availability of the included headers in
    scripts/gcc-plugins/gcc-common.h.

    The gcc-common.h header contains frequently included headers for GCC plugins
    and it has a compatibility layer for the supported gcc versions.

    The gcc-generate-*-pass.h headers automatically generate the registration
    structures for GIMPLE, SIMPLE_IPA, IPA and RTL passes.

    Note that 'make clean' keeps the *.so files (only the distclean or mrproper
    targets clean all) because they are needed for out-of-tree modules.

    Based on work created by the PaX Team.

    Signed-off-by: Emese Revfy
    Acked-by: Kees Cook
    Signed-off-by: Michal Marek

    Emese Revfy
     

28 Apr, 2016

1 commit

  • Git files are the files that we don't want to ignore even if
    they are dot-files. It must be "even if" but it says "even it".

    Signed-off-by: Kyeongmin Cho
    Signed-off-by: Jiri Kosina

    Kyeongmin Cho
     

09 Sep, 2015

1 commit

  • 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
    ...

    Linus Torvalds
     

28 Aug, 2015

1 commit


07 Aug, 2015

1 commit

  • The current rule for generating signing_key.priv and signing_key.x509 is
    a classic example of a bad rule which has a tendency to break parallel
    make. When invoked to create *either* target, it generates the other
    target as a side-effect that make didn't predict.

    So let's switch to using a single file signing_key.pem which contains
    both key and certificate. That matches what we do in the case of an
    external key specified by CONFIG_MODULE_SIG_KEY anyway, so it's also
    slightly cleaner.

    Signed-off-by: David Woodhouse
    Signed-off-by: David Howells

    David Woodhouse
     

15 Jun, 2015

2 commits