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

Unified Diff: chrome/nacl/nacl_fork_delegate_linux.cc

Issue 7655010: Reserve 1GB at the base of the address space of linux nacl_helper for Native Client module. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 | « chrome/nacl.gypi ('k') | chrome/nacl/nacl_helper_bootstrap_linux.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/nacl/nacl_fork_delegate_linux.cc
diff --git a/chrome/nacl/nacl_fork_delegate_linux.cc b/chrome/nacl/nacl_fork_delegate_linux.cc
index 794cfdaed0ee09a22f955f1cb877af9f3d3da4a2..e5ee01a3c5168490811a5cf68c073557db4b5f40 100644
--- a/chrome/nacl/nacl_fork_delegate_linux.cc
+++ b/chrome/nacl/nacl_fork_delegate_linux.cc
@@ -13,9 +13,11 @@
#include "base/eintr_wrapper.h"
#include "base/logging.h"
#include "base/file_path.h"
+#include "base/path_service.h"
#include "base/process_util.h"
#include "content/common/unix_domain_socket_posix.h"
#include "content/common/zygote_fork_delegate_linux.h"
+#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/nacl_helper_linux.h"
@@ -40,18 +42,24 @@ void NaClForkDelegate::Init(const bool sandboxed,
base::file_handle_mapping_vector fds_to_map;
fds_to_map.push_back(std::make_pair(fds[1], kNaClZygoteDescriptor));
fds_to_map.push_back(std::make_pair(sandboxdesc, kNaClSandboxDescriptor));
- // TODO(bradchen): Before making this the default for release builds,
- // replace command line switch with PathService::Get().
- const std::string nacl_zygote_exe =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kNaClLinuxHelper);
+ // TODO(bradchen): To make this the default for release builds,
+ // remove command line switch.
ready_ = false;
- if (nacl_zygote_exe.length() != 0) {
+ const bool use_helper = CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kNaClLinuxHelper);
+ FilePath helper_exe;
+ if (use_helper && PathService::Get(chrome::FILE_NACL_HELPER, &helper_exe)) {
CommandLine::StringVector argv = CommandLine::ForCurrentProcess()->argv();
- argv[0] = nacl_zygote_exe;
+ argv[0] = helper_exe.value();
base::LaunchOptions options;
options.fds_to_remap = &fds_to_map;
options.clone_flags = CLONE_FS | SIGCHLD;
+ // LD_BIND_NOW forces non-lazy binding in the dynamic linker, to
+ // prevent the linker from trying to look at the text of the nacl_helper
+ // program after it has been replaced by the nacl module.
+ base::environment_vector env;
+ env.push_back(std::make_pair("LD_BIND_NOW", "1"));
+ options.environ = &env;
ready_ = base::LaunchProcess(argv, options, NULL);
// parent and error cases are handled below
}
« no previous file with comments | « chrome/nacl.gypi ('k') | chrome/nacl/nacl_helper_bootstrap_linux.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698