Pass argc/argv/envp to dso constructors
The glibc implementation of the loader passes argc/argv/envp
to all elf constructors. This change makes bionic linker
behave in the same way.
Bug: http://b/30145768
Change-Id: I1c65c42aa5305a5b133c64b5748205bbde869e0e
Test: run bionic-unit-tests --gtest_filter=dl*:Dl*
diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp
index 2b58646..a08a2e1 100644
--- a/tests/gtest_main.cpp
+++ b/tests/gtest_main.cpp
@@ -47,11 +47,26 @@
#endif
static std::string g_executable_path;
+static int g_argc;
+static char** g_argv;
+static char** g_envp;
const std::string& get_executable_path() {
return g_executable_path;
}
+int get_argc() {
+ return g_argc;
+}
+
+char** get_argv() {
+ return g_argv;
+}
+
+char** get_envp() {
+ return g_envp;
+}
+
namespace testing {
namespace internal {
@@ -1122,8 +1137,11 @@
return std::string(path, path_len);
}
-int main(int argc, char** argv) {
+int main(int argc, char** argv, char** envp) {
g_executable_path = get_proc_self_exe();
+ g_argc = argc;
+ g_argv = argv;
+ g_envp = envp;
std::vector<char*> arg_list;
for (int i = 0; i < argc; ++i) {
arg_list.push_back(argv[i]);