Chromium Code Reviews| Index: pydir/szbuild.py |
| diff --git a/pydir/szbuild.py b/pydir/szbuild.py |
| index 8a72fd67d3d1c575b0fab2819fbd374b6d6185a9..e4d5231c254d156a9be447bd322808da9c9338af 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,6 +216,7 @@ 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) |
| @@ -217,9 +224,10 @@ def ProcessPexe(args, pexe, exe): |
| 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) |
| + 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 +274,47 @@ 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, |
| + opt_level=opt_level_map[opt_level], root=nacl_root), |
|
jvoung (off chromium)
2015/02/23 17:58:36
Looks like opt_level isn't needed for this link in
Jim Stichnoth
2015/02/23 21:38:19
Good point. The "ld" man page (assuming that's wh
|
| + echo=args.verbose) |
| + else: |
| + shellcmd(( |
| + '{ld} -m32 {partial} -o {exe} -O{opt_level} ' + |
| + # 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, |
| + opt_level=opt_level_map[opt_level], 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) |