|
From: <sv...@va...> - 2005-06-19 05:14:14
|
Author: njn
Date: 2005-06-19 06:14:03 +0100 (Sun, 19 Jun 2005)
New Revision: 3945
Log:
In m_redir.c, no longer need to handle the case of redirection to
a symbol -- we always redirect to a specific address. This simplifies
things a bit.
Modified:
trunk/coregrind/m_redir.c
Modified: trunk/coregrind/m_redir.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
--- trunk/coregrind/m_redir.c 2005-06-19 01:24:32 UTC (rev 3944)
+++ trunk/coregrind/m_redir.c 2005-06-19 05:14:03 UTC (rev 3945)
@@ -75,8 +75,6 @@
Addr from_addr; /* old addr */
=20
/* used for redirection */
- const Char *to_lib; /* library qualifier pattern */
- const Char *to_sym; /* symbol */
Addr to_addr; /* new addr */
=20
/* used for wrapping */
@@ -132,17 +130,9 @@
return redir->from_addr !=3D 0;
}
=20
-static inline Bool to_resolved(const CodeRedirect *redir)
-{
- if (redir->type =3D=3D R_REDIRECT)
- return redir->to_addr !=3D 0;
- vg_assert(redir->wrapper !=3D NULL);
- return True;
-}
-
Bool VG_(is_resolved)(const CodeRedirect *redir)
{
- return from_resolved(redir) && to_resolved(redir);
+ return from_resolved(redir);
}
=20
static void add_resolved(CodeRedirect *redir)
@@ -152,8 +142,7 @@
if (VG_(clo_trace_redir)) {
VG_(message)(Vg_DebugMsg, " redir resolved (%s:%s=3D%p -> ",
redir->from_lib, redir->from_sym, redir->from_addr=
);
- VG_(message)(Vg_DebugMsg, " %s:%s=3D%p)",
- redir->to_lib, redir->to_sym, redir->to_addr);
+ VG_(message)(Vg_DebugMsg, " %p)", redir->to_ad=
dr);
}
=20
if (VG_(search_transtab)(NULL, (Addr64)redir->from_addr, False)) {
@@ -192,9 +181,9 @@
else {
/* XXX leak redir */
if (VG_(clo_trace_redir))
- VG_(message)(Vg_DebugMsg, " redir %s:%s:%p->%s:%s:%p dup=
licated\n",
+ VG_(message)(Vg_DebugMsg, " redir %s:%s:%p->%p duplicate=
d\n",
redir->from_lib, redir->from_sym, redir->fro=
m_addr,
- redir->to_lib, redir->to_sym, redir->to_addr=
);
+ redir->to_addr);
}
}
break;
@@ -230,12 +219,6 @@
=20
resolved =3D VG_(is_resolved)(redir);
=20
- if (0 && VG_(clo_trace_redir))
- VG_(printf)(" consider FROM binding %s:%s -> %s:%s in %s(%s)\n",
- redir->from_lib, redir->from_sym,
- redir->to_lib, redir->to_sym,
- si->filename, si->soname);
-
vg_assert(!resolved);
=20
if (!from_resolved(redir)) {
@@ -249,25 +232,12 @@
}
}
=20
- if (!to_resolved(redir)) {
- vg_assert(redir->type =3D=3D R_REDIRECT);
- vg_assert(redir->to_sym !=3D NULL);
+ resolved =3D from_resolved(redir);
=20
- if (match_lib(redir->to_lib, si)) {
- redir->to_addr =3D VG_(reverse_search_one_symtab)(si, redir->to_sym);
- if (VG_(clo_trace_redir) && redir->to_addr !=3D 0)
- VG_(printf)(" bind TO: %p =3D %s:%s\n",=20
- redir->to_addr,redir->to_lib, redir->to_sym );
-
- }
- }
-
- resolved =3D from_resolved(redir) && to_resolved(redir);
-
if (0 && VG_(clo_trace_redir))
- VG_(printf)("resolve_redir: %s:%s from=3D%p %s:%s to=3D%p\n",
+ VG_(printf)("resolve_redir: %s:%s from=3D%p to=3D%p\n",
redir->from_lib, redir->from_sym, redir->from_addr,=20
- redir->to_lib, redir->to_sym, redir->to_addr);
+ redir->to_addr);
=20
if (resolved) add_resolved(redir);
=20
@@ -314,9 +284,8 @@
}
}
=20
-static void add_redirect_X_to_X(
- const Char *from_lib, const Char *from_sym, Addr from_addr,
- const Char *to_lib, const Char *to_sym, Addr to_addr
+static void add_redirect_X_to_addr(
+ const Char *from_lib, const Char *from_sym, Addr from_addr, Addr to_a=
ddr
)
{
CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
@@ -329,16 +298,14 @@
else redir->from_sym =3D NULL;
redir->from_addr =3D from_addr;
=20
- if (to_lib) redir->to_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, to=
_lib);
- else redir->to_lib =3D NULL;
- if (to_sym) redir->to_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, to=
_sym);
- else redir->to_sym =3D NULL;
- redir->to_addr =3D to_addr;
+ vg_assert(0 !=3D to_addr);
+ redir->to_addr =3D to_addr;
+ redir->wrapper =3D 0;
=20
if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
VG_(message)(Vg_UserMsg,=20
- "REDIRECT %s:%s(%p) to %s:%s(%p)",
- from_lib, from_sym, from_addr, to_lib, to_sym, to_add=
r);
+ "REDIRECT %s:%s(%p) to %p",
+ from_lib, from_sym, from_addr, to_addr);
=20
/* Check against all existing segments to see if this redirection
can be resolved immediately */
@@ -352,26 +319,18 @@
}
}
=20
-/* Redirect a lib/symbol reference to a function at lib/symbol */
-__attribute__((unused))
-static void add_redirect_sym_to_sym(const Char *from_lib, const Char *fr=
om_sym,
- const Char *to_lib, const Char *to_sym)
-{
- add_redirect_X_to_X(from_lib, from_sym, 0, to_lib, to_sym, 0);
-}
-
/* Redirect a lib/symbol reference to a function at addr */
static void add_redirect_sym_to_addr(const Char *from_lib, const Char *f=
rom_sym,
Addr to_addr)
{
- add_redirect_X_to_X(from_lib, from_sym, 0, NULL, NULL, to_addr);
+ add_redirect_X_to_addr(from_lib, from_sym, 0, to_addr);
}
=20
/* Redirect a function at from_addr to a function at to_addr */
__attribute__((unused)) // It is used, but not on all platforms...
static void add_redirect_addr_to_addr(Addr from_addr, Addr to_addr)
{
- add_redirect_X_to_X(NULL, NULL, from_addr, NULL, NULL, to_addr);
+ add_redirect_X_to_addr(NULL, NULL, from_addr, to_addr);
}
=20
CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *from_sy=
m,
@@ -385,15 +344,11 @@
=20
redir->type =3D R_WRAPPER;
=20
- redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
- redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
+ redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
+ redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
redir->from_addr =3D 0;
-
- redir->to_lib =3D NULL;
- redir->to_sym =3D NULL;
- redir->to_addr =3D 0;
-
- redir->wrapper =3D wrapper;
+ redir->to_addr =3D 0;
+ redir->wrapper =3D wrapper;
=20
/* Check against all existing segments to see if this redirection
can be resolved immediately */
|