Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
[linux-2.6-microblaze.git] / tools / lib / bpf / libbpf_internal.h
index 4abdbe2..4135ae0 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/err.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include "libbpf_legacy.h"
 #include "relo_core.h"
 
 /* make sure libbpf doesn't use kernel-only integer typedefs */
@@ -109,9 +108,9 @@ static inline bool str_has_sfx(const char *str, const char *sfx)
        size_t str_len = strlen(str);
        size_t sfx_len = strlen(sfx);
 
-       if (sfx_len <= str_len)
-               return strcmp(str + str_len - sfx_len, sfx);
-       return false;
+       if (sfx_len > str_len)
+               return false;
+       return strcmp(str + str_len - sfx_len, sfx) == 0;
 }
 
 /* Symbol versioning is different between static and shared library.
@@ -351,6 +350,10 @@ enum kern_feature_id {
        FEAT_MEMCG_ACCOUNT,
        /* BPF cookie (bpf_get_attach_cookie() BPF helper) support */
        FEAT_BPF_COOKIE,
+       /* BTF_KIND_ENUM64 support and BTF_KIND_ENUM kflag support */
+       FEAT_BTF_ENUM64,
+       /* Kernel uses syscall wrapper (CONFIG_ARCH_HAS_SYSCALL_WRAPPER) */
+       FEAT_SYSCALL_WRAPPER,
        __FEAT_CNT,
 };
 
@@ -476,8 +479,6 @@ int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void
 __s32 btf__find_by_name_kind_own(const struct btf *btf, const char *type_name,
                                 __u32 kind);
 
-extern enum libbpf_strict_mode libbpf_mode;
-
 typedef int (*kallsyms_cb_t)(unsigned long long sym_addr, char sym_type,
                             const char *sym_name, void *ctx);
 
@@ -496,12 +497,8 @@ static inline int libbpf_err(int ret)
  */
 static inline int libbpf_err_errno(int ret)
 {
-       if (libbpf_mode & LIBBPF_STRICT_DIRECT_ERRS)
-               /* errno is already assumed to be set on error */
-               return ret < 0 ? -errno : ret;
-
-       /* legacy: on error return -1 directly and don't touch errno */
-       return ret;
+       /* errno is already assumed to be set on error */
+       return ret < 0 ? -errno : ret;
 }
 
 /* handle error for pointer-returning APIs, err is assumed to be < 0 always */
@@ -509,12 +506,7 @@ static inline void *libbpf_err_ptr(int err)
 {
        /* set errno on error, this doesn't break anything */
        errno = -err;
-
-       if (libbpf_mode & LIBBPF_STRICT_CLEAN_PTRS)
-               return NULL;
-
-       /* legacy: encode err as ptr */
-       return ERR_PTR(err);
+       return NULL;
 }
 
 /* handle pointer-returning APIs' error handling */
@@ -524,11 +516,7 @@ static inline void *libbpf_ptr(void *ret)
        if (IS_ERR(ret))
                errno = -PTR_ERR(ret);
 
-       if (libbpf_mode & LIBBPF_STRICT_CLEAN_PTRS)
-               return IS_ERR(ret) ? NULL : ret;
-
-       /* legacy: pass-through original pointer */
-       return ret;
+       return IS_ERR(ret) ? NULL : ret;
 }
 
 static inline bool str_is_empty(const char *s)
@@ -580,4 +568,9 @@ struct bpf_link * usdt_manager_attach_usdt(struct usdt_manager *man,
                                           const char *usdt_provider, const char *usdt_name,
                                           __u64 usdt_cookie);
 
+static inline bool is_pow_of_2(size_t x)
+{
+       return x && (x & (x - 1)) == 0;
+}
+
 #endif /* __LIBBPF_LIBBPF_INTERNAL_H */