Skip to content

Commit 56a2fba

Browse files
change globvar string to real global variable
1 parent 3b32313 commit 56a2fba

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

pythonbpf/vmlinux_parser/assignment_info.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from enum import Enum, auto
22
from typing import Any, Dict, List, Optional, TypedDict
33
from dataclasses import dataclass
4+
import llvmlite.ir as ir
45

56
from pythonbpf.vmlinux_parser.dependency_node import Field
67

@@ -32,4 +33,4 @@ class AssignmentInfo(TypedDict):
3233
# The key of the dict is the name of the field.
3334
# Value is a tuple that contains the global variable representing that field
3435
# along with all the information about that field as a Field type.
35-
members: Optional[Dict[str, tuple[str, Field]]] # For structs.
36+
members: Optional[Dict[str, tuple[ir.GlobalVariable, Field]]] # For structs.

pythonbpf/vmlinux_parser/ir_gen/ir_generation.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def __init__(self, llvm_module, handler: DependencyHandler, assignments):
1818
self.generated: list[str] = []
1919
self.generated_debug_info: list = []
2020
# Use struct_name and field_name as key instead of Field object
21-
self.generated_field_names: dict[str, dict[str, str]] = {}
21+
self.generated_field_names: dict[str, dict[str, ir.GlobalVariable]] = {}
2222
self.assignments: dict[str, AssignmentInfo] = assignments
2323
if not handler.is_ready:
2424
raise ImportError(
@@ -87,10 +87,10 @@ def struct_processor(self, struct, processing_stack=None):
8787
struct.name in self.generated_field_names
8888
and field_name in self.generated_field_names[struct.name]
8989
):
90-
field_co_re_name = self.generated_field_names[struct.name][
90+
field_global_variable = self.generated_field_names[struct.name][
9191
field_name
9292
]
93-
members_dict[field_name] = (field_co_re_name, field)
93+
members_dict[field_name] = (field_global_variable, field)
9494
else:
9595
raise ValueError(
9696
f"llvm global name not found for struct field {field_name}"
@@ -140,28 +140,28 @@ def gen_ir(self, struct, generated_debug_info):
140140
field_co_re_name = self._struct_name_generator(
141141
struct, field, field_index, True, 0, containing_type_size
142142
)
143-
self.generated_field_names[struct.name][field_name] = (
144-
field_co_re_name
145-
)
146143
globvar = ir.GlobalVariable(
147144
self.llvm_module, ir.IntType(64), name=field_co_re_name
148145
)
149146
globvar.linkage = "external"
150147
globvar.set_metadata("llvm.preserve.access.index", debug_info)
148+
self.generated_field_names[struct.name][field_name] = (
149+
globvar
150+
)
151151
field_index += 1
152152
continue
153153
for i in range(0, array_size):
154154
field_co_re_name = self._struct_name_generator(
155155
struct, field, field_index, True, i, containing_type_size
156156
)
157-
self.generated_field_names[struct.name][field_name] = (
158-
field_co_re_name
159-
)
160157
globvar = ir.GlobalVariable(
161158
self.llvm_module, ir.IntType(64), name=field_co_re_name
162159
)
163160
globvar.linkage = "external"
164161
globvar.set_metadata("llvm.preserve.access.index", debug_info)
162+
self.generated_field_names[struct.name][field_name] = (
163+
globvar
164+
)
165165
field_index += 1
166166
elif field.type_size is not None:
167167
array_size = field.type_size
@@ -174,26 +174,26 @@ def gen_ir(self, struct, generated_debug_info):
174174
field_co_re_name = self._struct_name_generator(
175175
struct, field, field_index, True, i, containing_type_size
176176
)
177-
self.generated_field_names[struct.name][field_name] = (
178-
field_co_re_name
179-
)
180177
globvar = ir.GlobalVariable(
181178
self.llvm_module, ir.IntType(64), name=field_co_re_name
182179
)
183180
globvar.linkage = "external"
184181
globvar.set_metadata("llvm.preserve.access.index", debug_info)
182+
self.generated_field_names[struct.name][field_name] = (
183+
globvar
184+
)
185185
field_index += 1
186186
else:
187187
field_co_re_name = self._struct_name_generator(
188188
struct, field, field_index
189189
)
190-
self.generated_field_names[struct.name][field_name] = field_co_re_name
191190
field_index += 1
192191
globvar = ir.GlobalVariable(
193192
self.llvm_module, ir.IntType(64), name=field_co_re_name
194193
)
195194
globvar.linkage = "external"
196195
globvar.set_metadata("llvm.preserve.access.index", debug_info)
196+
self.generated_field_names[struct.name][field_name] = globvar
197197
return debug_info
198198

199199
def _struct_name_generator(

0 commit comments

Comments
 (0)