fix 'cgroupsockaddr' support

... it does prefix matching - and first match wins.

By appending / to the strings this no longer matters.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I54f41fbccd2632334adb9d1ae4fcc44cd1b0141f
diff --git a/libbpf_android/Loader.cpp b/libbpf_android/Loader.cpp
index 9fd7dff..77b865a 100644
--- a/libbpf_android/Loader.cpp
+++ b/libbpf_android/Loader.cpp
@@ -28,9 +28,9 @@
 #include <sys/utsname.h>
 #include <unistd.h>
 
-// This is BpfLoader v0.6
+// This is BpfLoader v0.7
 #define BPFLOADER_VERSION_MAJOR 0u
-#define BPFLOADER_VERSION_MINOR 6u
+#define BPFLOADER_VERSION_MINOR 7u
 #define BPFLOADER_VERSION ((BPFLOADER_VERSION_MAJOR << 16) | BPFLOADER_VERSION_MINOR)
 
 #include "../progs/include/bpf_map_def.h"
@@ -90,18 +90,15 @@
  * Instead use the DEFINE_(BPF|XDP)_(PROG|MAP)... & LICENSE/CRITICAL macros.
  */
 sectionType sectionNameTypes[] = {
-        {"kprobe", BPF_PROG_TYPE_KPROBE},
-        {"tracepoint", BPF_PROG_TYPE_TRACEPOINT},
-        {"skfilter", BPF_PROG_TYPE_SOCKET_FILTER},
-        {"cgroupskb", BPF_PROG_TYPE_CGROUP_SKB},
-        {"schedcls", BPF_PROG_TYPE_SCHED_CLS},
-        {"schedact", BPF_PROG_TYPE_SCHED_ACT},
-        {"cgroupsock", BPF_PROG_TYPE_CGROUP_SOCK},
-        {"xdp", BPF_PROG_TYPE_XDP},
-        {"cgroupsockaddr", BPF_PROG_TYPE_CGROUP_SOCK_ADDR},
-
-        /* End of table */
-        {"END", BPF_PROG_TYPE_UNSPEC},
+        {"cgroupskb/", BPF_PROG_TYPE_CGROUP_SKB},
+        {"cgroupsock/", BPF_PROG_TYPE_CGROUP_SOCK},
+        {"cgroupsockaddr/", BPF_PROG_TYPE_CGROUP_SOCK_ADDR},
+        {"kprobe/", BPF_PROG_TYPE_KPROBE},
+        {"schedact/", BPF_PROG_TYPE_SCHED_ACT},
+        {"schedcls/", BPF_PROG_TYPE_SCHED_CLS},
+        {"skfilter/", BPF_PROG_TYPE_SOCKET_FILTER},
+        {"tracepoint/", BPF_PROG_TYPE_TRACEPOINT},
+        {"xdp/", BPF_PROG_TYPE_XDP},
 };
 
 typedef struct {
@@ -283,8 +280,8 @@
 }
 
 static enum bpf_prog_type getSectionType(string& name) {
-    for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++)
-        if (StartsWith(name, sectionNameTypes[i].name)) return sectionNameTypes[i].type;
+    for (auto& snt : sectionNameTypes)
+        if (StartsWith(name, snt.name)) return snt.type;
 
     return BPF_PROG_TYPE_UNSPEC;
 }
@@ -292,21 +289,19 @@
 /* If ever needed
 static string getSectionName(enum bpf_prog_type type)
 {
-    for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++)
-        if (sectionNameTypes[i].type == type)
-            return string(sectionNameTypes[i].name);
+    for (auto& snt : sectionNameTypes)
+        if (snt.type == type)
+            return string(snt.name);
 
     return NULL;
 }
 */
 
 static bool isRelSection(codeSection& cs, string& name) {
-    for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++) {
-        sectionType st = sectionNameTypes[i];
+    for (auto& snt : sectionNameTypes) {
+        if (snt.type != cs.type) continue;
 
-        if (st.type != cs.type) continue;
-
-        if (StartsWith(name, string(".rel") + st.name + "/"))
+        if (StartsWith(name, string(".rel") + snt.name))
             return true;
         else
             return false;