|
1 | 1 | from llvmlite import ir
|
2 | 2 | import ast
|
3 | 3 |
|
4 |
| -from .bpf_helper_handler import bpf_printk_emitter, bpf_ktime_get_ns_emitter |
| 4 | +from .bpf_helper_handler import bpf_printk_emitter, bpf_ktime_get_ns_emitter, bpf_map_lookup_elem_emitter |
5 | 5 | from .type_deducer import ctypes_to_ir
|
6 | 6 |
|
7 | 7 |
|
@@ -79,28 +79,31 @@ def handle_assign(module, builder, stmt, map_sym_tab, local_sym_tab):
|
79 | 79 | key_type = ir.IntType(64)
|
80 | 80 | print(f"Key type: {key_type}")
|
81 | 81 | print(f"Key val: {key_val}")
|
| 82 | + key_var = builder.alloca(key_type) |
| 83 | + key_var.align = key_type // 8 |
| 84 | + builder.store(ir.Constant( |
| 85 | + key_type, key_val), key_var) |
82 | 86 | elif isinstance(key_arg, ast.Name):
|
83 | 87 | # Check in local symtab first
|
84 | 88 | if key_arg.id in local_sym_tab:
|
85 | 89 | key_var = local_sym_tab[key_arg.id]
|
86 | 90 | key_type = key_var.type.pointee
|
87 |
| - key_val = builder.load(key_var) |
88 | 91 | elif key_arg.id in map_sym_tab:
|
89 | 92 | key_var = map_sym_tab[key_arg.id]
|
90 | 93 | key_type = key_var.type.pointee
|
91 |
| - key_val = builder.load(key_var) |
92 | 94 | else:
|
93 | 95 | print("Key variable "
|
94 | 96 | f"{key_arg.id} not found in symtabs")
|
95 | 97 | return
|
96 | 98 | print(f"Found key variable {key_arg.id} in symtab")
|
97 | 99 | print(f"Key type: {key_type}")
|
98 |
| - print(f"Key val: {key_val}") |
99 | 100 | else:
|
100 | 101 | print("Unsupported lookup key arg")
|
101 | 102 | return
|
102 | 103 |
|
103 | 104 | # TODO: generate call to bpf_map_lookup_elem
|
| 105 | + result_ptr = bpf_map_lookup_elem_emitter( |
| 106 | + map_global, key_var, module, builder) |
104 | 107 |
|
105 | 108 | else:
|
106 | 109 | print(f"Map {map_name} not found in symbol table")
|
|
0 commit comments