From 005bd11809a1ce65e9f2c28e884354a4741650b9 Mon Sep 17 00:00:00 2001 From: Andre McCurdy Date: Tue, 13 Dec 2016 11:29:55 +0800 Subject: [PATCH] make ld-XXX.so strlen intercept optional Hack: Depending on how glibc was compiled (e.g. optimised for size or built with _FORTIFY_SOURCE enabled) the strlen symbol might not be found in ld-XXX.so. Therefore although we should still try to intercept it, don't make it mandatory to do so. Upstream-Status: Inappropriate Signed-off-by: Andre McCurdy Signed-off-by: Jackie Huang --- coregrind/m_redir.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c index ff35009..d7d6816 100644 --- a/coregrind/m_redir.c +++ b/coregrind/m_redir.c @@ -1275,7 +1275,18 @@ static void add_hardwired_spec (const HChar* sopatt, const HChar* fnpatt, spec->to_addr = to_addr; spec->isWrap = False; spec->isGlobal = False; - spec->mandatory = mandatory; + + /* Hack: Depending on how glibc was compiled (e.g. optimised for size or + built with _FORTIFY_SOURCE enabled) the strlen symbol might not be found. + Therefore although we should still try to intercept it, don't make it + mandatory to do so. We over-ride "mandatory" here to avoid the need to + patch the many different architecture specific callers to + add_hardwired_spec(). */ + if (0==VG_(strcmp)("strlen", fnpatt)) + spec->mandatory = NULL; + else + spec->mandatory = mandatory; + /* VARIABLE PARTS */ spec->mark = False; /* not significant */ spec->done = False; /* not significant */ -- 1.9.1