From 65bd21a7d6221f3a0fa4476223c4baa984e882a9 Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Fri, 29 Sep 2017 07:44:37 +0000 Subject: [PATCH] workaround for redefined memset in ARM kernel headers Change-Id: Iffd4c4e558fc0e9a1916a9f6ec570c368b6cbbd5 --- src/cc/frontends/clang/b_frontend_action.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cc/frontends/clang/b_frontend_action.cc b/src/cc/frontends/clang/b_frontend_action.cc index 63969bb9..ab1e5591 100644 --- a/src/cc/frontends/clang/b_frontend_action.cc +++ b/src/cc/frontends/clang/b_frontend_action.cc @@ -163,8 +163,8 @@ bool ProbeVisitor::VisitUnaryOperator(UnaryOperator *E) { Expr *sub = E->getSubExpr(); string rhs = rewriter_.getRewrittenText(expansionRange(sub->getSourceRange())); string text; - text = "({ typeof(" + E->getType().getAsString() + ") _val; memset(&_val, 0, sizeof(_val));"; - text += " bpf_probe_read(&_val, sizeof(_val), (u64)"; + text = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));"; + text += " bpf_probe_read(&_val, sizeof(_val), (char *)"; text += rhs + "); _val; })"; rewriter_.ReplaceText(expansionRange(E->getSourceRange()), text); return true; @@ -199,8 +199,8 @@ bool ProbeVisitor::VisitMemberExpr(MemberExpr *E) { string rhs = rewriter_.getRewrittenText(expansionRange(SourceRange(rhs_start, E->getLocEnd()))); string base_type = base->getType()->getPointeeType().getAsString(); string pre, post; - pre = "({ typeof(" + E->getType().getAsString() + ") _val; memset(&_val, 0, sizeof(_val));"; - pre += " bpf_probe_read(&_val, sizeof(_val), (u64)"; + pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));"; + pre += " bpf_probe_read(&_val, sizeof(_val), (char *)"; post = " + offsetof(" + base_type + ", " + rhs + ")"; post += "); _val; })"; rewriter_.InsertText(E->getLocStart(), pre); @@ -341,7 +341,7 @@ bool BTypeVisitor::VisitCallExpr(CallExpr *Call) { txt += "typeof(" + name + ".leaf) *_leaf = " + lookup + ", &_key); "; txt += "if (_leaf) (*_leaf)++; "; if (desc->second.type == BPF_MAP_TYPE_HASH) { - txt += "else { typeof(" + name + ".leaf) _zleaf; memset(&_zleaf, 0, sizeof(_zleaf)); "; + txt += "else { typeof(" + name + ".leaf) _zleaf; __builtin_memset(&_zleaf, 0, sizeof(_zleaf)); "; txt += "_zleaf++; "; txt += update + ", &_key, &_zleaf, BPF_NOEXIST); } "; } -- 2.34.1