Index: chrome/test/data/nacl/BUILD.gn |
diff --git a/chrome/test/data/nacl/BUILD.gn b/chrome/test/data/nacl/BUILD.gn |
index 7970bc77eb97f1686b74ce98ad1bd3acd35624b4..97d6484e790632525271a1dd6717a3cf180d539a 100644 |
--- a/chrome/test/data/nacl/BUILD.gn |
+++ b/chrome/test/data/nacl/BUILD.gn |
@@ -10,6 +10,7 @@ group("nacl") { |
newlib = "//build/toolchain/nacl:clang_newlib_${target_cpu}" |
glibc = "//build/toolchain/nacl:glibc_${target_cpu}" |
pnacl = "//build/toolchain/nacl:newlib_pnacl" |
+ nonsfi = "//build/toolchain/nacl:newlib_pnacl_nonsfi" |
deps = [ |
":exit_status_test($glibc)", |
":exit_status_test($newlib)", |
@@ -18,8 +19,10 @@ group("nacl") { |
":extension_validation_cache($newlib)", |
":irt_exception_test($glibc)", |
":irt_exception_test($newlib)", |
+ ":irt_exception_test($nonsfi)", |
":irt_exception_test($pnacl)", |
":irt_manifest_file($newlib)", |
+ ":irt_manifest_file($nonsfi)", |
":partly_invalid($newlib)", |
":pnacl_debug_url_test($pnacl)", |
":pnacl_dyncode_syscall_disabled_test($pnacl)", |
@@ -65,6 +68,7 @@ group("nacl") { |
":ppapi_progress_events($pnacl)", |
":shared_test_files($glibc)", |
":shared_test_files($newlib)", |
+ ":shared_test_files($nonsfi)", |
":shared_test_files($pnacl)", |
":simple_test($glibc)", |
":simple_test($newlib)", |
@@ -73,12 +77,19 @@ group("nacl") { |
":sysconf_nprocessors_onln_test($newlib)", |
":sysconf_nprocessors_onln_test($pnacl)", |
] |
+ if (is_linux && is_clang) { |
+ deps += [ ":nonsfi_libc_free" ] |
+ } |
} |
if (is_nacl) { |
template("nacl_test_data") { |
if (current_cpu == "pnacl") { |
- variant = "pnacl" |
+ if (is_nacl_nonsfi) { |
+ variant = "nonsfi" |
+ } else { |
+ variant = "pnacl" |
+ } |
} else if (is_nacl_glibc) { |
variant = "glibc" |
} else { |
@@ -113,6 +124,9 @@ if (is_nacl) { |
} |
nexe_target_name = target_name + "_nexe" |
+ if (is_nacl_nonsfi) { |
+ pexe_translate_target_name = target_name + "_translate_pexe" |
+ } |
nexe_copy_target_name = target_name + "_copy_nexe" |
if (generate_nmf) { |
nmf_target_name = target_name + "_nmf" |
@@ -154,8 +168,58 @@ if (is_nacl) { |
} |
} |
+ if (is_nacl_nonsfi) { |
+ action(pexe_translate_target_name) { |
+ # We specify the toolchain explicitly because in the Non-SFI case, we |
+ # still want to use the pexe built using the newlib_pnacl toolchain. |
+ tests = ":$nexe_target_name(//build/toolchain/nacl:newlib_pnacl)" |
+ |
+ pexe = get_label_info(tests, "root_out_dir") + |
+ "/${suffixed_target_name}.pexe" |
+ if (target_cpu == "x86" || target_cpu == "x64") { |
+ nmf_cpu = "x32" |
+ } else { |
+ nmf_cpu = target_cpu |
+ } |
+ nexe = "${root_out_dir}/${base_target_name}_pnacl_newlib_${nmf_cpu}_nonsfi.nexe" |
+ |
+ script = "${nacl_toolchain_bindir}/pydir/loader.py" |
+ sources = [ |
+ pexe, |
+ ] |
+ outputs = [ |
+ nexe, |
+ ] |
+ |
+ if (target_cpu == "x86" || target_cpu == "x64") { |
+ arch = "x86-32-nonsfi" |
+ } else if (target_cpu == "arm") { |
+ arch = "arm-nonsfi" |
+ } |
+ |
+ pnacl_irt_shim = "//ppapi/native_client/src/untrusted/pnacl_irt_shim:aot(//build/toolchain/nacl:newlib_pnacl_nonsfi)" |
+ |
+ args = [ |
+ "pnacl-translate", |
+ rebase_path(pexe, root_build_dir), |
+ "-o", |
+ rebase_path(nexe, root_build_dir), |
+ "-arch", |
+ arch, |
+ "-Wl,-L" + |
+ rebase_path(get_label_info(pnacl_irt_shim, "target_out_dir")), |
+ ] |
+ deps = [ |
+ ":$nexe_target_name(//build/toolchain/nacl:newlib_pnacl)", |
+ ] |
+ data_deps = [ |
+ pnacl_irt_shim, |
+ ] |
+ } |
+ } |
+ |
copy(nexe_copy_target_name) { |
- if (current_cpu == "pnacl") { |
+ if (current_cpu == "pnacl" && !is_nacl_nonsfi) { |
if (defined(invoker.nonstable_pexe) && invoker.nonstable_pexe) { |
sources = [ |
"${root_out_dir}/exe.unstripped/${suffixed_target_name}.pexe", |
@@ -165,6 +229,8 @@ if (is_nacl) { |
"${root_out_dir}/${suffixed_target_name}.pexe", |
] |
} |
+ } else if (is_nacl_nonsfi) { |
+ sources = get_target_outputs(":${pexe_translate_target_name}") |
} else { |
sources = [ |
"${root_out_dir}/${suffixed_target_name}.nexe", |
@@ -173,30 +239,51 @@ if (is_nacl) { |
outputs = [ |
"${root_build_dir}/${destination_dir}/${variant}/{{source_file_part}}", |
] |
- deps = [ |
- ":${nexe_target_name}", |
- ] |
+ if (is_nacl_nonsfi) { |
+ deps = [ |
+ ":${pexe_translate_target_name}", |
+ ] |
+ } else { |
+ deps = [ |
+ ":${nexe_target_name}", |
+ ] |
+ } |
} |
} |
if (defined(invoker.sources) && generate_nmf) { |
- generate_nmf(nmf_target_name) { |
- nmf = "${root_build_dir}/${destination_dir}/${variant}/${base_target_name}.nmf" |
- if (current_cpu == "pnacl") { |
- executables = [ "${root_build_dir}/${destination_dir}/${variant}/${suffixed_target_name}.pexe" ] |
- } else { |
- executables = [ "${root_build_dir}/${destination_dir}/${variant}/${suffixed_target_name}.nexe" ] |
- } |
- if (is_nacl_glibc) { |
- lib_prefix = "${base_target_name}_libs" |
- stage_dependencies = "${root_build_dir}/${destination_dir}/${variant}" |
+ if (is_nacl_nonsfi) { |
+ generate_nonsfi_test_nmf(nmf_target_name) { |
+ nmf = "${root_build_dir}/${destination_dir}/${variant}/${base_target_name}.nmf" |
+ files = get_target_outputs(":${nexe_copy_target_name}") |
+ executable = files[0] |
+ if (defined(invoker.nmfflags)) { |
+ nmfflags = invoker.nmfflags |
+ } |
+ deps = [ |
+ ":${nexe_copy_target_name}", |
+ ] |
} |
- if (defined(invoker.nmfflags)) { |
- nmfflags = invoker.nmfflags |
+ } else { |
+ generate_nmf(nmf_target_name) { |
+ nmf = "${root_build_dir}/${destination_dir}/${variant}/${base_target_name}.nmf" |
+ if (current_cpu == "pnacl") { |
+ executables = [ "${root_build_dir}/${destination_dir}/${variant}/${suffixed_target_name}.pexe" ] |
+ } else { |
+ executables = [ "${root_build_dir}/${destination_dir}/${variant}/${suffixed_target_name}.nexe" ] |
+ } |
+ if (is_nacl_glibc) { |
+ lib_prefix = "${base_target_name}_libs" |
+ stage_dependencies = |
+ "${root_build_dir}/${destination_dir}/${variant}" |
+ } |
+ if (defined(invoker.nmfflags)) { |
+ nmfflags = invoker.nmfflags |
+ } |
+ deps = [ |
+ ":${nexe_copy_target_name}", |
+ ] |
} |
- deps = [ |
- ":${nexe_copy_target_name}", |
- ] |
} |
} |
@@ -206,10 +293,12 @@ if (is_nacl) { |
outputs = [ |
"${root_build_dir}/${destination_dir}/${variant}/{{source_file_part}}", |
] |
+ deps = [] |
if (defined(invoker.sources)) { |
- deps = [ |
- ":${nexe_target_name}", |
- ] |
+ deps += [ ":${nexe_target_name}" ] |
+ } |
+ if (defined(invoker.files_deps)) { |
+ deps += invoker.files_deps |
} |
} |
} |
@@ -256,6 +345,54 @@ if (is_nacl) { |
] |
} |
+ source_set("ppapi_test_lib") { |
+ sources = [ |
+ # TODO(ncbray) move these files once SCons no longer depends on them. |
+ "//ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc", |
+ "//ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h", |
+ "//ppapi/native_client/tests/ppapi_test_lib/internal_utils.cc", |
+ "//ppapi/native_client/tests/ppapi_test_lib/internal_utils.h", |
+ "//ppapi/native_client/tests/ppapi_test_lib/module_instance.cc", |
+ "//ppapi/native_client/tests/ppapi_test_lib/test_interface.cc", |
+ "//ppapi/native_client/tests/ppapi_test_lib/test_interface.h", |
+ "//ppapi/native_client/tests/ppapi_test_lib/testable_callback.cc", |
+ "//ppapi/native_client/tests/ppapi_test_lib/testable_callback.h", |
+ ] |
+ deps = [ |
+ "//native_client/src/shared/gio", |
+ "//native_client/src/shared/platform", |
+ "//ppapi/native_client:ppapi_lib", |
+ ] |
+ } |
+ |
+ nacl_test_data("irt_manifest_file") { |
+ sources = [ |
+ "manifest_file/irt_manifest_file_test.cc", |
+ ] |
+ nmfflags = [ |
+ "-xtest_file:test_file.txt", |
+ "-xnmf says hello world:test_file.txt", |
+ |
+ # There is no dummy_test_file.txt file intentionally. This is just for |
+ # a test case where there is a manifest entry, but no actual file. |
+ "-xdummy_test_file:dummy_test_file.txt", |
+ ] |
+ test_files = [ "manifest_file/irt_manifest_file_test.html" ] |
+ } |
+ |
+ nacl_test_data("irt_exception_test") { |
+ sources = [ |
+ "irt_exception/irt_exception_test.cc", |
+ ] |
+ deps = [ |
+ ":ppapi_test_lib", |
+ "//native_client/src/untrusted/nacl:nacl_exception", |
+ ] |
+ test_files = [ "irt_exception/irt_exception_test.html" ] |
+ } |
+} |
+ |
+if (is_nacl && !is_nacl_nonsfi) { |
nacl_test_data("simple_test") { |
output_name = "simple" |
sources = [ |
@@ -304,26 +441,6 @@ if (is_nacl) { |
[ "sysconf_nprocessors_onln/sysconf_nprocessors_onln_test.html" ] |
} |
- source_set("ppapi_test_lib") { |
- sources = [ |
- # TODO(ncbray) move these files once SCons no longer depends on them. |
- "//ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.cc", |
- "//ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h", |
- "//ppapi/native_client/tests/ppapi_test_lib/internal_utils.cc", |
- "//ppapi/native_client/tests/ppapi_test_lib/internal_utils.h", |
- "//ppapi/native_client/tests/ppapi_test_lib/module_instance.cc", |
- "//ppapi/native_client/tests/ppapi_test_lib/test_interface.cc", |
- "//ppapi/native_client/tests/ppapi_test_lib/test_interface.h", |
- "//ppapi/native_client/tests/ppapi_test_lib/testable_callback.cc", |
- "//ppapi/native_client/tests/ppapi_test_lib/testable_callback.h", |
- ] |
- deps = [ |
- "//native_client/src/shared/gio", |
- "//native_client/src/shared/platform", |
- "//ppapi/native_client:ppapi_lib", |
- ] |
- } |
- |
nacl_test_data("ppapi_progress_events") { |
sources = [ |
"progress_events/ppapi_progress_events.cc", |
@@ -418,32 +535,6 @@ if (is_nacl) { |
] |
} |
- nacl_test_data("irt_manifest_file") { |
- sources = [ |
- "manifest_file/irt_manifest_file_test.cc", |
- ] |
- nmfflags = [ |
- "-xtest_file:test_file.txt", |
- "-xnmf says hello world:test_file.txt", |
- |
- # There is no dummy_test_file.txt file intentionally. This is just for |
- # a test case where there is a manifest entry, but no actual file. |
- "-xdummy_test_file:dummy_test_file.txt", |
- ] |
- test_files = [ "manifest_file/irt_manifest_file_test.html" ] |
- } |
- |
- nacl_test_data("irt_exception_test") { |
- sources = [ |
- "irt_exception/irt_exception_test.cc", |
- ] |
- deps = [ |
- ":ppapi_test_lib", |
- "//native_client/src/untrusted/nacl:nacl_exception", |
- ] |
- test_files = [ "irt_exception/irt_exception_test.html" ] |
- } |
- |
nacl_test_data("ppapi_extension_mime_handler") { |
sources = [ |
"extension_mime_handler/ppapi_extension_mime_handler.cc", |
@@ -592,6 +683,86 @@ if (is_nacl) { |
} |
} |
} |
+} |
+ |
+if (is_linux && is_clang) { |
+ if (target_cpu == "x86") { |
+ arch = "x86_32" |
+ } else if (target_cpu == "x64") { |
+ arch = "x86_64" |
+ } else { |
+ arch = target_cpu |
+ } |
+ |
+ config("nonsfi_libc_free_nexe_config") { |
+ cflags = [ |
+ "-Wno-sign-compare", |
+ |
+ # Stack-Smashing protector does not work with libc-free context. |
+ "-fno-stack-protector", |
+ |
+ # Optimizers may translate the original code to code which |
+ # requires builtin functions and/or relocations. Specifically, |
+ # the LLVM's optimizer translates for-loop based zero |
+ # clear to memset. |
+ "-O0", |
+ |
+ # ARM GCC emits symbols like __aeabi_unwind_cpp_pr0 in |
+ # .exidx sections without this flag. |
+ "-fno-unwind-tables", |
+ ] |
+ } |
+ |
+ executable("nonsfi_libc_free_nexe") { |
+ output_name = "libc_free_$arch" |
+ output_extension = "nexe" |
+ sources = [ |
+ "nonsfi/libc_free.c", |
+ ] |
+ |
+ # Here, we would like to link a relocatable, libc-free executable. |
+ # -shared/-fPIC make this binary relocatable. -nostdlib ensures |
+ # this is libc-free. |
+ # The program does not apply any dynamic relocations at start up, |
+ # so it cannot rely on relocations having been applied. |
+ # In addition, -fvisibility=hidden avoids creating some types |
+ # of relocation. |
+ cflags = [ |
+ "-fPIC", |
+ "-fvisibility=hidden", |
+ ] |
+ ldflags = [ |
+ "-nostdlib", |
+ "-shared", |
+ |
+ # This binary cannot relocate itself, so we should have no |
+ # undefined references left. |
+ "-Wl,--no-undefined", |
+ |
+ # Silence the warning about the unused '-pthread' argument. |
+ "-Qunused-arguments", |
+ ] |
+ defines = [ "NACL_LINUX=1" ] |
+ include_dirs = [ "../../../.." ] |
+ configs += [ ":nonsfi_libc_free_nexe_config" ] |
+ } |
- # TODO(phosek): convert the non-SFI tests. |
+ copy("nonsfi_libc_free") { |
+ sources = [ |
+ "${root_out_dir}/libc_free_${arch}.nexe", |
+ |
+ # TODO(ncbray) move into chrome/test/data/nacl when all tests are |
+ # converted. |
+ "//ppapi/native_client/tools/browser_tester/browserdata/nacltest.js", |
+ "nonsfi/irt_test.html", |
+ "nonsfi/libc_free.html", |
+ "nonsfi/libc_free.nmf", |
+ ] |
+ outputs = [ |
+ "${root_build_dir}/nacl_test_data/libc-free/{{source_file_part}}", |
+ ] |
+ deps = [ |
+ ":nonsfi_libc_free_nexe", |
+ ] |
+ } |
} |