2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 """Wrapper script for launching application within the sel_ldr.
17 SCRIPT_DIR
= os
.path
.dirname(os
.path
.abspath(__file__
))
18 NACL_SDK_ROOT
= os
.path
.dirname(SCRIPT_DIR
)
20 if sys
.version_info
< (2, 6, 0):
21 sys
.stderr
.write("python 2.6 or later is required run this script\n")
25 class Error(Exception):
31 sys
.stderr
.write(str(msg
) + '\n')
36 usage
= 'Usage: %prog [options] <.nexe>'
37 epilog
= 'Example: sel_ldr.py my_nexe.nexe'
38 parser
= optparse
.OptionParser(usage
, description
=__doc__
, epilog
=epilog
)
39 parser
.add_option('-v', '--verbose', action
='store_true',
40 help='Verbose output')
41 parser
.add_option('-d', '--debug', action
='store_true',
42 help='Enable debug stub')
43 parser
.add_option('--debug-libs', action
='store_true',
44 help='For dynamic executables, reference debug '
45 'libraries rather then release')
47 # To enable bash completion for this command first install optcomplete
48 # and then add this line to your .bashrc:
49 # complete -F _optcomplete sel_ldr.py
52 optcomplete
.autocomplete(parser
)
56 options
, args
= parser
.parse_args(argv
)
58 parser
.error('No executable file specified')
64 osname
= getos
.GetPlatform()
65 if not os
.path
.exists(nexe
):
66 raise Error('executable not found: %s' % nexe
)
67 if not os
.path
.isfile(nexe
):
68 raise Error('not a file: %s' % nexe
)
70 arch
, dynamic
= create_nmf
.ParseElfHeader(nexe
)
73 raise Error('Cannot run ARM executables under sel_ldr')
75 arch_suffix
= arch
.replace('-', '_')
77 sel_ldr
= os
.path
.join(SCRIPT_DIR
, 'sel_ldr_%s' % arch_suffix
)
78 irt
= os
.path
.join(SCRIPT_DIR
, 'irt_core_%s.nexe' % arch_suffix
)
81 Log('ROOT = %s' % NACL_SDK_ROOT
)
82 Log('SEL_LDR = %s' % sel_ldr
)
87 # Run sel_ldr under nacl_helper_bootstrap
88 helper
= os
.path
.join(SCRIPT_DIR
, 'nacl_helper_bootstrap_%s' % arch_suffix
)
89 Log('HELPER = %s' % helper
)
91 cmd
.append('--r_debug=0xXXXXXXXXXXXXXXXX')
92 cmd
.append('--reserved_at_zero=0xXXXXXXXXXXXXXXXX')
94 cmd
+= ['-a', '-B', irt
]
99 if not options
.verbose
:
100 cmd
+= ['-l', os
.devnull
]
103 if options
.debug_libs
:
104 libpath
= os
.path
.join(NACL_SDK_ROOT
, 'lib',
105 'glibc_%s' % arch_suffix
, 'Debug')
107 libpath
= os
.path
.join(NACL_SDK_ROOT
, 'lib',
108 'glibc_%s' % arch_suffix
, 'Release')
109 toolchain
= '%s_x86_glibc' % osname
110 sdk_lib_dir
= os
.path
.join(NACL_SDK_ROOT
, 'toolchain',
111 toolchain
, 'x86_64-nacl')
113 sdk_lib_dir
= os
.path
.join(sdk_lib_dir
, 'lib')
115 sdk_lib_dir
= os
.path
.join(sdk_lib_dir
, 'lib32')
116 ldso
= os
.path
.join(sdk_lib_dir
, 'runnable-ld.so')
118 Log('LD.SO = %s' % ldso
)
119 libpath
+= ':' + sdk_lib_dir
120 cmd
.append('--library-path')
125 # Append arguments for the executable itself.
129 rtn
= subprocess
.call(cmd
)
133 if __name__
== '__main__':
135 sys
.exit(main(sys
.argv
[1:]))
137 sys
.stderr
.write(str(e
) + '\n')