diff options
Diffstat (limited to 'dh_dwz')
-rwxr-xr-x | dh_dwz | 38 |
1 files changed, 29 insertions, 9 deletions
@@ -30,9 +30,17 @@ running L<dwz(1)> on all the ELF binaries in the package. =item B<--dwz-multifile>, B<--no-dwz-multifile> Whether L<dwz(1)> should generate a I<multifile> from the ELF binaries -in the same package (it does by default). When enabled, if a package -ships at least 2 ELF binaries, B<dh_dwz> will instruct L<dwz(1)> to -generate a multifile for the package. +in the same package. When enabled, if a package ships at least 2 ELF +binaries, B<dh_dwz> will instruct L<dwz(1)> to generate a multifile +for the package. + +By default, B<dh_dwz> will attempt to create a multifile but will +continue without if L<dwz(1)> does create one (but succeeds anyway). +This commonly happens when the debug files do not contain debug +symbols (e.g. a missing -g to the compiler) or when the debug +symbols are compressed (see Debian bug #931891). If B<--dwz-multifile> +is passed, then B<dh_dwz> will abort with an error if L<dwz(1)> does +not create a multifile. Note this options may not work if a package contains more ELF binaries than can fit on a single command line. If this becomes a problem, @@ -41,6 +49,10 @@ please pass B<--no-dwz-multifile> to work around the issue. The generated multifile will be compressed with B<objcopy --compress-debug-sections>. +Note for B<udeb> packages: B<dh_dwz> will never generate multifiles +for B<udeb> packages. It will still use B<dwz> to reduce the +file size of debug files if it finds any. + =item B<-X>I<item>, B<--exclude=>I<item> Exclude files that contain I<item> anywhere in their filename from being @@ -68,7 +80,7 @@ test"-cycles) rather than optimizing for size. =cut -my $create_multifile = 1; +my $create_multifile = 'auto'; init(options => { 'dwz-multifile!' => \$create_multifile, @@ -112,18 +124,26 @@ for my $package (@{$dh{DOPACKAGES}}) { # Consistent order; @elf_files = sort(@elf_files); my ($unique_files, $hardlinks) = find_hardlinks(@elf_files); - my @dwz_options; - if ($create_multifile and @{$unique_files} > 1) { + if ($create_multifile and @{$unique_files} > 1 and not is_udeb($package)) { my $objcopy = cross_command($package, 'objcopy'); my $ma_dir = dpkg_architecture_value('DEB_HOST_MULTIARCH'); my $dwz_dir = "usr/lib/debug/.dwz/${ma_dir}"; my $m = "${dwz_dir}/${package}.debug"; my @dwz_options = ("-m${tmp}/${m}", "-M/${m}"); install_dir("${tmp}/${dwz_dir}"); - doit('dwz', '-q', @dwz_options, @{$dh{U_PARAMS}}, '--', @{$unique_files}); - doit($objcopy, '--compress-debug-sections', "${tmp}/${m}"); + doit('dwz', @dwz_options, @{$dh{U_PARAMS}}, '--', @{$unique_files}); + if ( -f "${tmp}/${m}") { + doit($objcopy, '--compress-debug-sections', "${tmp}/${m}"); + } else { + error("dwz failed to create a multifile as requested") if $create_multifile ne 'auto'; + warning("No dwz multifile created, but not explicitly requested either so ignoring it."); + warning("Common issues include no debug information at all (missing -g) and"); + warning("compressed debug information (#931891)."); + # Clean up after ourselves to avoid leaving empty directories in packages + doit('rmdir', '-p', '--ignore-fail-on-non-empty', "${tmp}/usr/lib/debug/.dwz/${ma_dir}"); + } } else { - xargs($unique_files, 'dwz', '-q', @{$dh{U_PARAMS}}, '--'); + xargs($unique_files, 'dwz', @{$dh{U_PARAMS}}, '--'); } |