On Sun, Dec 11, 2016 at 11:41 PM, Huang, Jie (Jackie) <jackie.hu...@windriver.com> wrote: >> -----Original Message----- >> From: Khem Raj [mailto:raj.k...@gmail.com] >> Sent: Monday, December 12, 2016 2:37 PM >> To: Huang, Jie (Jackie) >> Cc: Patches and discussions about the oe-core layer >> Subject: Re: [OE-core] [PATCH] glibc: add -fno-builtin-strlen when not using >> -O2 >> >> On Sun, Dec 11, 2016 at 9:42 PM, <jackie.hu...@windriver.com> wrote: >> > From: Jackie Huang <jackie.hu...@windriver.com> >> > >> > The strlen will be inlined when compile with -O, -O1 or -Os, >> > so there is no symbol for strlen in ld-linux-x86-64.so.2, >> > causing a fatal error in valgrind: >> > >> > valgrind: Fatal error at startup: a function redirection >> > valgrind: which is mandatory for this platform-tool combination >> > valgrind: cannot be set up. Details of the redirection are: >> > valgrind: >> > valgrind: A must-be-redirected function >> > valgrind: whose name matches the pattern: strlen >> > valgrind: in an object with soname matching: ld-linux-x86-64.so.2 >> > >> > so add -fno-builtin-strlen when compile with -O, -O1 or -Os. >> >> This is a bug in valgrind, I read the same on forums. KDE has proposed a fix >> https://bugsfiles.kde.org/attachment.cgi?id=82043 >> can you check if this fixes the issue > > Thanks, I will check that and change to patch for valgrind if it works.
For reference, here's the patch I've been using. It's a slightly more generic fix than the one in the KDE bug report. diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c index 7e4df8d..640a346 100644 --- a/coregrind/m_redir.c +++ b/coregrind/m_redir.c @@ -1220,7 +1220,18 @@ static void add_hardwired_spec (const HChar* sopatt, const HChar* fnpatt, spec->from_fnpatt = CONST_CAST(HChar *,fnpatt); spec->to_addr = to_addr; spec->isWrap = 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 */ -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core