| Index: gdb/system-gdbinit/elinos.py
|
| diff --git a/gdb/system-gdbinit/elinos.py b/gdb/system-gdbinit/elinos.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..581904a24c001ed1680fa23be9988c6d1bec4f8f
|
| --- /dev/null
|
| +++ b/gdb/system-gdbinit/elinos.py
|
| @@ -0,0 +1,91 @@
|
| +# Copyright (C) 2011-2013 Free Software Foundation, Inc.
|
| +
|
| +# 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 3 of the License, or
|
| +# (at your option) 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, see <http://www.gnu.org/licenses/>.
|
| +
|
| +"""Configure GDB using the ELinOS environment."""
|
| +
|
| +import os
|
| +import glob
|
| +import gdb
|
| +
|
| +
|
| +def warn(msg):
|
| + print "warning: %s" % msg
|
| +
|
| +
|
| +def get_elinos_environment():
|
| + """Return the ELinOS environment.
|
| +
|
| + If the ELinOS environment is properly set up, return a dictionary
|
| + which contains:
|
| + * The path to the ELinOS project at key 'project';
|
| + * The path to the ELinOS CDK at key 'cdk';
|
| + * The ELinOS target name at key 'target' (Eg. 'i486-linux');
|
| + * A list of Xenomai install prefixes (which could be empty, if
|
| + the ELinOS project does not include Xenomai) at key 'xenomai'.
|
| +
|
| + If one of these cannot be found, print a warning; the corresponding
|
| + value in the returned dictionary will be None.
|
| + """
|
| + result = {}
|
| + for key in ("project", "cdk", "target"):
|
| + var = "ELINOS_" + key.upper()
|
| + if var in os.environ:
|
| + result[key] = os.environ[var]
|
| + else:
|
| + warn("%s not set" % var)
|
| + result[key] = None
|
| +
|
| + if result["project"] is not None:
|
| + result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
|
| + else:
|
| + result["xenomai"] = []
|
| +
|
| + return result
|
| +
|
| +
|
| +def elinos_init():
|
| + """Initialize debugger environment for ELinOS.
|
| +
|
| + Let the debugger know where to find the ELinOS libraries on host. This
|
| + assumes that an ELinOS environment is properly set up. If some environment
|
| + variables are missing, warn about which library may be missing.
|
| + """
|
| + elinos_env = get_elinos_environment()
|
| +
|
| + solib_dirs = []
|
| +
|
| + # System libraries
|
| + if None in (elinos_env[key] for key in ("cdk", "target")):
|
| + warn("ELinOS system libraries will not be loaded")
|
| + else:
|
| + solib_prefix = "%s/%s" % (elinos_env["cdk"], elinos_env["target"])
|
| + solib_dirs += ["%s/%s" % (solib_prefix, "lib")]
|
| + gdb.execute("set solib-absolute-prefix %s" % solib_prefix)
|
| +
|
| + # Xenomai libraries. Those are optional, so have a lighter warning
|
| + # if they cannot be located.
|
| + if elinos_env["project"] is None:
|
| + warn("Xenomai libraries may not be loaded")
|
| + else:
|
| + for dir in elinos_env['xenomai']:
|
| + solib_dirs += ["%s/%s"
|
| + % (dir, "xenomai-build/usr/realtime/lib")]
|
| +
|
| + if len(solib_dirs) != 0:
|
| + gdb.execute("set solib-search-path %s" % ":".join(solib_dirs))
|
| +
|
| +
|
| +if __name__ == "__main__":
|
| + elinos_init()
|
|
|