summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/errcode/README32
-rwxr-xr-xcontrib/errcode/build_errcodedb.py38
-rw-r--r--contrib/errcode/errcode.php18
-rwxr-xr-xcontrib/errcode/errcode.py31
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):