MCPcopy Index your code
hub / github.com/python/cpython / process_relocations

Method process_relocations

Tools/jit/_stencils.py:251–336  ·  view source on GitHub ↗

Fix up all GOT and internal relocations for this stencil group.

(self, known_symbols: dict[str, int])

Source from the content-addressed store, hash-verified

249 self.code.holes.append(hole)
250
251 def process_relocations(self, known_symbols: dict[str, int]) -> None:
252 """Fix up all GOT and internal relocations for this stencil group."""
253 for hole in self.code.holes.copy():
254 if (
255 hole.kind
256 in {"R_AARCH64_CALL26", "R_AARCH64_JUMP26", "ARM64_RELOC_BRANCH26"}
257 and hole.value is HoleValue.ZERO
258 and hole.symbol not in self.symbols
259 ):
260 hole.func = "patch_aarch64_trampoline"
261 hole.need_state = True
262 assert hole.symbol is not None
263 if hole.symbol in known_symbols:
264 ordinal = known_symbols[hole.symbol]
265 else:
266 ordinal = len(known_symbols)
267 known_symbols[hole.symbol] = ordinal
268 self._trampolines.add(ordinal)
269 hole.addend = ordinal
270 hole.symbol = None
271 # x86_64 Darwin trampolines for external symbols
272 elif (
273 hole.kind == "X86_64_RELOC_BRANCH"
274 and hole.value is HoleValue.ZERO
275 and hole.symbol not in self.symbols
276 ):
277 hole.func = "patch_x86_64_trampoline"
278 hole.need_state = True
279 assert hole.symbol is not None
280 if hole.symbol in known_symbols:
281 ordinal = known_symbols[hole.symbol]
282 else:
283 ordinal = len(known_symbols)
284 known_symbols[hole.symbol] = ordinal
285 self._trampolines.add(ordinal)
286 hole.addend = ordinal
287 hole.symbol = None
288 elif (
289 hole.kind in _AARCH64_GOT_RELOCATIONS | _X86_GOT_RELOCATIONS
290 and hole.symbol
291 and "_JIT_" not in hole.symbol
292 and hole.value is HoleValue.GOT
293 ):
294 if hole.symbol in known_symbols:
295 ordinal = known_symbols[hole.symbol]
296 else:
297 ordinal = len(known_symbols)
298 known_symbols[hole.symbol] = ordinal
299 self._got_entries.add(ordinal)
300 self.data.pad(8)
301 for stencil in [self.code, self.data]:
302 for hole in stencil.holes:
303 if hole.value is HoleValue.GOT:
304 assert hole.symbol is not None
305 if "_JIT_" in hole.symbol:
306 # Relocations for local symbols
307 hole.value = HoleValue.DATA
308 hole.addend += self._jit_symbol_table_lookup(hole.symbol)

Callers 1

_build_stencilsMethod · 0.80

Calls 7

padMethod · 0.80
copyMethod · 0.45
addMethod · 0.45
sortMethod · 0.45

Tested by

no test coverage detected