Skip to content
Snippets Groups Projects
Commit a1db0104 authored by cvs2svn's avatar cvs2svn
Browse files

This commit was manufactured by cvs2svn to create branch 'b1_6'.

parents 1b1b663e cd9b18f3
No related branches found
No related tags found
No related merge requests found
# Doxyfile 1.5.3
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Lustre
PROJECT_NUMBER = 1.10
OUTPUT_DIRECTORY = apidoc.api
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = lustre/ \
lnet/ \
libcfs/
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \
*.c
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXPORT_SYMBOL*
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = YES
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER = build/doxygen-header.html
HTML_FOOTER = build/doxygen-footer.html
HTML_STYLESHEET = build/doxygen-stylesheet.css
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = YES
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = YES
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = YES
# Doxyfile 1.5.3
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Lustre
PROJECT_NUMBER = 1.10
OUTPUT_DIRECTORY = apidoc.ref
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class " \
"The $name widget " \
"The $name file " \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = YES
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text "
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = lustre/ \
lnet/ \
libcfs/
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \
*.c
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXPORT_SYMBOL*
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER = build/doxygen-header.html
HTML_FOOTER = build/doxygen-footer.html
HTML_STYLESHEET = build/doxygen-stylesheet.css
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = YES
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = NO
GROUP_GRAPHS = NO
UML_LOOK = YES
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = NO
INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = NO
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = YES
#! /usr/bin/perl
# kabi - Linux Kernel Application Binary Interface manager
#
# Copyright 2008 Sun Microsystems, Inc. All rights reserved
# Use is subject to license terms.
#
# Gordon Matzigkeit <gord@clusterfs.com>, 2005-10-21
use warnings;
use strict;
my $VERSION = '0.2';
my $CC = $ENV{'CC'} || 'gcc';
my $LINUX = '/usr/src/linux';
my $MODE;
my $OUTPUT;
my @ARGS;
my $VERBOSE = 0;
my $progname = $0;
$progname =~ s/^.*\///;
my $modename = $progname;
sub usage
{
my ($status) = @_;
if ($status) {
print STDERR "Try \`$0 --help' for more information\n";
} else {
print <<EOF;
Usage: [CC=COMPILER] $0 [OPTION]... MODE ARGS...
Manage binary compatibility between a Linux kernel and kernel modules.
The CC environment variable specifies the compiler used to build the
kernel and modules.
--help display this message and exit
-o, --output=KABI specify the name of the KABI file created by the
\`module\' mode [default=strip .ko and add .kabi]
-v, --verbose give reasons for rejecting KABI matches
--version print version information
--with-linux=DIR set the path to the kernel sources
MODE and ARGS can be one of the following:
archive DIR KMOD install a KABI and kernel module in a unique place in DIR
match FILE... print a list of KABI files which are compatible with
the specified kernel and any specified kernel modules
module KMOD generate a KABI file for the specified kernel module
Written by Gordon Matzigkeit <gord\@clusterfs.com> for Sun Microsystems, Inc.
EOF
}
exit $status;
}
my @args = @ARGV;
while ($#args >= 0) {
if ($args[0] =~ /^--with-l(i(n(u(x)?)?)?)?=(.*)/) {
$LINUX = $5;
} elsif ($args[0] =~ /^--with-l(i(n(u(x)?)?)?)?$/) {
shift @args;
$LINUX = $args[0];
} elsif ($args[0] =~ /^--h(e(l(p)?)?)?$/) {
usage(0);
} elsif ($args[0] =~ /^--vers(i(o(n)?)?)?$/) {
print "KABI $VERSION\n";
exit 0;
} elsif ($args[0] eq '-v' || $args[0] =~ /^--verb(o(s(e)?)?)?$/) {
$VERBOSE = 1;
} elsif ($args[0] =~ /^-/) {
print STDERR "$progname: unrecognized option \`$args[0]'\n";
usage(1);
} elsif (!defined $MODE) {
$MODE = $args[0];
} else {
push @ARGS, $args[0];
}
shift @args;
}
if (!defined $MODE) {
print STDERR "$progname: you must specify a MODE\n";
usage(1);
}
$modename .= ": $MODE";
if ($MODE eq 'archive') {
if ($#ARGS != 1) {
print STDERR "$modename: you must specify a DIR and KMOD\n";
usage(1);
}
my $ARCHIVE = $ARGS[0];
my $KMOD = $ARGS[1];
my $KABI = $KMOD;
$KABI =~ s/\.k?o$//;
$KABI .= '.kabi';
open(MD5SUM, "md5sum $KABI|") or
die "$modename: cannot execute \`md5sum': $!\n";
my $hash = <MD5SUM>;
close(MD5SUM);
$hash =~ s/\s+.*//s;
my $TAG = '';
if (-d 'CVS') {
open(TAG, '<CVS/Tag') or
die "$modename: cannot read \`CVS/Tag': $!\n";
$TAG = <TAG>;
close(TAG);
chomp $TAG;
$TAG = "/$TAG";
}
my ($dir, @sh_c, @cp);
if ($ARCHIVE =~ /^([^:][^:]+):(.*)$/) {
$dir = $2;
@sh_c = ('ssh', '-o', 'BatchMode=yes', $1);
@cp = ('scp', '-B');
} else {
$dir = $ARCHIVE;
@sh_c = ('sh', '-c');
@cp = ('cp');
}
system(@sh_c, "test -d $dir");
if ($? >> 8 != 0) {
print STDERR "$modename: warning: \`$dir' is not reachable or does not exist\n";
exit 0;
}
print "archiving $KMOD in $ARCHIVE$TAG/$KMOD/$hash\n"
if $VERBOSE;
foreach my $d ("$dir$TAG", "$dir$TAG/$KMOD", "$dir$TAG/$KMOD/$hash") {
system(@sh_c, "test -d $d || mkdir $d");
if ($? >> 8 != 0) {
exit $? >> 8;
}
}
system(@cp, $KMOD, $KABI, "$ARCHIVE$TAG/$KMOD/$hash");
exit $? >> 8;
} elsif ($MODE eq 'module') {
if ($#ARGS != 0) {
print STDERR "$modename: you must specify exactly one KMOD\n";
usage(1);
}
my $KMOD = $ARGS[0];
if (!defined $OUTPUT) {
$OUTPUT = $KMOD;
$OUTPUT =~ s/\.k?o$//;
$OUTPUT .= '.kabi';
}
print "create $OUTPUT\n" if $VERBOSE;
open(OUT, ">$OUTPUT") or
die "$modename: cannot create \`$OUTPUT': $!\n";
my $outname = $OUTPUT;
$outname =~ s/^.*\///;
print OUT <<EOF;
# $outname - Kernel module ABI descriptor file
# DO NOT EDIT - Automatically generated by $progname $VERSION
EOF
# Get the kernel version.
print OUT "kver " . kernel_version() . "\n";
# Gather the undefined symbols with version numbers from the
# kernel module.
my %vers;
my @undefs;
# Gather the version numbers, if any.
my $modfile = $KMOD;
if ($modfile =~ s/\.ko$/.mod.c/) {
open(MOD, "<$modfile") or
die "$modename: cannot read \`$modfile': $!\n";
my $versions = 0;
while ($_ = <MOD>) {
if (/\"__versions\"/) {
$versions = 1;
} elsif ($versions) {
if (/^\s*\{\s*(0x[0-9a-f]+)\s*,\s*\"([^\"]*)\"\s*\}\s*,\s*$/) {
$vers{$2} = $1;
push(@undefs, $2);
} elsif (/^\s*\}\s*;\s*$/) {
$versions = 0;
}
}
}
close(MOD);
} else {
open(NM, "nm $KMOD |") or
die "$modename: cannot execute \`nm $KMOD': $!\n";
while ($_ = <NM>) {
if (/^\s*U\s*(.*\S)\s*$/) {
push @undefs, $1;
}
}
close(NM);
}
foreach my $undef (sort @undefs)
{
print OUT "usym $undef";
if (defined $vers{$undef}) {
print OUT " ", $vers{$undef};
}
print OUT "\n";
}
close(OUT) or
die "$modename: cannot write \`$OUTPUT': $!\n";
} elsif ($MODE eq 'match') {
my @KABIS;
my @KMODS;
my @todo = @ARGS;
while ($#todo >= 0) {
my $t = shift @todo;
if ($t =~ /\.kabi$/) {
push @KABIS, $t;
} elsif (-d $t) {
# Add all the contents of the directory to our todo list.
opendir(DIR, $t);
while (my $ent = readdir(DIR)) {
if ($ent =~ /^\./) {
# Skip dotfiles.
} elsif (-d "$t/$ent") {
# Recurse into subdirectories.
unshift @todo, "$t/$ent";
} elsif ($ent =~ /\.k?o$/) {
# Add kernel modules.
unshift @todo, "$t/$ent";
}
}
closedir(DIR);
} else {
# It's an explicit kernel module.
push @KMODS, $t;
}
}
if ($#KABIS < 0) {
print STDERR "$modename: you must specify at least one KABI\n";
usage(1);
}
my %dsyms;
if (-f "$LINUX/Module.symvers") {
# Look up the version numbers in Module.symvers.
open(VERS, "<$LINUX/Module.symvers") or
die "$modename: cannot read \`$LINUX/Module.symvers': $!\n";
while ($_ = <VERS>) {
if (/^(0x[0-9a-f]+)\s+(\S+)/) {
$dsyms{$2} = hex($1);
}
}
close(VERS);
} else {
# Read in all the non-versioned symbols defined by this kernel.
open(MAP, "<$LINUX/System.map") or
die "$modename: cannot read \`$LINUX/System.map': $!\n";
while ($_ = <MAP>) {
if (/^[0-9a-fA-F]*\s+[ABCDGIRSTW]+\s*(.*\S)\s*$/) {
$dsyms{$1} = 0;
}
}
close(MAP);
}
# Find the symbols for the installed modules, too.
foreach my $mod (@KMODS) {
open(NM, "nm $mod |") or
die "$modename: cannot execute \`nm $mod': $!\n";
while ($_ = <NM>) {
if (/^[0-9a-fA-F]*\s+[ABCDGIRSTW]+\s*(.*\S)\s*$/) {
$dsyms{$1} = 0;
}
}
close(NM);
}
# Also get the kernel version.
my $kver = kernel_version();
# Read each kabi file and print out the ones that are plausible
# matches.
foreach my $kabi (@KABIS) {
open(KABI, "<$kabi") or
die "$modename: cannot read \`$kabi': $!\n";
my $possible = 1;
while ($possible && ($_ = <KABI>)) {
if (/^\s*#/) {
# Skip comments.
} elsif (/^\s*kver\s+(.*\S)\s*$/) {
my $modkver = $1;
if ($modkver ne $kver) {
print STDERR "$kabi:$.: module version \`$modkver' differs from \`$kver'\n"
if $VERBOSE;
$possible = 0;
}
} elsif (/^\s*usym\s+(\S+)\s*(\S+)?\s*$/) {
my ($modsym, $symver) = ($1, hex($2));
if (!defined $dsyms{$modsym}) {
print STDERR "$kabi:$.: module symbol \`$modsym' is not defined\n"
if $VERBOSE;
$possible = 0;
} elsif (defined $symver && $dsyms{$modsym} != 0 && $dsyms{$modsym} != $symver) {
printf STDERR "$kabi:$.: module symbol \`$modsym' is version 0x%x, not 0x%x\n", $dsyms{$modsym}, $symver
if $VERBOSE;
$possible = 0;
}
} elsif (/^\s*(\S+)/) {
print STDERR "$kabi:$.: unrecognized descriptor line \`$1'\n";
}
}
close(KABI);
if ($possible) {
# We got a match.
print "$kabi\n";
}
}
} else {
print STDERR "$progname: unrecognized mode \`$MODE'\n";
usage(1);
}
# Read the kernel version from its built source tree.
sub kernel_version
{
my $verfile = "$LINUX/include/linux/version.h";
open(VERSION, "<$verfile") or
die "$modename: cannot read \`$verfile': $!\n";
my $ver;
while ($_ = <VERSION>) {
if (/^\s*#\s*define\s+UTS_RELEASE\s+"(.*)"\s*$/) {
$ver = $1;
last;
}
}
close(VERSION);
if (!defined $ver) {
die "$modename: cannot find UTS_RELEASE in \`$verfile'\n";
}
return "linux-$ver";
}
exit 0;
Lustre(R) for OS X
This software is a proprietary product of Sun Microsystems, Inc. which owns all intellectual property rights to this software.
You must obtain a license from Sun Microsystems, Inc. and agree to its terms before using this software. Contact http://www.lustre.org/
This software is beta software modifying and running kernel code. Back up all systems before use. This software is provided to you without any warranty, without even the implied warranty of merchantability, or fitness for a particular purpose. Consult your license agreement for more details.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment