diff options
-rw-r--r-- | contrib/errcode/README | 32 | ||||
-rwxr-xr-x | contrib/errcode/build_errcodedb.py | 38 | ||||
-rw-r--r-- | contrib/errcode/errcode.php | 18 | ||||
-rwxr-xr-x | contrib/errcode/errcode.py | 31 |
4 files changed, 106 insertions, 13 deletions
diff --git a/contrib/errcode/README b/contrib/errcode/README new file mode 100644 index 00000000..f620ea07 --- /dev/null +++ b/contrib/errcode/README @@ -0,0 +1,32 @@ +Error Code Lookup for gPXE +========================== +This program looks up gPXE error codes so you can locate the line of source +code which produced the error. + +Setup +----- +You must run: +./build_errcodedb.py >errcodedb.py + +This extracts error code definitions from the gPXE source code and produces a +"database" which is used by the main program. + +Once you have done this errcode.py and errcodedb.py are the only files you +need. They are now independent of the gPXE source code and can be moved +anywhere. + +[OPTIONAL] +A PHP script is provided as a web interface. First edit errcode.php to point +$ERRCODE_PATH to the errcode.py script. Then move errcode.php to a location +visible from your web server. + +Usage +----- +Looking up error codes on the command-line: +./errcode.py 0x12345678 + +Further information +------------------- +See http://etherboot.org/. + +Released under the GPL and written by Stefan Hajnoczi <stefanha@gmail.com>. diff --git a/contrib/errcode/build_errcodedb.py b/contrib/errcode/build_errcodedb.py index 295c9271..868c2d3a 100755 --- a/contrib/errcode/build_errcodedb.py +++ b/contrib/errcode/build_errcodedb.py @@ -1,4 +1,19 @@ #!/usr/bin/env python +# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import sys import re @@ -15,6 +30,15 @@ def err(msg): sys.stderr.write('%s: %s\n' % (sys.argv[0], msg)) sys.exit(1) +def to_pxenv_status(errno): + return errno & 0xff + +def to_errfile(errno): + return (errno >> 13) & 0x7ff + +def to_posix_errno(errno): + return (errno >> 24) & 0x7f + def load_header_file(filename, regexp): defines = {} for line in open(filename, 'r'): @@ -42,7 +66,7 @@ def evaluate(defines, expr): err('invalid expression') return eval(pyexpr) -def build(filenames, regexp): +def build(filenames, regexp, selector): unevaluated = {} for filename in filenames: unevaluated.update(load_header_file(filename, regexp)) @@ -59,8 +83,12 @@ def build(filenames, regexp): changed = True if unevaluated: err('unable to evaluate all #defines') - return evaluated -print 'pxenv_status =', repr(build(pxenv_status_files, PXENV_STATUS_RE)) -print 'errfile =', repr(build(errfile_files, ERRFILE_RE)) -print 'posix_errno =', repr(build(posix_errno_files, POSIX_ERRNO_RE)) + lookup = {} + for key, val in evaluated.iteritems(): + lookup[selector(val)] = key + return lookup + +print 'pxenv_status =', repr(build(pxenv_status_files, PXENV_STATUS_RE, to_pxenv_status)) +print 'errfile =', repr(build(errfile_files, ERRFILE_RE, to_errfile)) +print 'posix_errno =', repr(build(posix_errno_files, POSIX_ERRNO_RE, to_posix_errno)) diff --git a/contrib/errcode/errcode.php b/contrib/errcode/errcode.php index d7c1dd04..87114495 100644 --- a/contrib/errcode/errcode.php +++ b/contrib/errcode/errcode.php @@ -1,4 +1,22 @@ <? +/* + * Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + // The path to the errcode.py script. $ERRCODE_PATH = './errcode.py'; ?> diff --git a/contrib/errcode/errcode.py b/contrib/errcode/errcode.py index b7a1e039..8a8ce808 100755 --- a/contrib/errcode/errcode.py +++ b/contrib/errcode/errcode.py @@ -1,4 +1,19 @@ #!/usr/bin/env python +# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import sys try: @@ -19,11 +34,11 @@ def to_errfile(errno): def to_posix_errno(errno): return (errno >> 24) & 0x7f -def lookup_errno_component(defines, selector, component): - for key, val in defines.iteritems(): - if selector(val) == component: - return key - return '0x%x' % component +def lookup_errno_component(defines, component): + if component in defines: + return defines[component] + else: + return '0x%x' % component class Errno(object): def __init__(self, errno): @@ -37,10 +52,10 @@ class Errno(object): def prettystr(self): return 'pxenv_status=%s uniq=%d errfile=%s posix_errno=%s' % ( - lookup_errno_component(errcodedb.pxenv_status, to_pxenv_status, self.pxenv_status), + lookup_errno_component(errcodedb.pxenv_status, self.pxenv_status), self.uniq, - lookup_errno_component(errcodedb.errfile, to_errfile, self.errfile), - lookup_errno_component(errcodedb.posix_errno, to_posix_errno, self.posix_errno) + lookup_errno_component(errcodedb.errfile, self.errfile), + lookup_errno_component(errcodedb.posix_errno, self.posix_errno) ) def __str__(self): |