This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[commit/ELinOS] Best effort to load system libraries in case of incomplete env


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]