Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | |
Jarkko Pöyry | 3c77ed4 | 2015-01-06 12:54:34 -0800 | [diff] [blame] | 3 | #------------------------------------------------------------------------- |
| 4 | # drawElements Quality Program utilities |
| 5 | # -------------------------------------- |
| 6 | # |
| 7 | # Copyright 2015 The Android Open Source Project |
| 8 | # |
| 9 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 10 | # you may not use this file except in compliance with the License. |
| 11 | # You may obtain a copy of the License at |
| 12 | # |
| 13 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 14 | # |
| 15 | # Unless required by applicable law or agreed to in writing, software |
| 16 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 17 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 18 | # See the License for the specific language governing permissions and |
| 19 | # limitations under the License. |
| 20 | # |
| 21 | #------------------------------------------------------------------------- |
| 22 | |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 23 | import sys |
| 24 | import os |
| 25 | import time |
| 26 | import string |
| 27 | import shutil |
| 28 | import subprocess |
| 29 | import signal |
| 30 | import argparse |
| 31 | |
| 32 | import common |
| 33 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 34 | def getADBProgramPID (adbCmd, program, serial): |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 35 | pid = -1 |
| 36 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 37 | process = subprocess.Popen([adbCmd] |
| 38 | + (["-s", serial] if serial != None else []) |
| 39 | + ["shell", "ps"], stdout=subprocess.PIPE) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 40 | |
| 41 | firstLine = True |
| 42 | for line in process.stdout.readlines(): |
| 43 | if firstLine: |
| 44 | firstLine = False |
| 45 | continue |
| 46 | |
| 47 | fields = string.split(line) |
| 48 | fields = filter(lambda x: len(x) > 0, fields) |
| 49 | |
| 50 | if len(fields) < 9: |
| 51 | continue |
| 52 | |
| 53 | if fields[8] == program: |
| 54 | assert pid == -1 |
| 55 | pid = int(fields[1]) |
| 56 | |
| 57 | process.wait() |
| 58 | |
| 59 | if process.returncode != 0: |
| 60 | print("adb shell ps returned %s" % str(process.returncode)) |
| 61 | pid = -1 |
| 62 | |
| 63 | return pid |
| 64 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 65 | def debug ( |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 66 | adbCmd, |
| 67 | deqpCmdLine, |
| 68 | targetGDBPort, |
| 69 | hostGDBPort, |
| 70 | jdbPort, |
| 71 | jdbCmd, |
| 72 | gdbCmd, |
| 73 | buildDir, |
| 74 | deviceLibs, |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 75 | breakpoints, |
| 76 | serial, |
| 77 | deviceGdbCmd, |
| 78 | appProcessName, |
| 79 | linkerName |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 80 | ): |
| 81 | |
| 82 | programPid = -1 |
| 83 | gdbServerProcess = None |
| 84 | gdbProcess = None |
| 85 | jdbProcess = None |
| 86 | curDir = os.getcwd() |
| 87 | debugDir = os.path.join(common.ANDROID_DIR, "debug") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 88 | serialArg = "-s " + serial if serial != None else "" |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 89 | |
| 90 | if os.path.exists(debugDir): |
| 91 | shutil.rmtree(debugDir) |
| 92 | |
| 93 | os.makedirs(debugDir) |
| 94 | os.chdir(debugDir) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 95 | try: |
| 96 | # Start execution |
| 97 | print("Starting intent...") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 98 | common.execArgs([adbCmd] |
| 99 | + (["-s", serial] if serial != None else []) |
| 100 | + ["shell", "am", "start", "-W", "-D", "-n", "com.drawelements.deqp/android.app.NativeActivity", "-e", "cmdLine", "\"\"unused " + deqpCmdLine + "\"\""]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 101 | print("Intent started") |
| 102 | |
| 103 | # Kill existing gdbservers |
| 104 | print("Check and kill existing gdbserver") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 105 | gdbPid = getADBProgramPID(adbCmd, "gdbserver", serial) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 106 | if gdbPid != -1: |
| 107 | print("Found gdbserver with PID %i" % gdbPid) |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 108 | common.execArgs([adbCmd] |
| 109 | + (["-s", serial] if serial != None else []) |
| 110 | + ["shell", "run-as", "com.drawelements.deqp", "kill", "-9", str(gdbPid)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 111 | print("Killed gdbserver") |
| 112 | else: |
| 113 | print("Couldn't find existing gdbserver") |
| 114 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 115 | programPid = getADBProgramPID(adbCmd, "com.drawelements.deqp:testercore", serial) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 116 | |
| 117 | print("Find process PID") |
| 118 | if programPid == -1: |
| 119 | common.die("Couldn't get PID of testercore") |
| 120 | print("Process running with PID %i" % programPid) |
| 121 | |
| 122 | # Start gdbserver |
| 123 | print("Start gdbserver for PID %i redirect stdout to gdbserver-stdout.txt" % programPid) |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 124 | gdbServerProcess = subprocess.Popen([adbCmd] |
| 125 | + (["-s", serial] if serial != None else []) |
| 126 | + ["shell", "run-as", "com.drawelements.deqp", deviceGdbCmd, "localhost:" + str(targetGDBPort), "--attach", str(programPid)], stdin=subprocess.PIPE, stdout=open("gdbserver-stdout.txt", "wb"), stderr=open("gdbserver-stderr.txt", "wb")) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 127 | print("gdbserver started") |
| 128 | |
| 129 | time.sleep(1) |
| 130 | |
| 131 | gdbServerProcess.poll() |
| 132 | |
| 133 | if gdbServerProcess.returncode != None: |
| 134 | common.die("gdbserver returned unexpectly with return code %i see gdbserver-stdout.txt for more info" % gdbServerProcess.returncode) |
| 135 | |
| 136 | # Setup port forwarding |
| 137 | print("Forwarding local port to gdbserver port") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 138 | common.execArgs([adbCmd] |
| 139 | + (["-s", serial] if serial != None else []) |
| 140 | + ["forward", "tcp:" + str(hostGDBPort), "tcp:" + str(targetGDBPort)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 141 | |
| 142 | # Pull some data files for debugger |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 143 | print("Pull /system/bin/%s from device" % appProcessName) |
| 144 | common.execArgs([adbCmd] |
| 145 | + (["-s", serial] if serial != None else []) |
| 146 | + ["pull", "/system/bin/" + str(appProcessName)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 147 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 148 | print("Pull /system/bin/%s from device" % linkerName) |
| 149 | common.execArgs([adbCmd] |
| 150 | + (["-s", serial] if serial != None else []) |
| 151 | + ["pull", "/system/bin/" + str(linkerName)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 152 | |
| 153 | for lib in deviceLibs: |
| 154 | print("Pull library %s from device" % lib) |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 155 | try: |
| 156 | common.execArgs([adbCmd] |
| 157 | + (["-s", serial] if serial != None else []) |
| 158 | + ["pull", lib]) |
| 159 | except Exception as e: |
| 160 | print("Failed to pull library '%s'. Error: %s" % (lib, str(e))) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 161 | |
Pyry Haulos | 03700a8 | 2014-10-20 13:01:20 -0700 | [diff] [blame] | 162 | print("Copy %s from build dir" % common.NATIVE_LIB_NAME) |
| 163 | shutil.copyfile(os.path.join(buildDir, common.NATIVE_LIB_NAME), common.NATIVE_LIB_NAME) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 164 | |
| 165 | # Forward local port for jdb |
| 166 | print("Forward local port to jdb port") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 167 | common.execArgs([adbCmd] |
| 168 | + (["-s", serial] if serial != None else []) |
| 169 | + ["forward", "tcp:" + str(jdbPort), "jdwp:" + str(programPid)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 170 | |
| 171 | # Connect JDB |
| 172 | print("Start jdb process redirectd stdout to jdb-stdout.txt") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 173 | jdbProcess = subprocess.Popen([jdbCmd, "-connect", "com.sun.jdi.SocketAttach:hostname=localhost,port=" + str(jdbPort), "-sourcepath", "../package"], stdin=subprocess.PIPE, stdout=open("jdb-stdout.txt", "wb"), stderr=open("jdb-stderr.txt", "wb")) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 174 | print("Started jdb process") |
| 175 | |
| 176 | # Write gdb.setup |
| 177 | print("Write gdb.setup") |
| 178 | gdbSetup = open("gdb.setup", "wb") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 179 | gdbSetup.write("file %s\n" % appProcessName) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 180 | gdbSetup.write("set solib-search-path .\n") |
| 181 | gdbSetup.write("target remote :%i\n" % hostGDBPort) |
| 182 | gdbSetup.write("set breakpoint pending on\n") |
| 183 | |
| 184 | for breakpoint in breakpoints: |
| 185 | print("Set breakpoint at %s" % breakpoint) |
| 186 | gdbSetup.write("break %s\n" % breakpoint) |
| 187 | |
| 188 | gdbSetup.write("set breakpoint pending off\n") |
| 189 | gdbSetup.close() |
| 190 | |
| 191 | print("Start gdb") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 192 | gdbProcess = subprocess.Popen(common.shellquote(gdbCmd) + " -x gdb.setup", shell=True) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 193 | |
| 194 | gdbProcess.wait() |
| 195 | |
| 196 | print("gdb returned with %i" % gdbProcess.returncode) |
| 197 | gdbProcess=None |
| 198 | |
| 199 | print("Close jdb process with 'quit'") |
| 200 | jdbProcess.stdin.write("quit\n") |
| 201 | jdbProcess.wait() |
| 202 | print("JDB returned %s" % str(jdbProcess.returncode)) |
| 203 | jdbProcess=None |
| 204 | |
| 205 | print("Kill gdbserver process") |
| 206 | gdbServerProcess.kill() |
| 207 | gdbServerProcess=None |
| 208 | print("Killed gdbserver process") |
| 209 | |
| 210 | print("Kill program %i" % programPid) |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 211 | common.execArgs([adbCmd] |
| 212 | + (["-s", serial] if serial != None else []) |
| 213 | + ["shell", "run-as", "com.drawelements.deqp", "kill", "-9", str(programPid)]) |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 214 | print("Killed program") |
| 215 | |
| 216 | finally: |
| 217 | if jdbProcess and jdbProcess.returncode == None: |
| 218 | print("Kill jdb") |
| 219 | jdbProcess.kill() |
| 220 | elif jdbProcess: |
| 221 | print("JDB returned %i" % jdbProcess.returncode) |
| 222 | |
| 223 | if gdbProcess and gdbProcess.returncode == None: |
| 224 | print("Kill gdb") |
| 225 | gdbProcess.kill() |
| 226 | elif gdbProcess: |
| 227 | print("GDB returned %i" % gdbProcess.returncode) |
| 228 | |
| 229 | if gdbServerProcess and gdbServerProcess.returncode == None: |
| 230 | print("Kill gdbserver") |
| 231 | gdbServerProcess.kill() |
| 232 | elif gdbServerProcess: |
| 233 | print("GDB server returned %i" % gdbServerProcess.returncode) |
| 234 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 235 | if programPid != -1: |
| 236 | print("Kill program %i" % programPid) |
| 237 | common.execArgs([adbCmd] |
| 238 | + (["-s", serial] if serial != None else []) |
| 239 | + ["shell", "run-as", "com.drawelements.deqp", "kill", "-9", str(programPid)]) |
| 240 | print("Killed program") |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 241 | |
| 242 | os.chdir(curDir) |
| 243 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 244 | class Device: |
| 245 | def __init__ (self, libraries=[], nativeBuildDir=None, hostGdbBins=None, deviceGdbCmd=None, appProcessName=None, linkerName=None): |
| 246 | self.libraries = libraries |
| 247 | self.nativeBuildDir = nativeBuildDir |
| 248 | self.hostGdbBins = hostGdbBins |
| 249 | self.deviceGdbCmd = deviceGdbCmd |
| 250 | self.appProcessName = appProcessName |
| 251 | self.linkerName = linkerName |
| 252 | |
| 253 | def getBuildDir (self): |
| 254 | return self.nativeBuildDir |
| 255 | |
| 256 | def getGdbCommand (self, platform): |
| 257 | return self.hostGdbBins[platform] |
| 258 | |
| 259 | def getDeviceGdbCommand (self): |
| 260 | return self.deviceGdbCmd |
| 261 | |
| 262 | def getLibs (self): |
| 263 | return self.libraries |
| 264 | |
| 265 | def getLinkerName (self): |
| 266 | return self.linkerName |
| 267 | |
| 268 | def getAppProcessName (self): |
| 269 | return self.appProcessName |
| 270 | |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 271 | if __name__ == "__main__": |
| 272 | parser = argparse.ArgumentParser() |
| 273 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 274 | devices = { |
| 275 | "nexus-4" : Device( |
| 276 | nativeBuildDir = "../native/debug-13-armeabi-v7a", |
| 277 | deviceGdbCmd = "lib/gdbserver", |
| 278 | hostGdbBins = { |
| 279 | "linux" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb")), |
| 280 | "windows" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb")) |
| 281 | }, |
| 282 | appProcessName = "app_process", |
| 283 | linkerName = "linker", |
| 284 | libraries = [ |
| 285 | "/system/lib/libgenlock.so", |
| 286 | "/system/lib/libmemalloc.so", |
| 287 | "/system/lib/libqdutils.so", |
| 288 | "/system/lib/libsc-a3xx.so" |
| 289 | ]), |
| 290 | "nexus-6" : Device( |
| 291 | nativeBuildDir = "../native/debug-13-armeabi-v7a", |
| 292 | deviceGdbCmd = "lib/gdbserver", |
| 293 | hostGdbBins = { |
| 294 | "linux" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb")), |
| 295 | "windows" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb")) |
| 296 | }, |
| 297 | appProcessName = "app_process", |
| 298 | linkerName = "linker", |
| 299 | libraries = [ |
| 300 | "/system/lib/libutils.so", |
| 301 | "/system/lib/libstdc++.so", |
| 302 | "/system/lib/libm.so", |
| 303 | "/system/lib/liblog.so", |
| 304 | "/system/lib/libhardware.so", |
| 305 | "/system/lib/libbinder.so", |
| 306 | "/system/lib/libcutils.so", |
| 307 | "/system/lib/libc++.so", |
| 308 | "/system/lib/libLLVM.so", |
| 309 | "/system/lib/libbcinfo.so", |
| 310 | "/system/lib/libunwind.so", |
| 311 | "/system/lib/libz.so", |
| 312 | "/system/lib/libpng.so", |
| 313 | "/system/lib/libcommon_time_client.so", |
| 314 | "/system/lib/libstlport.so", |
| 315 | "/system/lib/libui.so", |
| 316 | "/system/lib/libsync.so", |
| 317 | "/system/lib/libgui.so", |
| 318 | "/system/lib/libft2.so", |
| 319 | "/system/lib/libbcc.so", |
| 320 | "/system/lib/libGLESv2.so", |
| 321 | "/system/lib/libGLESv1_CM.so", |
| 322 | "/system/lib/libEGL.so", |
| 323 | "/system/lib/libunwind-ptrace.so", |
| 324 | "/system/lib/libgccdemangle.so", |
| 325 | "/system/lib/libcrypto.so", |
| 326 | "/system/lib/libicuuc.so", |
| 327 | "/system/lib/libicui18n.so", |
| 328 | "/system/lib/libjpeg.so", |
| 329 | "/system/lib/libexpat.so", |
| 330 | "/system/lib/libpcre.so", |
| 331 | "/system/lib/libharfbuzz_ng.so", |
| 332 | "/system/lib/libstagefright_foundation.so", |
| 333 | "/system/lib/libsonivox.so", |
| 334 | "/system/lib/libnbaio.so", |
| 335 | "/system/lib/libcamera_client.so", |
| 336 | "/system/lib/libaudioutils.so", |
| 337 | "/system/lib/libinput.so", |
| 338 | "/system/lib/libhardware_legacy.so", |
| 339 | "/system/lib/libcamera_metadata.so", |
| 340 | "/system/lib/libgabi++.so", |
| 341 | "/system/lib/libskia.so", |
| 342 | "/system/lib/libRScpp.so", |
| 343 | "/system/lib/libRS.so", |
| 344 | "/system/lib/libwpa_client.so", |
| 345 | "/system/lib/libnetutils.so", |
| 346 | "/system/lib/libspeexresampler.so", |
| 347 | "/system/lib/libGLES_trace.so", |
| 348 | "/system/lib/libbacktrace.so", |
| 349 | "/system/lib/libusbhost.so", |
| 350 | "/system/lib/libssl.so", |
| 351 | "/system/lib/libsqlite.so", |
| 352 | "/system/lib/libsoundtrigger.so", |
| 353 | "/system/lib/libselinux.so", |
| 354 | "/system/lib/libprocessgroup.so", |
| 355 | "/system/lib/libpdfium.so", |
| 356 | "/system/lib/libnetd_client.so", |
| 357 | "/system/lib/libnativehelper.so", |
| 358 | "/system/lib/libnativebridge.so", |
| 359 | "/system/lib/libminikin.so", |
| 360 | "/system/lib/libmemtrack.so", |
| 361 | "/system/lib/libmedia.so", |
| 362 | "/system/lib/libinputflinger.so", |
| 363 | "/system/lib/libimg_utils.so", |
| 364 | "/system/lib/libhwui.so", |
| 365 | "/system/lib/libandroidfw.so", |
| 366 | "/system/lib/libETC1.so", |
| 367 | "/system/lib/libandroid_runtime.so", |
| 368 | "/system/lib/libsigchain.so", |
| 369 | "/system/lib/libbacktrace_libc++.so", |
| 370 | "/system/lib/libart.so", |
| 371 | "/system/lib/libjavacore.so", |
| 372 | "/system/lib/libvorbisidec.so", |
| 373 | "/system/lib/libstagefright_yuv.so", |
| 374 | "/system/lib/libstagefright_omx.so", |
| 375 | "/system/lib/libstagefright_enc_common.so", |
| 376 | "/system/lib/libstagefright_avc_common.so", |
| 377 | "/system/lib/libpowermanager.so", |
| 378 | "/system/lib/libopus.so", |
| 379 | "/system/lib/libdrmframework.so", |
| 380 | "/system/lib/libstagefright_amrnb_common.so", |
| 381 | "/system/lib/libstagefright.so", |
| 382 | "/system/lib/libmtp.so", |
| 383 | "/system/lib/libjhead.so", |
| 384 | "/system/lib/libexif.so", |
| 385 | "/system/lib/libmedia_jni.so", |
| 386 | "/system/lib/libsoundpool.so", |
| 387 | "/system/lib/libaudioeffect_jni.so", |
| 388 | "/system/lib/librs_jni.so", |
| 389 | "/system/lib/libjavacrypto.so", |
| 390 | "/system/lib/libqservice.so", |
| 391 | "/system/lib/libqdutils.so", |
| 392 | "/system/lib/libqdMetaData.so", |
| 393 | "/system/lib/libmemalloc.so", |
| 394 | "/system/lib/libandroid.so", |
| 395 | "/system/lib/libcompiler_rt.so", |
| 396 | "/system/lib/libjnigraphics.so", |
| 397 | "/system/lib/libwebviewchromium_loader.so", |
| 398 | |
| 399 | "/system/lib/hw/gralloc.msm8084.so", |
| 400 | "/system/lib/hw/memtrack.msm8084.so", |
| 401 | |
| 402 | "/vendor/lib/libgsl.so", |
| 403 | "/vendor/lib/libadreno_utils.so", |
| 404 | "/vendor/lib/egl/libEGL_adreno.so", |
| 405 | "/vendor/lib/egl/libGLESv1_CM_adreno.so", |
| 406 | "/vendor/lib/egl/libGLESv2_adreno.so", |
| 407 | "/vendor/lib/egl/eglSubDriverAndroid.so", |
| 408 | "/vendor/lib/libllvm-glnext.so", |
| 409 | ]), |
| 410 | "nexus-7" : Device( |
| 411 | nativeBuildDir = "../native/debug-13-armeabi-v7a", |
| 412 | deviceGdbCmd = "lib/gdbserver", |
| 413 | hostGdbBins = { |
| 414 | "linux" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb")), |
| 415 | "windows" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb")) |
| 416 | }, |
| 417 | appProcessName = "app_process", |
| 418 | linkerName = "linker", |
| 419 | libraries = [ |
| 420 | "/system/lib/libm.so", |
| 421 | "/system/lib/libqdutils.so", |
| 422 | "/system/lib/libmemalloc.so", |
| 423 | "/system/lib/hw/gralloc.msm8960.so", |
| 424 | "/system/lib/libstdc++.so", |
| 425 | "/system/lib/liblog.so.", |
| 426 | "/system/lib/libstdc++.so", |
| 427 | "/system/lib/liblog.so", |
| 428 | "/system/lib/libsigchain.so", |
| 429 | "/system/lib/libcutils.so", |
| 430 | "/system/lib/libstlport.so", |
| 431 | "/system/lib/libgccdemangle.so", |
| 432 | "/system/lib/libunwind.so", |
| 433 | "/system/lib/libunwind-ptrace.so", |
| 434 | "/system/lib/libbacktrace.so", |
| 435 | "/system/lib/libutils.so", |
| 436 | "/system/lib/libGLES_trace.so", |
| 437 | "/system/lib/libEGL.so", |
| 438 | "/system/lib/libETC1.so", |
| 439 | "/system/lib/libGLESv1_CM.so", |
| 440 | "/system/lib/libGLESv2.so", |
| 441 | "/system/lib/libbinder.so", |
| 442 | "/system/lib/libz.so", |
| 443 | "/system/lib/libandroidfw.so", |
| 444 | "/system/lib/libspeexresampler.so", |
| 445 | "/system/lib/libaudioutils.so", |
| 446 | "/system/lib/libcamera_metadata.so", |
| 447 | "/system/lib/libsync.so", |
| 448 | "/system/lib/libhardware.so", |
| 449 | "/system/lib/libui.so", |
| 450 | "/vendor/lib/egl/eglsubAndroid.so", |
| 451 | "/vendor/lib/libsc-a3xx.so", |
| 452 | "/system/lib/libgui.so", |
| 453 | "/system/lib/libcamera_client.so", |
| 454 | "/system/lib/libcrypto.so", |
| 455 | "/system/lib/libexpat.so", |
| 456 | "/system/lib/libnetutils.so", |
| 457 | "/system/lib/libwpa_client.so", |
| 458 | "/system/lib/libhardware_legacy.so", |
| 459 | "/system/lib/libgabi++.so", |
| 460 | "/system/lib/libicuuc.so", |
| 461 | "/system/lib/libicui18n.so", |
| 462 | "/system/lib/libharfbuzz_ng.so", |
| 463 | "/system/lib/libc++.so", |
| 464 | "/system/lib/libLLVM.so", |
| 465 | "/system/lib/libbcinfo.so", |
| 466 | "/system/lib/libbcc.so", |
| 467 | "/system/lib/libpng.so", |
| 468 | "/system/lib/libft2.so", |
| 469 | "/system/lib/libRS.so", |
| 470 | "/system/lib/libRScpp.so", |
| 471 | "/system/lib/libjpeg.so", |
| 472 | "/system/lib/libskia.so", |
| 473 | "/system/lib/libhwui.so", |
| 474 | "/system/lib/libimg_utils.so", |
| 475 | "/system/lib/libinput.so", |
| 476 | "/system/lib/libinputflinger.so", |
| 477 | "/system/lib/libcommon_time_client.so", |
| 478 | "/system/lib/libnbaio.so", |
| 479 | "/system/lib/libsonivox.so", |
| 480 | "/system/lib/libstagefright_foundation.so", |
| 481 | "/system/lib/libmedia.so", |
| 482 | "/system/lib/libmemtrack.so", |
| 483 | "/system/lib/libminikin.so", |
| 484 | "/system/lib/libnativebridge.so", |
| 485 | "/system/lib/libnativehelper.so", |
| 486 | "/system/lib/libnetd_client.so", |
| 487 | "/system/lib/libpdfium.so", |
| 488 | "/system/lib/libprocessgroup.so", |
| 489 | "/system/lib/libselinux.so", |
| 490 | "/system/lib/libsoundtrigger.so", |
| 491 | "/system/lib/libsqlite.so", |
| 492 | "/system/lib/libssl.so", |
| 493 | "/system/lib/libusbhost.so", |
| 494 | "/system/lib/libandroid_runtime.so", |
| 495 | "/system/lib/libbacktrace_libc++.so", |
| 496 | "/system/lib/libart.so", |
| 497 | "/system/lib/libjavacore.so", |
| 498 | "/system/lib/libexif.so", |
| 499 | "/system/lib/libjhead.so", |
| 500 | "/system/lib/libmtp.so", |
| 501 | "/system/lib/libdrmframework.so", |
| 502 | "/system/lib/libopus.so", |
| 503 | "/system/lib/libpowermanager.so", |
| 504 | "/system/lib/libstagefright_avc_common.so", |
| 505 | "/system/lib/libstagefright_enc_common.so", |
| 506 | "/system/lib/libstagefright_omx.so", |
| 507 | "/system/lib/libstagefright_yuv.so", |
| 508 | "/system/lib/libvorbisidec.so", |
| 509 | "/system/lib/libstagefright.so", |
| 510 | "/system/lib/libstagefright_amrnb_common.so", |
| 511 | "/system/lib/libmedia_jni.so", |
| 512 | "/system/lib/libsoundpool.so", |
| 513 | "/system/lib/libaudioeffect_jni.so", |
| 514 | "/system/lib/librs_jni.so", |
| 515 | "/system/lib/libjavacrypto.so", |
| 516 | "/system/lib/libandroid.so", |
| 517 | "/system/lib/libcompiler_rt.so", |
| 518 | "/system/lib/libjnigraphics.so", |
| 519 | "/system/lib/libwebviewchromium_loader.so", |
| 520 | |
| 521 | "/system/lib/hw/memtrack.msm8960.so", |
| 522 | |
| 523 | "/vendor/lib/libgsl.so", |
| 524 | "/vendor/lib/libadreno_utils.so", |
| 525 | "/vendor/lib/egl/libEGL_adreno.so", |
| 526 | "/vendor/lib/egl/libGLESv1_CM_adreno.so", |
| 527 | "/vendor/lib/egl/libGLESv2_adreno.so", |
| 528 | ]), |
| 529 | "nexus-10" : Device( |
| 530 | nativeBuildDir = "../native/debug-13-armeabi-v7a", |
| 531 | deviceGdbCmd = "lib/gdbserver", |
| 532 | hostGdbBins = { |
| 533 | "linux" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb")), |
| 534 | "windows" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb")) |
| 535 | }, |
| 536 | appProcessName = "app_process", |
| 537 | linkerName = "linker", |
| 538 | libraries = [ |
| 539 | "/system/lib/libutils.so", |
| 540 | "/system/lib/libstdc++.so", |
| 541 | "/system/lib/libm.so", |
| 542 | "/system/lib/liblog.so", |
| 543 | "/system/lib/libhardware.so", |
| 544 | "/system/lib/libbinder.so", |
| 545 | "/system/lib/libcutils.so", |
| 546 | "/system/lib/libc++.so", |
| 547 | "/system/lib/libLLVM.so", |
| 548 | "/system/lib/libbcinfo.so", |
| 549 | "/system/lib/libunwind.so", |
| 550 | "/system/lib/libz.so", |
| 551 | "/system/lib/libpng.so", |
| 552 | "/system/lib/libcommon_time_client.so", |
| 553 | "/system/lib/libstlport.so", |
| 554 | "/system/lib/libui.so", |
| 555 | "/system/lib/libsync.so", |
| 556 | "/system/lib/libgui.so", |
| 557 | "/system/lib/libft2.so", |
| 558 | "/system/lib/libbcc.so", |
| 559 | "/system/lib/libGLESv2.so", |
| 560 | "/system/lib/libGLESv1_CM.so", |
| 561 | "/system/lib/libEGL.so", |
| 562 | "/system/lib/libunwind-ptrace.so", |
| 563 | "/system/lib/libgccdemangle.so", |
| 564 | "/system/lib/libcrypto.so", |
| 565 | "/system/lib/libicuuc.so", |
| 566 | "/system/lib/libicui18n.so", |
| 567 | "/system/lib/libjpeg.so", |
| 568 | "/system/lib/libexpat.so", |
| 569 | "/system/lib/libpcre.so", |
| 570 | "/system/lib/libharfbuzz_ng.so", |
| 571 | "/system/lib/libstagefright_foundation.so", |
| 572 | "/system/lib/libsonivox.so", |
| 573 | "/system/lib/libnbaio.so", |
| 574 | "/system/lib/libcamera_client.so", |
| 575 | "/system/lib/libaudioutils.so", |
| 576 | "/system/lib/libinput.so", |
| 577 | "/system/lib/libhardware_legacy.so", |
| 578 | "/system/lib/libcamera_metadata.so", |
| 579 | "/system/lib/libgabi++.so", |
| 580 | "/system/lib/libskia.so", |
| 581 | "/system/lib/libRScpp.so", |
| 582 | "/system/lib/libRS.so", |
| 583 | "/system/lib/libwpa_client.so", |
| 584 | "/system/lib/libnetutils.so", |
| 585 | "/system/lib/libspeexresampler.so", |
| 586 | "/system/lib/libGLES_trace.so", |
| 587 | "/system/lib/libbacktrace.so", |
| 588 | "/system/lib/libusbhost.so", |
| 589 | "/system/lib/libssl.so", |
| 590 | "/system/lib/libsqlite.so", |
| 591 | "/system/lib/libsoundtrigger.so", |
| 592 | "/system/lib/libselinux.so", |
| 593 | "/system/lib/libprocessgroup.so", |
| 594 | "/system/lib/libpdfium.so", |
| 595 | "/system/lib/libnetd_client.so", |
| 596 | "/system/lib/libnativehelper.so", |
| 597 | "/system/lib/libnativebridge.so", |
| 598 | "/system/lib/libminikin.so", |
| 599 | "/system/lib/libmemtrack.so", |
| 600 | "/system/lib/libmedia.so", |
| 601 | "/system/lib/libinputflinger.so", |
| 602 | "/system/lib/libimg_utils.so", |
| 603 | "/system/lib/libhwui.so", |
| 604 | "/system/lib/libandroidfw.so", |
| 605 | "/system/lib/libETC1.so", |
| 606 | "/system/lib/libandroid_runtime.so", |
| 607 | "/system/lib/libsigchain.so", |
| 608 | "/system/lib/libbacktrace_libc++.so", |
| 609 | "/system/lib/libart.so", |
| 610 | "/system/lib/libjavacore.so", |
| 611 | "/system/lib/libvorbisidec.so", |
| 612 | "/system/lib/libstagefright_yuv.so", |
| 613 | "/system/lib/libstagefright_omx.so", |
| 614 | "/system/lib/libstagefright_enc_common.so", |
| 615 | "/system/lib/libstagefright_avc_common.so", |
| 616 | "/system/lib/libpowermanager.so", |
| 617 | "/system/lib/libopus.so", |
| 618 | "/system/lib/libdrmframework.so", |
| 619 | "/system/lib/libstagefright_amrnb_common.so", |
| 620 | "/system/lib/libstagefright.so", |
| 621 | "/system/lib/libmtp.so", |
| 622 | "/system/lib/libjhead.so", |
| 623 | "/system/lib/libexif.so", |
| 624 | "/system/lib/libmedia_jni.so", |
| 625 | "/system/lib/libsoundpool.so", |
| 626 | "/system/lib/libaudioeffect_jni.so", |
| 627 | "/system/lib/librs_jni.so", |
| 628 | "/system/lib/libjavacrypto.so", |
| 629 | "/system/lib/libandroid.so", |
| 630 | "/system/lib/libcompiler_rt.so", |
| 631 | "/system/lib/libjnigraphics.so", |
| 632 | "/system/lib/libwebviewchromium_loader.so", |
| 633 | "/system/lib/libion.so", |
| 634 | "/vendor/lib/hw/gralloc.exynos5.so", |
| 635 | "/vendor/lib/egl/libGLES_mali.so", |
| 636 | ]), |
| 637 | "default" : Device( |
| 638 | nativeBuildDir = "../native/debug-13-armeabi-v7a", |
| 639 | deviceGdbCmd = "lib/gdbserver", |
| 640 | hostGdbBins = { |
| 641 | "linux" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb")), |
| 642 | "windows" : common.shellquote(os.path.join(common.ANDROID_NDK_PATH, "toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb")) |
| 643 | }, |
| 644 | appProcessName = "app_process", |
| 645 | linkerName = "linker", |
| 646 | libraries = [ |
| 647 | ]), |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 648 | } |
| 649 | |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 650 | parser.add_argument('--adb', dest='adbCmd', default=common.ADB_BIN, help="Path to adb command. Use absolute paths.") |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 651 | parser.add_argument('--deqp-commandline', dest='deqpCmdLine', default="--deqp-log-filename=/sdcard/TestLog.qpa", help="Command line arguments passed to dEQP test binary.") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 652 | parser.add_argument('--gdb', dest='gdbCmd', default=None, help="gdb command used by script. Use absolute paths") |
| 653 | parser.add_argument('--device-gdb', dest='deviceGdbCmd', default=None, help="gdb command used by script on device.") |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 654 | parser.add_argument('--target-gdb-port', dest='targetGDBPort', default=60001, type=int, help="Port used by gdbserver on target.") |
| 655 | parser.add_argument('--host-gdb-port', dest='hostGDBPort', default=60002, type=int, help="Host port that is forwarded to device gdbserver port.") |
| 656 | parser.add_argument('--jdb', dest='jdbCmd', default="jdb", help="Path to jdb command. Use absolute paths.") |
| 657 | parser.add_argument('--jdb-port', dest='jdbPort', default=60003, type=int, help="Host port used to forward jdb commands to device.") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 658 | parser.add_argument('--build-dir', dest='buildDir', default=None, help="Path to dEQP native build directory.") |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 659 | parser.add_argument('--device-libs', dest='deviceLibs', default=[], nargs='+', help="List of libraries that should be pulled from device for debugging.") |
| 660 | parser.add_argument('--breakpoints', dest='breakpoints', default=["tcu::App::App"], nargs='+', help="List of breakpoints that are set by gdb.") |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 661 | parser.add_argument('--app-process-name', dest='appProcessName', default=None, help="Name of the app_process binary.") |
| 662 | parser.add_argument('--linker-name', dest='linkerName', default=None, help="Name of the linker binary.") |
| 663 | parser.add_argument('--device', dest='device', default="default", choices=devices, help="Pull default libraries for this device.") |
| 664 | parser.add_argument('--serial','-s', dest='serial', default=None, help="-s Argument for adb.") |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 665 | |
| 666 | args = parser.parse_args() |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 667 | device = devices[args.device] |
| 668 | |
| 669 | if args.deviceGdbCmd == None: |
| 670 | args.deviceGdbCmd = device.getDeviceGdbCommand() |
| 671 | |
| 672 | if args.buildDir == None: |
| 673 | args.buildDir = device.getBuildDir() |
| 674 | |
| 675 | if args.gdbCmd == None: |
| 676 | args.gdbCmd = device.getGdbCommand(common.getPlatform()) |
| 677 | |
| 678 | if args.linkerName == None: |
| 679 | args.linkerName = device.getLinkerName() |
| 680 | |
| 681 | if args.appProcessName == None: |
| 682 | args.appProcessName = device.getAppProcessName() |
Jarkko Poyry | 3c82736 | 2014-09-02 11:48:52 +0300 | [diff] [blame] | 683 | |
| 684 | debug(adbCmd=os.path.normpath(args.adbCmd), |
Mika Isojärvi | d980831 | 2015-03-31 15:50:12 -0700 | [diff] [blame] | 685 | gdbCmd=os.path.normpath(args.gdbCmd), |
| 686 | targetGDBPort=args.targetGDBPort, |
| 687 | hostGDBPort=args.hostGDBPort, |
| 688 | jdbCmd=os.path.normpath(args.jdbCmd), |
| 689 | jdbPort=args.jdbPort, |
| 690 | deqpCmdLine=args.deqpCmdLine, |
| 691 | buildDir=args.buildDir, |
| 692 | deviceLibs=["/system/lib/libc.so", "/system/lib/libdl.so"] + args.deviceLibs + device.getLibs(), |
| 693 | breakpoints=args.breakpoints, |
| 694 | serial=args.serial, |
| 695 | deviceGdbCmd=args.deviceGdbCmd, |
| 696 | appProcessName=args.appProcessName, |
| 697 | linkerName=args.linkerName) |