On Mon, Nov 23, 2015 at 04:21:34PM +0300, Maxim Ostapenko wrote: > Yeah, right. I've asked about kernel headers just to make sure I correctly > understand the issue. > > Actually, I see such code in > lib/sanitizer_common/sanitizer_platform_limits_posix.cc: > > #if defined(PTRACE_GETVFPREGS) && defined(PTRACE_SETVFPREGS) > int ptrace_getvfpregs = PTRACE_GETVFPREGS; > int ptrace_setvfpregs = PTRACE_SETVFPREGS; > #else > int ptrace_getvfpregs = -1; > int ptrace_setvfpregs = -1; > #endif > > and in ptrace interceptor: > > else if (request == ptrace_setvfpregs) > COMMON_INTERCEPTOR_READ_RANGE(ctx, data, struct_user_vfpregs_struct_sz); > else if (request == ptrace_getvfpregs) > COMMON_INTERCEPTOR_WRITE_RANGE(ctx, data, struct_user_vfpregs_struct_sz) > > So, perhaps we can do the same thing with ARM_VFPREGS_SIZE, something like > this? > > diff --git > a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc > b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc > index 9866cc9..20ff224 100644 > --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc > +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc > @@ -323,10 +323,14 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); > unsigned struct_user_fpxregs_struct_sz = sizeof(struct > user_fpxregs_struct); > #endif // __x86_64 || __mips64 || __powerpc64__ || __aarch64__ || __arm__ > #ifdef __arm__ > +#if defined(ARM_VFPREGS_SIZE) > unsigned struct_user_vfpregs_struct_sz = ARM_VFPREGS_SIZE; > #else > unsigned struct_user_vfpregs_struct_sz = 0; > #endif > +#else > + unsigned struct_user_vfpregs_struct_sz = 0; > +#endif
Maybe, but then it would need to be approved upstream. If you just define ARM_VFPREGS_SIZE to 0 or whatever else in the GCC owned wrapper headers, you can avoid that. I guess talk to upstream. Jakub