On Mon, 2021-11-29 at 22:19 +0100, Samuel Thibault wrote: > Hello, > > Svante Signell, le lun. 29 nov. 2021 18:40:48 +0100, a ecrit: > > I've been working lately with on how to port valgrind to GNU/Hurd, and found > > out that this is not a trivial task. > > It is indeed very far from a trivial task. I'd rather recommend to port > gcc's lsan support, it will be most probably much easier to port.
Maybe it is. I might look into that later on. Thanks for the tip. > > Seems like one have to make a suitable mix of linux and darwin code > > (and to some extent freebsd/solaris code). > > Also it'd need a fair amount of code to reimplement the basic posixish > needs of valgrind in terms of the Hurd RPCs. Do you mean that Darwin does not use RPCs? Seems like valgrind has some RPC-code for Darwin already. In fact there is a directory containing mach code: coregrind/m_mach/ but most *.defs code is absent. Basically only mach_msg and mach_msg_trap are defined (and nothing about Hurd RPCs of course). > > > > movl $$__NR___pthread_sigmask, %eax > > int $$0x80 /* should be sysenter? */ > > jc L_$0_7 /* __pthread_sigmask failed */ > Mach doesn't use int 0x80 but an lcall. See for instance > glibc/sysdeps/mach/i386/syscall.S Can't 0x80 just be replaced by lcall? Probably not. Looking at the x86-specific assembly code for all architectures 0x80 seems to be used everywhere. Additionally: My question was about the macro definition with an option argument: /* DO_SYSCALL MACH|MDEP|UNIX */ #define MACH 1 #define MDEP 2 #define UNIX 3 .macro DO_SYSCALL <what to add here?> <and here> .endm .globl ML_(do_syscall_for_client_unix_WRK) ML_(do_syscall_for_client_unix_WRK): DO_SYSCALL UNIX .globl ML_(do_syscall_for_client_mach_WRK) ML_(do_syscall_for_client_mach_WRK): DO_SYSCALL MACH .globl ML_(do_syscall_for_client_mdep_WRK) ML_(do_syscall_for_client_mdep_WRK): DO_SYSCALL MDEP