|
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