workaround for redefined memset in ARM kernel headers 20/153720/3
authorAdrian Szyndela <adrian.s@samsung.com>
Fri, 29 Sep 2017 07:44:37 +0000 (07:44 +0000)
committerAdrian Szyndela <adrian.s@samsung.com>
Fri, 29 Sep 2017 08:39:45 +0000 (10:39 +0200)
Change-Id: Iffd4c4e558fc0e9a1916a9f6ec570c368b6cbbd5

src/cc/frontends/clang/b_frontend_action.cc

index 63969bb..ab1e559 100644 (file)
@@ -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); } ";
           }