[docs]classThreadManager:""" This class tracks what data is thread-local and can generate thread initialization images Most of the heavy lifting will be handled in a subclass """
[docs]defregister_object(self,obj):ifnotobj.tls_used:returnFalseiflen(self.modules)>=self.max_modules:raiseCLEError("Too many loaded modules for TLS to handle... file this as a bug")obj.tls_module_id=len(self.modules)self.modules.append(obj)returnTrue
[docs]@staticmethoddefinitialization_image(obj)->bytes|None:ifobj.tls_data_start<0:log.warning("The provided object has a negative tls_data_start. Skip TLS loading.")returnNoneifobj.tls_data_size<=0:log.warning("The provided object has an invalid tls_data_size. Skip TLS loading.")returnNonereturnobj.memory.load(obj.tls_data_start,obj.tls_data_size).ljust(obj.tls_block_size,b"\0")