1# -*- coding: utf-8 -*- 2 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 23import sys 24import os 25import time 26import string 27import shutil 28import subprocess 29import signal 30import argparse 31 32import common 33 34def getADBProgramPID (adbCmd, program, serial): 35 pid = -1 36 37 process = subprocess.Popen([adbCmd] 38 + (["-s", serial] if serial != None else []) 39 + ["shell", "ps"], stdout=subprocess.PIPE) 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 65def debug ( 66 adbCmd, 67 deqpCmdLine, 68 targetGDBPort, 69 hostGDBPort, 70 jdbPort, 71 jdbCmd, 72 gdbCmd, 73 buildDir, 74 deviceLibs, 75 breakpoints, 76 serial, 77 deviceGdbCmd, 78 appProcessName, 79 linkerName 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") 88 serialArg = "-s " + serial if serial != None else "" 89 90 if os.path.exists(debugDir): 91 shutil.rmtree(debugDir) 92 93 os.makedirs(debugDir) 94 os.chdir(debugDir) 95 try: 96 # Start execution 97 print("Starting intent...") 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 + "\"\""]) 101 print("Intent started") 102 103 # Kill existing gdbservers 104 print("Check and kill existing gdbserver") 105 gdbPid = getADBProgramPID(adbCmd, "gdbserver", serial) 106 if gdbPid != -1: 107 print("Found gdbserver with PID %i" % gdbPid) 108 common.execArgs([adbCmd] 109 + (["-s", serial] if serial != None else []) 110 + ["shell", "run-as", "com.drawelements.deqp", "kill", "-9", str(gdbPid)]) 111 print("Killed gdbserver") 112 else: 113 print("Couldn't find existing gdbserver") 114 115 programPid = getADBProgramPID(adbCmd, "com.drawelements.deqp:testercore", serial) 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) 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")) 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") 138 common.execArgs([adbCmd] 139 + (["-s", serial] if serial != None else []) 140 + ["forward", "tcp:" + str(hostGDBPort), "tcp:" + str(targetGDBPort)]) 141 142 # Pull some data files for debugger 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)]) 147 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)]) 152 153 for lib in deviceLibs: 154 print("Pull library %s from device" % lib) 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))) 161 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) 164 165 # Forward local port for jdb 166 print("Forward local port to jdb port") 167 common.execArgs([adbCmd] 168 + (["-s", serial] if serial != None else []) 169 + ["forward", "tcp:" + str(jdbPort), "jdwp:" + str(programPid)]) 170 171 # Connect JDB 172 print("Start jdb process redirectd stdout to jdb-stdout.txt") 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")) 174 print("Started jdb process") 175 176 # Write gdb.setup 177 print("Write gdb.setup") 178 gdbSetup = open("gdb.setup", "wb") 179 gdbSetup.write("file %s\n" % appProcessName) 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") 192 gdbProcess = subprocess.Popen(common.shellquote(gdbCmd) + " -x gdb.setup", shell=True) 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) 211 common.execArgs([adbCmd] 212 + (["-s", serial] if serial != None else []) 213 + ["shell", "run-as", "com.drawelements.deqp", "kill", "-9", str(programPid)]) 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 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") 241 242 os.chdir(curDir) 243 244class 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 271if __name__ == "__main__": 272 parser = argparse.ArgumentParser() 273 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 ]), 648 } 649 650 parser.add_argument('--adb', dest='adbCmd', default=common.ADB_BIN, help="Path to adb command. Use absolute paths.") 651 parser.add_argument('--deqp-commandline', dest='deqpCmdLine', default="--deqp-log-filename=/sdcard/TestLog.qpa", help="Command line arguments passed to dEQP test binary.") 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.") 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.") 658 parser.add_argument('--build-dir', dest='buildDir', default=None, help="Path to dEQP native build directory.") 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.") 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.") 665 666 args = parser.parse_args() 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() 683 684 debug(adbCmd=os.path.normpath(args.adbCmd), 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) 698