Message ID | 20220111235840.81471-3-saul.wold@windriver.com |
---|---|
State | Accepted, archived |
Commit | e09a8fa931fe617afc05bd5e00dca5dd3fe386e8 |
Headers | show |
Series | Extend create-spdx to build kernel spdx info | expand |
On Tue, Jan 11, 2022 at 6:59 PM Saul Wold <saul.wold@windriver.com> wrote: > > Extend runstrip() to accept additional argument to enable > sharing it with the kernel do_strip() to that > KERNEL_IMAGE_STRIP_EXTRA_SECTIONS can be passed. > > Since is_elf() understands kernel modules there is no need to keep a > seperate list for kernmodules or hardcode the values to runstrip. > > Signed-off-by: Saul Wold <saul.wold@windriver.com> > --- > meta/classes/package.bbclass | 21 +++++++-------------- > meta/lib/oe/package.py | 7 +++++-- > 2 files changed, 12 insertions(+), 16 deletions(-) > > diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass > index 09cd376f4af..794996e6d6d 100644 > --- a/meta/classes/package.bbclass > +++ b/meta/classes/package.bbclass > @@ -390,10 +390,6 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, > dvar = d.getVar('PKGD') > objcopy = d.getVar("OBJCOPY") > > - # We ignore kernel modules, we don't generate debug info files. > - if file.find("/lib/modules/") != -1 and file.endswith(".ko"): > - return (file, sources) > - > newmode = None > if not os.access(file, os.W_OK) or os.access(file, os.R_OK): > origmode = os.stat(file)[stat.ST_MODE] > @@ -1122,7 +1118,6 @@ python split_and_strip_files () { > # > elffiles = {} > symlinks = {} > - kernmods = [] > staticlibs = [] > inodes = {} > libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir")) > @@ -1145,9 +1140,6 @@ python split_and_strip_files () { > if file in skipfiles: > continue > > - if file.endswith(".ko") and file.find("/lib/modules/") != -1: > - kernmods.append(file) > - continue > if oe.package.is_static_lib(file): > staticlibs.append(file) > continue > @@ -1164,8 +1156,11 @@ python split_and_strip_files () { > if not s: > continue > # Check its an executable > - if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) or (s[stat.ST_MODE] & stat.S_IXOTH) \ > - or ((file.startswith(libdir) or file.startswith(baselibdir)) and (".so" in f or ".node" in f)): > + if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) \ > + or (s[stat.ST_MODE] & stat.S_IXOTH) \ > + or ((file.startswith(libdir) or file.startswith(baselibdir)) \ > + and (".so" in f or ".node" in f)) \ > + or (f.startswith('vmlinux') or ".ko" in f): > > if cpath.islink(file): > checkelflinks[file] = ltarget > @@ -1311,12 +1306,10 @@ python split_and_strip_files () { > for file in elffiles: > elf_file = int(elffiles[file]) > #bb.note("Strip %s" % file) > - sfiles.append((file, elf_file, strip)) > - for f in kernmods: > - sfiles.append((f, 16, strip)) > + sfiles.append((file, elf_file, strip, '')) > if (d.getVar('PACKAGE_STRIP_STATIC') == '1' or d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'): > for f in staticlibs: > - sfiles.append((f, 16, strip)) > + sfiles.append((f, 16, strip, '')) > > oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d) > > diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py > index dd700cbb0c9..7842a614e9f 100644 > --- a/meta/lib/oe/package.py > +++ b/meta/lib/oe/package.py > @@ -16,7 +16,7 @@ def runstrip(arg): > # 8 - shared library > # 16 - kernel module > > - (file, elftype, strip) = arg > + (file, elftype, strip, extra_strip_sections) = arg > > newmode = None > if not os.access(file, os.W_OK) or os.access(file, os.R_OK): > @@ -40,6 +40,9 @@ def runstrip(arg): > # shared or executable: > elif elftype & 8 or elftype & 4: > stripcmd.extend(["--remove-section=.comment", "--remove-section=.note"]) > + if file.find("boot/vmlinux") != -1 and extra_strip_sections != '': > + for section in extra_strip_sections.split(): > + stripcmd.extend(["--remove-section=" + section]) One thought that came to mind when reading this, is does that really need to be restricted to boot/vmlinux ? The code would be simplified by just testing for 'if extra_strip_sections:' .. and then the sections are only passed for the kernel components that need it. The more broadly available functionality obviously isn't used (or maybe ever needed), but it does simplify things. But I'm only looking at the diff, so maybe I'm missing a nuance. > > stripcmd.append(file) > bb.debug(1, "runstrip: %s" % stripcmd) > @@ -172,7 +175,7 @@ def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripp > sfiles = [] > for file in elffiles: > elf_file = int(elffiles[file]) > - sfiles.append((file, elf_file, strip_cmd)) > + sfiles.append((file, elf_file, strip_cmd, '')) Rather than needing to add the '' to all of the appends, isn't there a way that the oe util runstrip could just check the length of args and assign a default if there isn't a 4th argument ? That routine is already assigning specifically to variables to checking the length wouldn't be adding any specific knowledge to a generic routine. Bruce > > oe.utils.multiprocess_launch(runstrip, sfiles, d) > > -- > 2.31.1 >
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 09cd376f4af..794996e6d6d 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -390,10 +390,6 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, dvar = d.getVar('PKGD') objcopy = d.getVar("OBJCOPY") - # We ignore kernel modules, we don't generate debug info files. - if file.find("/lib/modules/") != -1 and file.endswith(".ko"): - return (file, sources) - newmode = None if not os.access(file, os.W_OK) or os.access(file, os.R_OK): origmode = os.stat(file)[stat.ST_MODE] @@ -1122,7 +1118,6 @@ python split_and_strip_files () { # elffiles = {} symlinks = {} - kernmods = [] staticlibs = [] inodes = {} libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir")) @@ -1145,9 +1140,6 @@ python split_and_strip_files () { if file in skipfiles: continue - if file.endswith(".ko") and file.find("/lib/modules/") != -1: - kernmods.append(file) - continue if oe.package.is_static_lib(file): staticlibs.append(file) continue @@ -1164,8 +1156,11 @@ python split_and_strip_files () { if not s: continue # Check its an executable - if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) or (s[stat.ST_MODE] & stat.S_IXOTH) \ - or ((file.startswith(libdir) or file.startswith(baselibdir)) and (".so" in f or ".node" in f)): + if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) \ + or (s[stat.ST_MODE] & stat.S_IXOTH) \ + or ((file.startswith(libdir) or file.startswith(baselibdir)) \ + and (".so" in f or ".node" in f)) \ + or (f.startswith('vmlinux') or ".ko" in f): if cpath.islink(file): checkelflinks[file] = ltarget @@ -1311,12 +1306,10 @@ python split_and_strip_files () { for file in elffiles: elf_file = int(elffiles[file]) #bb.note("Strip %s" % file) - sfiles.append((file, elf_file, strip)) - for f in kernmods: - sfiles.append((f, 16, strip)) + sfiles.append((file, elf_file, strip, '')) if (d.getVar('PACKAGE_STRIP_STATIC') == '1' or d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'): for f in staticlibs: - sfiles.append((f, 16, strip)) + sfiles.append((f, 16, strip, '')) oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d) diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index dd700cbb0c9..7842a614e9f 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py @@ -16,7 +16,7 @@ def runstrip(arg): # 8 - shared library # 16 - kernel module - (file, elftype, strip) = arg + (file, elftype, strip, extra_strip_sections) = arg newmode = None if not os.access(file, os.W_OK) or os.access(file, os.R_OK): @@ -40,6 +40,9 @@ def runstrip(arg): # shared or executable: elif elftype & 8 or elftype & 4: stripcmd.extend(["--remove-section=.comment", "--remove-section=.note"]) + if file.find("boot/vmlinux") != -1 and extra_strip_sections != '': + for section in extra_strip_sections.split(): + stripcmd.extend(["--remove-section=" + section]) stripcmd.append(file) bb.debug(1, "runstrip: %s" % stripcmd) @@ -172,7 +175,7 @@ def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripp sfiles = [] for file in elffiles: elf_file = int(elffiles[file]) - sfiles.append((file, elf_file, strip_cmd)) + sfiles.append((file, elf_file, strip_cmd, '')) oe.utils.multiprocess_launch(runstrip, sfiles, d)
Extend runstrip() to accept additional argument to enable sharing it with the kernel do_strip() to that KERNEL_IMAGE_STRIP_EXTRA_SECTIONS can be passed. Since is_elf() understands kernel modules there is no need to keep a seperate list for kernmodules or hardcode the values to runstrip. Signed-off-by: Saul Wold <saul.wold@windriver.com> --- meta/classes/package.bbclass | 21 +++++++-------------- meta/lib/oe/package.py | 7 +++++-- 2 files changed, 12 insertions(+), 16 deletions(-)