if (!symbols)
                return -EINVAL;
 
-
        scn = elf_sec_by_idx(obj, obj->efile.maps_shndx);
        data = elf_sec_data(obj, scn);
        if (!scn || !data) {
                        return -LIBBPF_ERRNO__FORMAT;
                }
 
+               if (GELF_ST_TYPE(sym.st_info) == STT_SECTION
+                   || GELF_ST_BIND(sym.st_info) == STB_LOCAL) {
+                       pr_warn("map '%s' (legacy): static maps are not supported\n", map_name);
+                       return -ENOTSUP;
+               }
+
                map->libbpf_type = LIBBPF_MAP_UNSPEC;
                map->sec_idx = sym.st_shndx;
                map->sec_offset = sym.st_value;
                pr_debug("map '%s': found inner map definition.\n", map->name);
 }
 
+static const char *btf_var_linkage_str(__u32 linkage)
+{
+       switch (linkage) {
+       case BTF_VAR_STATIC: return "static";
+       case BTF_VAR_GLOBAL_ALLOCATED: return "global";
+       case BTF_VAR_GLOBAL_EXTERN: return "extern";
+       default: return "unknown";
+       }
+}
+
 static int bpf_object__init_user_btf_map(struct bpf_object *obj,
                                         const struct btf_type *sec,
                                         int var_idx, int sec_idx,
                        map_name, btf_kind_str(var));
                return -EINVAL;
        }
-       if (var_extra->linkage != BTF_VAR_GLOBAL_ALLOCATED &&
-           var_extra->linkage != BTF_VAR_STATIC) {
-               pr_warn("map '%s': unsupported var linkage %u.\n",
-                       map_name, var_extra->linkage);
+       if (var_extra->linkage != BTF_VAR_GLOBAL_ALLOCATED) {
+               pr_warn("map '%s': unsupported map linkage %s.\n",
+                       map_name, btf_var_linkage_str(var_extra->linkage));
                return -EOPNOTSUPP;
        }