|
From: <sv...@va...> - 2005-08-10 00:03:40
|
Author: sewardj
Date: 2005-08-09 13:30:07 +0100 (Tue, 09 Aug 2005)
New Revision: 4353
Log:
m_main.c is now a glibc-free zone!
It's becoming clearer how startup should be structured. Basically the
address space manager should be started as early as possible -- much
earlier than it is at present, before any poking around at command
lines, environment variables or whatever. That's because so much of
the startup stuff depends on dynamic memory allocation, which depends
on aspacemgr.
Modified:
branches/ASPACEM/coregrind/m_main.c
Modified: branches/ASPACEM/coregrind/m_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/coregrind/m_main.c 2005-08-09 11:37:09 UTC (rev 4352=
)
+++ branches/ASPACEM/coregrind/m_main.c 2005-08-09 12:30:07 UTC (rev 4353=
)
@@ -61,8 +61,6 @@
#include "pub_core_transtab.h"
#include "pub_core_ume.h"
=20
-#include <stdlib.h>
-
#include "memcheck/memcheck.h"
=20
#ifndef AT_DCACHEBSIZE
@@ -123,7 +121,27 @@
}
}
=20
+// HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK A
+// temporary bootstrapping allocator, for use until such time as we
+// can get rid of the circularites in allocator dependencies at
+// startup.
+#define N_HACK_BYTES 10000
+static Int hack_bytes_used =3D 0;
+static HChar hack_bytes[N_HACK_BYTES];
=20
+static void* hack_malloc ( Int n )
+{
+ VG_(debugLog)(1, "main", " FIXME: hack_malloc(%d)\n", n);
+ while (n % 16) n++;
+ if (hack_bytes_used + n > N_HACK_BYTES) {
+ VG_(printf)("valgrind: N_HACK_BYTES too low. Sorry.\n");
+ VG_(exit)(0);
+ }
+ hack_bytes_used +=3D n;
+ return (void*) &hack_bytes[hack_bytes_used - n];
+}
+
+
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
/*=3D=3D=3D Global entities not referenced from generated code =
=3D=3D=3D*/
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
@@ -313,7 +331,7 @@
fd =3D VG_(open)(filename, 0, VKI_S_IRUSR);
if ( !fd.isError ) {
if ( 0 =3D=3D VG_(fstat)(fd.val, &s1) ) {
- f_clo =3D malloc(s1.st_size+1);
+ f_clo =3D VG_(malloc)(s1.st_size+1);
vg_assert(f_clo);
n =3D VG_(read)(fd.val, f_clo, s1.st_size);
if (n =3D=3D -1) n =3D 0;
@@ -395,8 +413,8 @@
=20
/* +2: +1 for null-termination, +1 for added '--' */
from =3D vg_argv0;
- vg_argv0 =3D malloc( (orig_arg_count + env_arg_count + f1_arg_coun=
t=20
- + f2_arg_count + 2) * sizeof(char **));
+ vg_argv0 =3D VG_(malloc)( (orig_arg_count + env_arg_count + f1_arg=
_count=20
+ + f2_arg_count + 2) * sizeof(char **));
vg_assert(vg_argv0);
to =3D vg_argv0;
=20
@@ -459,7 +477,7 @@
if (*cp =3D=3D VG_CLO_SEP)
vg_argc0++;
=20
- vg_argv0 =3D malloc(sizeof(char **) * (vg_argc0 + 1));
+ vg_argv0 =3D VG_(malloc)(sizeof(char **) * (vg_argc0 + 1));
vg_assert(vg_argv0);
=20
cpp =3D vg_argv0;
@@ -588,7 +606,8 @@
/* Find the vg_preload_core.so; also make room for the tool preload
library */
preload_core_path_len =3D sizeof(preload_core_so) + vgliblen + preloa=
dlen + 16;
- preload_core_path =3D malloc(preload_core_path_len);
+ /* FIXME */
+ preload_core_path =3D /*VG_(malloc)*/ hack_malloc(preload_core_path_l=
en);
vg_assert(preload_core_path);
=20
if (preload)
@@ -604,7 +623,7 @@
envc++;
=20
/* Allocate a new space */
- ret =3D malloc(sizeof(HChar *) * (envc+1+1)); /* 1 new entry + NULL *=
/
+ ret =3D /* FIXME VG_(malloc)*/ hack_malloc (sizeof(HChar *) * (envc+1=
+1)); /* 1 new entry + NULL */
vg_assert(ret);
=20
/* copy it over */
@@ -618,7 +637,7 @@
for (cpp =3D ret; cpp && *cpp; cpp++) {
if (VG_(memcmp)(*cpp, ld_preload, ld_preload_len) =3D=3D 0) {
int len =3D VG_(strlen)(*cpp) + preload_core_path_len;
- HChar *cp =3D malloc(len);
+ HChar *cp =3D /*FIXME VG_(malloc)*/ hack_malloc(len);
vg_assert(cp);
=20
VG_(snprintf)(cp, len, "%s%s:%s",
@@ -635,7 +654,7 @@
/* Add the missing bits */
if (!ld_preload_done) {
int len =3D ld_preload_len + preload_core_path_len;
- HChar *cp =3D malloc(len);
+ HChar *cp =3D /*FIXME VG_(malloc)*/ hack_malloc (len);
vg_assert(cp);
=20
VG_(snprintf)(cp, len, "%s%s", ld_preload, preload_core_path);
@@ -643,7 +662,7 @@
ret[envc++] =3D cp;
}
=20
- free(preload_core_path);
+ //FIXME VG_(free)(preload_core_path);
ret[envc] =3D NULL;
=20
return ret;
@@ -816,11 +835,11 @@
/* --- argv --- */
if (info->interp_name) {
*ptr++ =3D (Addr)copy_str(&strtab, info->interp_name);
- free(info->interp_name);
+//FIXME free(info->interp_name);
}
if (info->interp_args) {
*ptr++ =3D (Addr)copy_str(&strtab, info->interp_args);
- free(info->interp_args);
+//FIXME free(info->interp_args);
}
for (cpp =3D orig_argv; *cpp; ptr++, cpp++) {
*ptr =3D (Addr)copy_str(&strtab, *cpp);
@@ -1478,8 +1497,9 @@
VG_(bad_option)(arg);
}
skip_arg:
- if (arg !=3D vg_argv[i])
- free(arg);
+ if (arg !=3D vg_argv[i]) {
+ //FIXME free(arg);
+ }
}
=20
/* Make VEX control parameters sane */
@@ -2438,7 +2458,7 @@
=20
sp_at_startup =3D setup_client_stack(init_sp, cl_argv, env, &info,
&client_auxv);
- free(env);
+ //FIXME free(env);
}
=20
VG_(debugLog)(2, "main",
|