[git commit] depmod.pl: updates and fixes galore

Mike Frysinger vapier at gentoo.org
Wed May 27 19:53:40 UTC 2009


commit: http://git.busybox.net/busybox/commit/?id=77508d70bfa9c50477479af176ff41e9443d4f67
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/1_14_stable


The helper script needs updating to match latest busybox modprobe behavior
in that all dependencies need to be listed, not just the immediate ones.
Along the way, fix symbol prefixed ports, optimize the output, and add
some more depmod compatible options.

Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
 examples/depmod.pl |   65 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/examples/depmod.pl b/examples/depmod.pl
index c356d27..6b47bad 100755
--- a/examples/depmod.pl
+++ b/examples/depmod.pl
@@ -13,7 +13,7 @@
 
 # This program is free software; you can redistribute it and/or modify it
 # under the same terms as Perl itself.
-use Getopt::Long;
+use Getopt::Long qw(:config no_auto_abbrev no_ignore_case);
 use File::Find;
 use strict;
 
@@ -23,6 +23,9 @@ my $basedir="";
 my $kernel="";
 my $kernelsyms="";
 my $symprefix="";
+my $all=0;
+my $quick=0;
+my $errsyms=0;
 my $stdout=0;
 my $verbose=0;
 my $help=0;
@@ -44,6 +47,8 @@ $0 -b basedir { -k <vmlinux> | -F <System.map> } [options]...
    -n --stdout        : Write to stdout instead of <basedir>/modules.dep
    -v --verbose       : Print out lots of debugging stuff
    -P --symbol-prefix : Symbol prefix
+   -a --all           : Probe all modules (default/only thing supported)
+   -e --errsyms       : Report any symbols not supplied by modules/kernel
 TXT
 
 # get command-line options
@@ -55,14 +60,23 @@ GetOptions(
 	"stdout|n"          => \$stdout,
 	"verbose|v"         => \$verbose,
 	"symbol-prefix|P=s" => \$symprefix,
+	"all|a"             => \$all,
+	# unsupported options
+	"quick|A"           => \$quick,
+	# ignored options (for historical usage)
+	"quiet|q",
+	"root|r",
+	"unresolved-error|u"
 );
 
 die $usage if $help;
 die $usage unless $basedir && ( $kernel || $kernelsyms );
 die "can't use both -k and -F\n\n$usage" if $kernel && $kernelsyms;
+die "sorry, -A/--quick is not supported" if $quick;
+die "--errsyms requires --kernelsyms" if $errsyms && !$kernelsyms;
 
 # Strip any trailing or multiple slashes from basedir
-$basedir =~ s-(/)\1+-/-g;
+$basedir =~ s-/+$--g;
 
 # The base directory should contain /lib/modules somewhere
 if($basedir !~ m-/lib/modules-) {
@@ -137,6 +151,35 @@ foreach my $module (keys %$dep) {
     }
 }
 
+# build a complete dependency list for each module and make sure it
+# is kept in order proper order
+my $mod2 = {};
+sub maybe_unshift
+{
+	my ($array, $ele) = @_;
+	# chop off the leading path /lib/modules/<kver>/ as modprobe
+	# will handle relative paths just fine
+	$ele =~ s:^/lib/modules/[^/]*/::;
+	foreach (@{$array}) {
+		if ($_ eq $ele) {
+			return;
+		}
+	}
+	unshift (@{$array}, $ele);
+}
+foreach my $module (keys %$mod) {
+    warn "filling out module: $module\n" if $verbose;
+    @{$mod2->{$module}} = ();
+    foreach my $md (keys %{$mod->{$module}}) {
+        foreach my $md2 (keys %{$mod->{$md}}) {
+            warn "outputting $md2\n" if $verbose;
+            maybe_unshift (\@{$mod2->{$module}}, $md2);
+        }
+        warn "outputting $md\n" if $verbose;
+        maybe_unshift (\@{$mod2->{$module}}, $md);
+    }
+}
+
 # figure out where the output should go
 if ($stdout == 0) {
     open(STDOUT, ">$basedir/modules.dep")
@@ -151,8 +194,11 @@ foreach my $module ( keys %$mod ) {
 	    print join(" \\\n\t", at sorted);
 	    print "\n\n";
     } else {
-	    print "$module: ";
-	    my @sorted = sort bydep keys %{$mod->{$module}};
+	    my $shortmod = $module;
+	    $shortmod =~ s:^/lib/modules/[^/]*/::;
+	    print "$shortmod:";
+	    my @sorted = @{$mod2->{$module}};
+	    printf " " if @sorted;
 	    print join(" ", at sorted);
 	    print "\n";
     }
@@ -163,15 +209,16 @@ sub build_ref_tables
 {
     my ($name, $sym_ar, $exp, $dep) = @_;
 
-	my $ksymtab = grep m/ __ksymtab/, @$sym_ar;
+	my $ksymtab = grep m/ ${symprefix}__ksymtab/, @$sym_ar;
 
     # gather the exported symbols
 	if($ksymtab){
         # explicitly exported
         foreach ( @$sym_ar ) {
-            / __ksymtab_(.*)$/ and do {
-                warn "sym = $1\n" if $verbose;
-                $exp->{$1} = $name;
+            / ${symprefix}__ksymtab_(.*)$/ and do {
+                my $sym = ${symprefix} . $1;
+                warn "sym = $sym\n" if $verbose;
+                $exp->{$sym} = $name;
             };
         }
 	} else {
@@ -189,7 +236,7 @@ sub build_ref_tables
 
     # gather the unresolved symbols
     foreach ( @$sym_ar ) {
-        !/ __this_module/ && / U (.*)$/ and do {
+        !/ ${symprefix}__this_module/ && / U (.*)$/ and do {
             warn "und = $1\n" if $verbose;
             push @{$dep->{$name}}, $1;
         };
-- 
1.6.0.6


More information about the busybox-cvs mailing list