[OE-core] [PATCH] glibc: add -fno-builtin-strlen when not using -O2

Andre McCurdy armccurdy at gmail.com
Tue Dec 13 09:16:45 UTC 2016


On Mon, Dec 12, 2016 at 9:14 PM, Huang, Jie (Jackie)
<Jackie.Huang at windriver.com> wrote:
>> From: Andre McCurdy [mailto:armccurdy at gmail.com]
>> 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.
>
> Thanks, It's a better patch and I will take it and send as v2 of this issue if you're
> not going to send it yourself, is it fine for you and could you provide extra info
> for the patch header like, upstream-status, written by or Signed-off-by?

Sure. I forget why I didn't submit this at the time. The full patch is:

>From d34e2a50ca5493f5a0ce9ccad83a36ac33689266 Mon Sep 17 00:00:00 2001
From: Andre McCurdy <armccurdy at gmail.com>
Date: Fri, 12 Feb 2016 18:22:12 -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 <armccurdy at gmail.com>
---
 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 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 */
-- 
1.9.1



More information about the Openembedded-core mailing list