* [commit/ELinOS] Best effort to load system libraries in case of incomplete env
@ 2013-10-01 9:17 Joel Brobecker
0 siblings, 0 replies; only message in thread
From: Joel Brobecker @ 2013-10-01 9:17 UTC (permalink / raw)
To: gdb-patches; +Cc: Jerome Guitton
From: Jerome Guitton <guitton@adacore.com>
Hello,
I am submitting this patch on behalf of Jerome Guitton, who wrote it.
So far, elinos.py was assuming that the whole ELinOS environment was
around to find the system libraries; if some environment variables
were missing, the script would just abort.
This was a bit extreme. It is possible to do better than that: to get
the core system libraries, one doesn't need to have a full environment
but just the path to the CDK. The path to kernel project is only
needed for the optional Xenomai libs.
gdb/ChangeLog:
* system-gdbinit/elinos.py (get_elinos_environment): Return an
incomplete dictionnary instead of None in case of missing
environment variables.
(elinos_init): In case of an incomplete environment, best
effort to load system libraries instead of abort.
Tested by starting GDB in both a full environment as well as an
incomplete one. Will check it in momentarily.
---
gdb/system-gdbinit/elinos.py | 36 ++++++++++++++++++++++++------------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/gdb/system-gdbinit/elinos.py b/gdb/system-gdbinit/elinos.py
index 08c5b0f..581904a 100644
--- a/gdb/system-gdbinit/elinos.py
+++ b/gdb/system-gdbinit/elinos.py
@@ -35,9 +35,8 @@ def get_elinos_environment():
* 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, it is then assumed that the ELinOS
- environment is not properly set up. Return None in such a case,
- and print a warning.
+ 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"):
@@ -46,9 +45,13 @@ def get_elinos_environment():
result[key] = os.environ[var]
else:
warn("%s not set" % var)
- return None
+ result[key] = None
+
+ if result["project"] is not None:
+ result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
+ else:
+ result["xenomai"] = []
- result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
return result
@@ -56,22 +59,31 @@ 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 not, abort
- with a warning.
+ 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()
- if elinos_env is None:
+ 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)
- solib_dirs = []
+ # 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")]
- solib_dirs += ["%s/%s" % (solib_prefix, "lib")]
+ solib_dirs += ["%s/%s"
+ % (dir, "xenomai-build/usr/realtime/lib")]
- gdb.execute("set solib-absolute-prefix %s" % solib_prefix)
+ if len(solib_dirs) != 0:
gdb.execute("set solib-search-path %s" % ":".join(solib_dirs))
--
1.8.1.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2013-10-01 9:17 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-01 9:17 [commit/ELinOS] Best effort to load system libraries in case of incomplete env Joel Brobecker
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).