]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Slightly disentangle main().
authorNicholas Nethercote <n.nethercote@gmail.com>
Tue, 22 Jun 2004 14:00:09 +0000 (14:00 +0000)
committerNicholas Nethercote <n.nethercote@gmail.com>
Tue, 22 Jun 2004 14:00:09 +0000 (14:00 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2433

coregrind/vg_main.c

index 6b5f701598a529d83660c88a739a0490ef94cf8b..929220e06cd553c87cab87176d13e79a9c411e57 100644 (file)
@@ -1045,17 +1045,19 @@ static Addr setup_client_stack(char **orig_argv, char **orig_envp,
    cl_esp = VG_(client_end) - stacksize;
    cl_esp = ROUNDDN(cl_esp, 16); /* make stack 16 byte aligned */
 
-   if (0)
-      printf("stringsize=%d auxsize=%d stacksize=%d\n",
-            stringsize, auxsize, stacksize);
-
-
    /* base of the string table (aligned) */
    stringbase = strtab = (char *)(VG_(client_trampoline_code) - ROUNDUP(stringsize, sizeof(int)));
 
    VG_(clstk_base) = PGROUNDDN(cl_esp);
    VG_(clstk_end)  = VG_(client_end);
 
+   if (0)
+      printf("stringsize=%d auxsize=%d stacksize=%d\n"
+             "clstk_base %x\n"
+             "clstk_end  %x\n",
+            stringsize, auxsize, stacksize, VG_(clstk_base), VG_(clstk_end));
+
+
    /* ==================== allocate space ==================== */
 
    /* allocate a stack - mmap enough space for the stack */
@@ -1185,6 +1187,10 @@ static Addr setup_client_stack(char **orig_argv, char **orig_envp,
 
    vg_assert((strtab-stringbase) == stringsize);
 
+   /* We know the initial ESP is pointing at argc/argv */
+   VG_(client_argc) = *(Int*)cl_esp;
+   VG_(client_argv) = (Char**)(cl_esp + sizeof(Int));
+
    return cl_esp;
 }
 
@@ -1633,8 +1639,7 @@ static void pre_process_cmd_line_options
    }
 }
 
-static void process_cmd_line_options
-      ( UInt* client_auxv, Addr esp_at_startup, const char* toolname )
+static void process_cmd_line_options( UInt* client_auxv, const char* toolname )
 {
    Int  i, eventually_log_fd;
    Int *auxp;
@@ -1658,10 +1663,6 @@ static void process_cmd_line_options
       }
    } 
 
-   /* We know the initial ESP is pointing at argc/argv */
-   VG_(client_argc) = *(Int *)esp_at_startup;
-   VG_(client_argv) = (Char **)(esp_at_startup + sizeof(Int));
-
    for (i = 1; i < VG_(vg_argc); i++) {
 
       Char* arg = VG_(vg_argv)[i];
@@ -2749,7 +2750,7 @@ int main(int argc, char **argv)
    env = fix_environment(environ, preload);
 
    //--------------------------------------------------------------
-   // Setup client stack and eip 
+   // Setup client stack, eip, and VG_(client_arg[cv])
    //   p: load_client()     [for 'info']
    //   p: fix_environment() [for 'env']
    //--------------------------------------------------------------
@@ -2791,6 +2792,7 @@ int main(int argc, char **argv)
    // XXX: is that necessary, now that we look for V's segments separately?
    // XXX: alternatively, if sk_pre_clo_init does use VG_(malloc)(), is it
    //      wrong to ignore any segments that might add in parse_procselfmaps?
+   //   p: setup_client_stack() [for 'VG_(client_arg[cv]']
    //--------------------------------------------------------------
    (*toolinfo->sk_pre_clo_init)();
    VG_(tool_init_dlsym)(tool_dlhandle);
@@ -2811,7 +2813,7 @@ int main(int argc, char **argv)
    //   p: setup_file_descriptors()  [for 'VG_(max_fd)']
    //   p: sk_pre_clo_init           [to set 'command_line_options' need]
    //--------------------------------------------------------------
-   process_cmd_line_options(client_auxv, esp_at_startup, tool);
+   process_cmd_line_options(client_auxv, tool);
 
    //--------------------------------------------------------------
    // Allow GDB attach