elf_helper: support for objects in user memory

Some forthcoming kernel object types like futexes need to
be tracked, but do not contain data that is private to
the kernel.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/scripts/elf_helper.py b/scripts/elf_helper.py
index dc12d1c..209e345 100644
--- a/scripts/elf_helper.py
+++ b/scripts/elf_helper.py
@@ -471,14 +471,6 @@
                 # Never linked; gc-sections deleted it
                 continue
 
-            if ((addr < kram_start or addr >= kram_end) and
-                    (addr < krom_start or addr >= krom_end)):
-
-                self.debug_die(die,
-                               "object '%s' found in invalid location %s"
-                               % (name, hex(addr)))
-                continue
-
             type_obj = type_env[type_offset]
             objs = type_obj.get_kobjects(addr)
             all_objs.update(objs)
@@ -497,6 +489,16 @@
             if ko.type_obj.api:
                 continue
 
+            _, user_ram_allowed = kobjects[ko.type_obj.name]
+            if (not user_ram_allowed and
+                    (addr < kram_start or addr >= kram_end) and
+                    (addr < krom_start or addr >= krom_end)):
+
+                self.debug_die(die,
+                               "object '%s' found in invalid location %s"
+                               % (name, hex(addr)))
+                continue
+
             if ko.type_obj.name != "device":
                 # Not a device struct so we immediately know its type
                 ko.type_name = kobject_to_enum(ko.type_obj.name)