[lkml]   [2020]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH] kbuild: remove duplicate dependencies from .mod files
    On Wed, Feb 12, 2020 at 5:23 AM Masahiro Yamada <> wrote:
    > In which case are undefined symbols duplicated?

    When a module consists of multiple compilation units, which depend on
    the same external symbols. In Android, we ran into this when adding
    hardening features that all depend on an external error handler
    function with a rather long name. When CONFIG_TRIM_UNUSED_SYMS was
    later enabled, we ran into this:

    $ llvm-nm drivers/gpu/drm/nouveau/nouveau.o | sed -n 's/^ *U //p' |
    xargs echo | wc
    2 9136 168660

    xargs defaults to 128kiB limit for command line size, so the output
    was split into two lines, which means some of the dependencies were
    dropped and we ran into modpost errors. One method of fixing this is
    to increase the limit:

    $ llvm-nm drivers/gpu/drm/nouveau/nouveau.o | sed -n 's/^ *U //p' |
    xargs -s 262144 echo | wc
    1 9136 168660

    But it seems removing duplicates is a better solution as the length of
    the dependency list is reduced significantly:

    $ llvm-nm drivers/gpu/drm/nouveau/nouveau.o | sed -n 's/^ *U //p' |
    sort -u | xargs echo | wc
    1 2716 50461

    > Do you have a .config to reproduce it?

    I can currently reproduce this on an Android kernel that has
    Control-Flow Integrity (CFI) enabled. While this feature is not
    upstreamed yet, there's nothing that would prevent us from hitting the
    command line limit with sufficiently large modules otherwise as well.


     \ /
      Last update: 2020-02-12 18:14    [W:3.280 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site