90 lines
3 KiB
Python
90 lines
3 KiB
Python
# Copyright (C) 2011-2022 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()
|