<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _filter_defs_at_call_sites(self, defs):
 """ If we are not tracing into the function that are called in a real execution, we should properly filter the defs to account for the behavior of the skipped function at this call site. This function is a WIP. See TODOs inside. :param defs: :return: """


        # TODO: make definition killing architecture independent and calling convention independent
        # TODO: use information from a calling convention analysis
        filtered_defs = LiveDefinitions()
        for variable, locs in defs.items():
            if isinstance(variable, SimRegisterVariable):
                if self.project.arch.name == 'X86':
                    if variable.reg in (self.project.arch.registers['eax'][0],
                                        self.project.arch.registers['ecx'][0],
                                        self.project.arch.registers['edx'][0]):
                        continue

            filtered_defs.add_defs(variable, locs)

        return filtered_defs