Merge gerrit/vulkan-cts-1.0.1 into gerrit/vulkan-cts-1.0.2
[platform/upstream/VK-GL-CTS.git] / android / scripts / debug.py
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
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
34 def 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
65 def 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
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
271 if __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)