Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1707)

Unified Diff: pydir/szbuild.py

Issue 944333002: Subzero: Update tests and build scripts for sandboxing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: More code review changes Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pydir/crosstest.py ('k') | pydir/szbuild_spec2k.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pydir/szbuild.py
diff --git a/pydir/szbuild.py b/pydir/szbuild.py
index 8a72fd67d3d1c575b0fab2819fbd374b6d6185a9..cad4e7d519a03e0b12349acf0a4f1bf90065cf6a 100755
--- a/pydir/szbuild.py
+++ b/pydir/szbuild.py
@@ -83,6 +83,8 @@ def AddOptionalArgs(argparser):
argparser.add_argument('--filetype', default='iasm', dest='filetype',
choices=['obj', 'asm', 'iasm'],
help='Output file type. Default %(default)s.')
+ argparser.add_argument('--sandbox', dest='sandbox', action='store_true',
+ help='Enabled sandboxing in the translator')
argparser.add_argument('--verbose', '-v', dest='verbose',
action='store_true',
help='Display some extra debugging output')
@@ -150,10 +152,12 @@ def ProcessPexe(args, pexe, exe):
pexe = pipes.quote(pexe)
nacl_root = FindBaseNaCl()
+ path_addition = (
+ '{root}/toolchain/linux_x86/pnacl_newlib/bin'
+ ).format(root=nacl_root)
os.environ['PATH'] = (
- '{root}/toolchain/linux_x86/pnacl_newlib/bin{sep}' +
- '{path}'
- ).format(root=nacl_root, sep=os.pathsep, path=os.environ['PATH'])
+ '{dir}{sep}{path}'
+ ).format(dir=path_addition, sep=os.pathsep, path=os.environ['PATH'])
obj_llc = pexe_base + '.llc.o'
obj_sz = pexe_base + '.sz.o'
asm_sz = pexe_base + '.sz.s'
@@ -168,9 +172,8 @@ def ProcessPexe(args, pexe, exe):
llvm2ice = (
'{root}/toolchain_build/src/subzero/llvm2ice'
).format(root=nacl_root)
- llcbin = (
- '{root}/toolchain/linux_x86/pnacl_newlib/bin/llc'
- ).format(root=nacl_root)
+ llcbin = 'llc'
+ gold = 'le32-nacl-ld.gold'
opt_level = args.optlevel
opt_level_map = { 'm1':'0', '-1':'0', '0':'0', '1':'1', '2':'2' }
hybrid = args.include or args.exclude
@@ -180,19 +183,22 @@ def ProcessPexe(args, pexe, exe):
NewerThanOrNotThere(llcbin, obj_llc)):
# Only run pnacl-translate in hybrid mode.
shellcmd(['pnacl-translate',
+ '-split-module=1',
'-ffunction-sections',
'-fdata-sections',
'-c',
- '-arch', 'x86-32-linux',
+ '-arch', 'x86-32' if args.sandbox else 'x86-32-linux',
'-O' + opt_level_map[opt_level],
'--pnacl-driver-append-LLC_FLAGS_EXTRA=-externalize',
'-o', obj_llc] +
+ (['--pnacl-driver-verbose'] if args.verbose else []) +
args.llc_args +
[pexe],
echo=args.verbose)
- shellcmd((
- 'objcopy --redefine-sym _start=_user_start {obj}'
- ).format(obj=obj_llc), echo=args.verbose)
+ if not args.sandbox:
+ shellcmd((
+ 'objcopy --redefine-sym _start=_user_start {obj}'
+ ).format(obj=obj_llc), echo=args.verbose)
# Generate llc syms file for consistency, even though it's not used.
shellcmd((
'nm {obj} | sed -n "s/.* [a-zA-Z] //p" > {sym}'
@@ -210,16 +216,20 @@ def ProcessPexe(args, pexe, exe):
(['-externalize',
'-ffunction-sections',
'-fdata-sections'] if hybrid else []) +
+ (['-sandbox'] if args.sandbox else []) +
args.sz_args +
[pexe],
echo=args.verbose)
if args.filetype != 'obj':
shellcmd((
- 'llvm-mc -arch=x86 -filetype=obj -o {obj} {asm}'
- ).format(asm=asm_sz, obj=obj_sz), echo=args.verbose)
- shellcmd((
- 'objcopy --redefine-sym _start=_user_start {obj}'
- ).format(obj=obj_sz), echo=args.verbose)
+ 'llvm-mc -triple={triple} -filetype=obj -o {obj} {asm}'
+ ).format(asm=asm_sz, obj=obj_sz,
+ triple='i686-nacl' if args.sandbox else 'i686'),
+ echo=args.verbose)
+ if not args.sandbox:
+ shellcmd((
+ 'objcopy --redefine-sym _start=_user_start {obj}'
+ ).format(obj=obj_sz), echo=args.verbose)
if hybrid:
shellcmd((
'nm {obj} | sed -n "s/.* [a-zA-Z] //p" > {sym}'
@@ -266,29 +276,46 @@ def ProcessPexe(args, pexe, exe):
'objcopy -w --localize-symbol="*" {partial}'
).format(partial=obj_partial), echo=args.verbose)
shellcmd((
- 'objcopy --globalize-symbol=_user_start {partial}'
- ).format(partial=obj_partial), echo=args.verbose)
+ 'objcopy --globalize-symbol={start} {partial}'
+ ).format(partial=obj_partial,
+ start='_start' if args.sandbox else '_user_start'),
+ echo=args.verbose)
# Run the linker regardless of hybrid mode.
linker = (
'{root}/../third_party/llvm-build/Release+Asserts/bin/clang'
).format(root=nacl_root)
- shellcmd((
- '{ld} -m32 {partial} -o {exe} -O{opt_level} ' +
- # Keep the rest of this command line (except szrt.c) in sync
- # with RunHostLD() in pnacl-translate.py.
- '{root}/toolchain/linux_x86/pnacl_newlib/translator/x86-32-linux/lib/' +
- '{{unsandboxed_irt,irt_random,irt_query_list}}.o ' +
- '{root}/toolchain_build/src/subzero/runtime/szrt.c ' +
- '{root}/toolchain_build/src/subzero/runtime/szrt_i686.ll ' +
- '-lpthread -lrt'
- ).format(ld=linker, partial=obj_partial, exe=exe,
- opt_level=opt_level_map[opt_level], root=nacl_root),
- echo=args.verbose)
+ if args.sandbox:
+ linklib = ('{root}/toolchain/linux_x86/pnacl_newlib/translator/' +
+ 'x86-32/lib').format(root=nacl_root)
+ shellcmd((
+ '{gold} -nostdlib --no-fix-cortex-a8 --eh-frame-hdr -z text ' +
+ '--build-id --entry=__pnacl_start -static ' +
+ '{linklib}/crtbegin.o {partial} ' +
+ '{root}/toolchain_build/src/subzero/build/runtime/' +
+ 'szrt_sb_x8632.o ' +
+ '{linklib}/libpnacl_irt_shim_dummy.a --start-group ' +
+ '{linklib}/libgcc.a {linklib}/libcrt_platform.a ' +
+ '--end-group {linklib}/crtend.o --undefined=_start ' +
+ '-o {exe}'
+ ).format(gold=gold, linklib=linklib, partial=obj_partial, exe=exe,
+ root=nacl_root),
+ echo=args.verbose)
+ else:
+ shellcmd((
+ '{ld} -m32 {partial} -o {exe} ' +
+ # Keep the rest of this command line (except szrt_native_x8632.o) in
+ # sync with RunHostLD() in pnacl-translate.py.
+ '{root}/toolchain/linux_x86/pnacl_newlib/translator/x86-32-linux/' +
+ 'lib/{{unsandboxed_irt,irt_random,irt_query_list}}.o ' +
+ '{root}/toolchain_build/src/subzero/build/runtime/' +
+ 'szrt_native_x8632.o -lpthread -lrt'
+ ).format(ld=linker, partial=obj_partial, exe=exe, root=nacl_root),
+ echo=args.verbose)
# Put the extra verbose printing at the end.
if args.verbose:
- print 'PATH={path}'.format(path=os.environ['PATH'])
+ print 'PATH: {path}'.format(path=path_addition)
if hybrid:
print 'include={regex}'.format(regex=re_include_str)
print 'exclude={regex}'.format(regex=re_exclude_str)
« no previous file with comments | « pydir/crosstest.py ('k') | pydir/szbuild_spec2k.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698