Index: sky/tools/skydb |
diff --git a/sky/tools/skydb b/sky/tools/skydb |
index 5320e273bd2e02928382fdc7ec91132ef192cf94..ab84fae44b9ff49b0c93d98188d0f9c8778c9dfc 100755 |
--- a/sky/tools/skydb |
+++ b/sky/tools/skydb |
@@ -137,7 +137,7 @@ class SkyDebugger(object): |
def sky_server_for_args(self, args): |
# FIXME: This is a hack. sky_server should just take a build_dir |
# not a magical "configuration" name. |
- configuration = os.path.basename(os.path.normpath(args.build_dir)) |
+ configuration = os.path.basename(os.path.normpath(self.paths.build_dir)) |
server_root = self._server_root_for_url(args.url_or_path) |
sky_server = SkyServer(self.paths, SKY_SERVER_PORT, |
configuration, server_root) |
@@ -176,7 +176,7 @@ class SkyDebugger(object): |
# FIXME: This is probably not the right way to compute is_android |
# from the build directory? |
- gn_args = gn_args_from_build_dir(args.build_dir) |
+ gn_args = gn_args_from_build_dir(self.paths.build_dir) |
is_android = 'android_sdk_version' in gn_args |
sky_server = self.sky_server_for_args(args) |
@@ -184,12 +184,12 @@ class SkyDebugger(object): |
self.pids['sky_server_port'] = sky_server.port |
self.pids['sky_server_root'] = sky_server.root |
- self.pids['build_dir'] = args.build_dir |
+ self.pids['build_dir'] = self.paths.build_dir |
self.pids['sky_command_port'] = args.command_port |
if is_android: |
# Pray to the build/android gods in their misspelled tongue. |
- constants.SetOutputDirectort(args.build_dir) |
+ constants.SetOutputDirectort(self.paths.build_dir) |
device = self._connect_to_device() |
self.pids['device_serial'] = device.GetDevice() |
@@ -409,8 +409,26 @@ class SkyDebugger(object): |
# Write out our pid file before we exec ourselves. |
self._write_pid_file(PID_FILE_PATH, self.pids) |
+ # Pull down the system libraries this pid has already mapped in. |
+ # TODO(eseidel): This does not handle dynamic loads well. |
+ system_libs_root = '/tmp/device_libs' |
+ library_cacher_path = os.path.join( |
+ self.paths.sky_tools_directory, 'android_library_cacher.py') |
+ subprocess.call([ |
+ library_cacher_path, system_libs_root, self.pids['mojo_shell_pid'] |
+ ]) |
+ |
+ # TODO(eseidel): adb_gdb does, this, unclear why solib-absolute-prefix |
+ # doesn't make this explicit listing not necessary? |
+ system_lib_dirs = subprocess.check_output([ |
+ 'find', system_libs_root, |
+ '-mindepth', '1', |
+ '-maxdepth', '4', |
+ '-type', 'd', |
+ ]).strip().split('\n') |
+ |
# TODO(eseidel): Need to sync down system libraries into a directory. |
- symbol_search_paths = [ |
+ symbol_search_paths = system_lib_dirs + [ |
links_path, |
self.pids['build_dir'], |
] |
@@ -425,6 +443,7 @@ class SkyDebugger(object): |
'--eval-command', 'target remote localhost:%s' % GDB_PORT, |
'--eval-command', 'set solib-search-path %s' % |
':'.join(symbol_search_paths), |
+ '--eval-command', 'set solib-absolute-prefix %s' % system_libs_root, |
] |
print " ".join(gdb_command) |
# We don't want python listening for signals or anything, so exec |