Lines Matching defs:ext

1460 static int set_kcfg_value_tri(struct extern_desc *ext, void *ext_val,
1463 switch (ext->kcfg.type) {
1467 ext->name, value);
1488 ext->name, value);
1491 ext->is_set = true;
1495 static int set_kcfg_value_str(struct extern_desc *ext, char *ext_val,
1500 if (ext->kcfg.type != KCFG_CHAR_ARR) {
1501 pr_warn("extern (kcfg) %s=%s should be char array\n", ext->name, value);
1508 ext->name, value);
1514 if (len >= ext->kcfg.sz) {
1516 ext->name, value, len, ext->kcfg.sz - 1);
1517 len = ext->kcfg.sz - 1;
1521 ext->is_set = true;
1544 static bool is_kcfg_value_in_range(const struct extern_desc *ext, __u64 v)
1546 int bit_sz = ext->kcfg.sz * 8;
1548 if (ext->kcfg.sz == 8)
1551 /* Validate that value stored in u64 fits in integer of `ext->sz`
1563 if (ext->kcfg.is_signed)
1569 static int set_kcfg_value_num(struct extern_desc *ext, void *ext_val,
1572 if (ext->kcfg.type != KCFG_INT && ext->kcfg.type != KCFG_CHAR) {
1574 ext->name, (unsigned long long)value);
1577 if (!is_kcfg_value_in_range(ext, value)) {
1579 ext->name, (unsigned long long)value, ext->kcfg.sz);
1582 switch (ext->kcfg.sz) {
1590 ext->is_set = true;
1597 struct extern_desc *ext;
1624 ext = find_extern_by_name(obj, buf);
1625 if (!ext || ext->is_set)
1628 ext_val = data + ext->kcfg.data_off;
1633 err = set_kcfg_value_tri(ext, ext_val, *value);
1636 err = set_kcfg_value_str(ext, ext_val, value);
1643 ext->name, value);
1646 err = set_kcfg_value_num(ext, ext_val, num);
1651 pr_debug("extern (kcfg) %s=%s\n", ext->name, value);
1722 struct extern_desc *last_ext = NULL, *ext;
1727 ext = &obj->externs[i];
1728 if (ext->type == EXT_KCFG)
1729 last_ext = ext;
2531 const struct extern_desc *ext;
2533 ext = &obj->externs[i];
2534 if (ext->type == EXT_KSYM && ext->ksym.type_id) {
2781 /* .BTF and .BTF.ext don't need relocations */
3090 struct extern_desc *ext;
3117 ext = obj->externs;
3118 ext = libbpf_reallocarray(ext, obj->nr_extern + 1, sizeof(*ext));
3119 if (!ext)
3121 obj->externs = ext;
3122 ext = &ext[obj->nr_extern];
3123 memset(ext, 0, sizeof(*ext));
3126 ext->btf_id = find_extern_btf_id(obj->btf, ext_name);
3127 if (ext->btf_id <= 0) {
3129 ext_name, ext->btf_id);
3130 return ext->btf_id;
3132 t = btf__type_by_id(obj->btf, ext->btf_id);
3133 ext->name = btf__name_by_offset(obj->btf, t->name_off);
3134 ext->sym_idx = i;
3135 ext->is_weak = GELF_ST_BIND(sym.st_info) == STB_WEAK;
3137 ext->sec_btf_id = find_extern_sec_btf_id(obj->btf, ext->btf_id);
3138 if (ext->sec_btf_id <= 0) {
3140 ext_name, ext->btf_id, ext->sec_btf_id);
3141 return ext->sec_btf_id;
3143 sec = (void *)btf__type_by_id(obj->btf, ext->sec_btf_id);
3148 ext->type = EXT_KCFG;
3149 ext->kcfg.sz = btf__resolve_size(obj->btf, t->type);
3150 if (ext->kcfg.sz <= 0) {
3152 ext_name, ext->kcfg.sz);
3153 return ext->kcfg.sz;
3155 ext->kcfg.align = btf__align_of(obj->btf, t->type);
3156 if (ext->kcfg.align <= 0) {
3158 ext_name, ext->kcfg.align);
3161 ext->kcfg.type = find_kcfg_type(obj->btf, t->type,
3162 &ext->kcfg.is_signed);
3163 if (ext->kcfg.type == KCFG_UNKNOWN) {
3169 ext->type = EXT_KSYM;
3171 &ext->ksym.type_id);
3183 qsort(obj->externs, obj->nr_extern, sizeof(*ext), cmp_externs);
3196 ext = &obj->externs[i];
3197 if (ext->type != EXT_KSYM)
3200 i, ext->sym_idx, ext->name);
3211 ext = find_extern_by_name(obj, ext_name);
3212 if (!ext) {
3230 ext = &obj->externs[i];
3231 if (ext->type != EXT_KCFG)
3234 ext->kcfg.data_off = roundup(off, ext->kcfg.align);
3235 off = ext->kcfg.data_off + ext->kcfg.sz;
3237 i, ext->sym_idx, ext->kcfg.data_off, ext->name);
3246 ext = find_extern_by_name(obj, ext_name);
3247 if (!ext) {
3253 vs->offset = ext->kcfg.data_off;
3383 struct extern_desc *ext;
3386 ext = &obj->externs[i];
3387 if (ext->sym_idx == sym_idx)
3396 prog->name, i, ext->name, ext->sym_idx, insn_idx);
5959 * appends all the .BTF.ext info that used to belong to that
6011 struct extern_desc *ext;
6026 ext = &obj->externs[relo->sym_off];
6027 if (ext->type == EXT_KCFG) {
6030 insn[1].imm = ext->kcfg.data_off;
6032 if (ext->ksym.type_id) { /* typed ksyms */
6034 insn[0].imm = ext->ksym.vmlinux_btf_id;
6036 insn[0].imm = (__u32)ext->ksym.addr;
6037 insn[1].imm = ext->ksym.addr >> 32;
6104 * instructions, while .BTF.ext instruction offsets generated
6131 /* no .BTF.ext relocation if .BTF.ext is missing or kernel doesn't
6149 pr_warn("prog '%s': error relocating .BTF.ext function info: %d\n",
6158 pr_warn("prog '%s': missing .BTF.ext function info.\n", prog->name);
6162 pr_warn("prog '%s': missing .BTF.ext function info for the main program, skipping all of .BTF.ext func info.\n",
6177 pr_warn("prog '%s': error relocating .BTF.ext line info: %d\n",
6186 pr_warn("prog '%s': missing .BTF.ext line info.\n", prog->name);
6190 pr_warn("prog '%s': missing .BTF.ext line info for the main program, skipping all of .BTF.ext line info.\n",
7128 struct extern_desc *ext;
7150 ext = find_extern_by_name(obj, sym_name);
7151 if (!ext || ext->type != EXT_KSYM)
7154 if (ext->is_set && ext->ksym.addr != sym_addr) {
7156 sym_name, ext->ksym.addr, sym_addr);
7160 if (!ext->is_set) {
7161 ext->is_set = true;
7162 ext->ksym.addr = sym_addr;
7174 struct extern_desc *ext;
7183 ext = &obj->externs[i];
7184 if (ext->type != EXT_KSYM || !ext->ksym.type_id)
7187 id = btf__find_by_name_kind(obj->btf_vmlinux, ext->name,
7191 ext->name);
7196 local_type_id = ext->ksym.type_id;
7219 ext->name, local_type_id,
7225 ext->is_set = true;
7226 ext->ksym.vmlinux_btf_id = id;
7228 ext->name, id, btf_kind_str(targ_var), targ_var_name);
7238 struct extern_desc *ext;
7249 ext = &obj->externs[i];
7251 if (ext->type == EXT_KCFG &&
7252 strcmp(ext->name, "LINUX_KERNEL_VERSION") == 0) {
7253 void *ext_val = kcfg_data + ext->kcfg.data_off;
7260 err = set_kcfg_value_num(ext, ext_val, kver);
7263 pr_debug("extern (kcfg) %s=0x%x\n", ext->name, kver);
7264 } else if (ext->type == EXT_KCFG &&
7265 strncmp(ext->name, "CONFIG_", 7) == 0) {
7267 } else if (ext->type == EXT_KSYM) {
7268 if (ext->ksym.type_id)
7273 pr_warn("unrecognized extern '%s'\n", ext->name);
7283 ext = &obj->externs[i];
7284 if (ext->type == EXT_KCFG && !ext->is_set) {
7306 ext = &obj->externs[i];
7308 if (!ext->is_set && !ext->is_weak) {
7309 pr_warn("extern %s (strong) not resolved\n", ext->name);
7311 } else if (!ext->is_set) {
7313 ext->name);