Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # -*- python -*- | 1 # -*- python -*- |
| 2 # Copyright (c) 2014 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2014 The Native Client Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 Import('env') | 6 Import('env') |
| 7 | 7 |
| 8 if not env.Bit('bitcode'): | 8 if not env.Bit('bitcode'): |
| 9 Return() | 9 Return() |
| 10 # Translating the PSO to an ELF DSO doesn't work on x86-64 yet. The | 10 # Translating the PSO to an ELF DSO doesn't work on x86-64 yet. The |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 45 | 45 |
| 46 def PsoFromLLVMAssembly(base_name): | 46 def PsoFromLLVMAssembly(base_name): |
| 47 bitcode_file = env.Command( | 47 bitcode_file = env.Command( |
| 48 '%s.bc' % base_name, ['%s.ll' % base_name], | 48 '%s.bc' % base_name, ['%s.ll' % base_name], |
| 49 [Action('${ASCOM}', '${ASCOMSTR}')]) | 49 [Action('${ASCOM}', '${ASCOMSTR}')]) |
| 50 return MakeAndTranslatePso(base_name, [bitcode_file], | 50 return MakeAndTranslatePso(base_name, [bitcode_file], |
| 51 # Skip PNaCl passes because they add TLS functions. | 51 # Skip PNaCl passes because they add TLS functions. |
| 52 llvm_passes='') | 52 llvm_passes='') |
| 53 | 53 |
| 54 | 54 |
| 55 LLVM_PASSES = ( | |
| 56 # The following is a subset of "-pnacl-abi-simplify-preopt". We don't | |
| 57 # want to run the full "-pnacl-abi-simplify-preopt" because it | |
| 58 # internalizes symbols that we want to export via "-convert-to-pso". | |
| 59 '-resolve-aliases ' | |
| 60 '-nacl-global-cleanup ' | |
| 61 '-expand-varargs ' | |
| 62 '-rewrite-pnacl-library-calls ' | |
| 63 '-rewrite-llvm-intrinsic-calls ' | |
| 64 # Convert thread-local variables into non-thread-local global variables | |
| 65 # for now because ConvertToPSO doesn't support TLS yet. | |
| 66 '-minsfi-strip-tls ' | |
| 67 '-convert-to-pso ' | |
| 68 '-pnacl-abi-simplify-postopt') | |
| 69 | |
| 70 | |
| 55 def MakeAndTranslatePll(dest, source_file): | 71 def MakeAndTranslatePll(dest, source_file): |
| 56 return MakeAndTranslatePso( | 72 return MakeAndTranslatePso( |
| 57 dest, [env.ComponentObject(source_file)], | 73 dest, [env.ComponentObject(source_file)], |
| 58 # Skip the pre-opt passes because they add TLS functions. However, | 74 # Skip the pre-opt passes because they add TLS functions. However, |
| 59 # we still need to run the post-opt passes so that the LLVM IR passes | 75 # we still need to run the post-opt passes so that the LLVM IR passes |
| 60 # the PNaCl ABI checker. | 76 # the PNaCl ABI checker. |
| 61 llvm_passes='-convert-to-pso -pnacl-abi-simplify-postopt') | 77 llvm_passes=LLVM_PASSES) |
| 62 | 78 |
| 63 | 79 |
| 64 # Under SFI NaCl, the loader currently depends on the allocate_code_data() | 80 # Under SFI NaCl, the loader currently depends on the allocate_code_data() |
| 65 # interface provided by the IRT. | 81 # interface provided by the IRT. |
| 66 is_broken = not env.Bit('tests_use_irt') and not env.Bit('nonsfi_nacl') | 82 is_broken = not env.Bit('tests_use_irt') and not env.Bit('nonsfi_nacl') |
| 67 | 83 |
| 68 dso1 = MakeAndTranslatePso( | 84 dso1 = MakeAndTranslatePso( |
| 69 'test_pso', [env.ComponentObject('test_pso.c')], | 85 'test_pso', [env.ComponentObject('test_pso.c')], |
| 70 llvm_passes='-pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt') | 86 llvm_passes='-pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt') |
| 71 dso2 = PsoFromLLVMAssembly('data_only_pso') | 87 dso2 = PsoFromLLVMAssembly('data_only_pso') |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 'pll_loader_test', ['pll_loader_test.cc'], | 126 'pll_loader_test', ['pll_loader_test.cc'], |
| 111 EXTRA_LIBS=['${NONIRT_LIBS}', 'pll_loader']) | 127 EXTRA_LIBS=['${NONIRT_LIBS}', 'pll_loader']) |
| 112 | 128 |
| 113 node = env.CommandSelLdrTestNacl( | 129 node = env.CommandSelLdrTestNacl( |
| 114 'pll_loader_test.out', pll_loader_test, [test_pll_a, test_pll_b], | 130 'pll_loader_test.out', pll_loader_test, [test_pll_a, test_pll_b], |
| 115 # Add '-a' to enable filesystem access for opening DSOs. | 131 # Add '-a' to enable filesystem access for opening DSOs. |
| 116 sel_ldr_flags=['-a']) | 132 sel_ldr_flags=['-a']) |
| 117 env.AddNodeToTestSuite( | 133 env.AddNodeToTestSuite( |
| 118 node, ['small_tests', 'toolchain_tests'], | 134 node, ['small_tests', 'toolchain_tests'], |
| 119 'run_pll_loader_test', is_broken=is_broken) | 135 'run_pll_loader_test', is_broken=is_broken) |
| 136 | |
| 137 | |
| 138 libc_obj = env.Command( | |
| 139 'libc${OBJSUFFIX}', | |
| 140 # libnacl should come first so that it can override definitions in libc. | |
| 141 [env.File('${LIB_DIR}/libnacl.a'), | |
| 142 env.File('${NACL_SDK_LIB}/libc.a'), | |
| 143 env.ComponentObject('libc_entry.c')], | |
| 144 '${LD} -r --whole-archive ${SOURCES} -o ${TARGET}') | |
| 145 | |
| 146 translated_pll_libc = MakeAndTranslatePso( | |
| 147 'translated_pll_libc', libc_obj, | |
| 148 llvm_passes=LLVM_PASSES) | |
| 149 translated_pll_hello_world = MakeAndTranslatePso( | |
| 150 'translated_pll_hello_world', | |
| 151 [env.ComponentObject('hello_world${OBJSUFFIX}', | |
| 152 '../hello_world/hello_world.c')], | |
| 153 llvm_passes=LLVM_PASSES) | |
| 154 | |
| 155 # Ideally we would have this ComponentProgram() definition in | |
| 156 # src/untrusted/pll_loader/nacl.scons instead; see the comment there for | |
| 157 # why we don't. | |
| 158 pll_loader = env.ComponentProgram( | |
|
Sean Klein
2016/02/29 18:18:07
So pll_loader is a library (built in src/unstruste
Mark Seaborn
2016/02/29 20:08:43
That overloading doesn't cause any technical probl
Sean Klein
2016/02/29 20:10:39
I know it's not a technical problem, but I wanted
Mark Seaborn
2016/02/29 22:26:11
OK, done.
| |
| 159 'pll_loader', [], | |
| 160 EXTRA_LIBS=['${NONIRT_LIBS}', 'pll_loader_main', 'pll_loader']) | |
| 161 | |
| 162 node = env.CommandSelLdrTestNacl( | |
| 163 'pll_hello_world_test.out', pll_loader, | |
| 164 [translated_pll_libc, translated_pll_hello_world], | |
| 165 # Add '-a' to enable filesystem access for opening DSOs. | |
| 166 sel_ldr_flags=['-a'], | |
| 167 stdout_golden=env.File('../hello_world/hello_world.stdout')) | |
| 168 env.AddNodeToTestSuite( | |
| 169 node, ['small_tests', 'toolchain_tests'], | |
| 170 'run_pll_hello_world_test', is_broken=is_broken) | |
| OLD | NEW |