#!/usr/bin/perl
#can 102136 6 - Live 0xc8999000
#snd_ens1371 26468 1 - Live 0xc8991000
#snd_pcm_oss 54436 1 - Live 0xc8982000
#snd_mixer_oss 19712 1 snd_pcm_oss, Live 0xc89ba000
#snd_via82xx 27040 0 - Live 0xc8951000
#snd_pcm 108768 3 snd_ens1371,snd_pcm_oss,snd_via82xx, Live 0xc8966000


  $modprocfile="/proc/modules";
  $gdbscript=".gdbmodulesyms";
  $moduledep = `uname -r`;
  chop($moduledep);
  $moduledep = "/lib/modules/$moduledep/modules.dep";

  print "depmod $moduledep\n" ;

  open (KDEP, "$moduledep");
  do{
    $line=<KDEP>;
    if ($line=~m/^([^ ]+.ko):.*$/) {
      ($modpath)=$line=~m/^([^ ]+.ko):.*$/;
      ($modfile)=$modpath=~m/^.*\/([^\/]+)$/;
      $modname = $modfile;
      $modname =~ s/-/_/g;
      $moddeps{$modname} = ($modpath) ;
      #print $modname;
    }
  }while ($line ne "");
  #print "$moddeps{'iptable_mangle.ko'}\n" ;
  
  close (KDEP);

  $modulename="";
  $modulefile="";
  $modulesecs="";

  open (KMODPROC, "$modprocfile");
  open (GDBSCRIPT, ">$gdbscript");

  do{
    $line=<KMODPROC>;
    if ($line=~m/^([0-9A-Za-z_]+) ([0-9]+) ([0-9]+) ([^ ]+) ([^ ]+) 0x([0-9A-Fa-f_]+)$/) {
      &LoadSyms;
      ($modname,$modsize,$modusecnt,$moduse,$modlive,$modaddr) = $line =~ /^([0-9A-Za-z_]+) ([0-9]+) ([0-9]+) ([^ ]+) ([^ ]+) 0x([0-9A-Fa-f_]+)$/;
      $modulename = $modname;
      $moduletext = "0x$modaddr";
      $modulefile = "$modname.ko";
      $f = $moddeps{$modulefile};
      if($f ne ""){
        $modulefile = $f;
      }
      print "Match module $modulename $modaddr\n";
    }
  }while($line ne "");

  &LoadSyms;

  close KMODPROC;
  close GDBSCRIPT;

  exit 0;

# add-symbol-file FILENAME -sSECTION ADDRESS ...
sub LoadSyms() {
  if ($modulename eq "") { return 1;}
  
  print GDBSCRIPT "add-symbol-file $modulefile $moduletext $modulesecs\n";
  $modulename="";
  $modulefile="";
  $modulesecs="";
  return 1;
}

