[Arm-dev] backport request to fix a glibc bug in CentOS 7 aarch64

Mon Oct 19 13:20:07 UTC 2015
Jim Perrin <jperrin at centos.org>

Give this a shot -> http://people.centos.org/jperrin/glibc/2.17-79.el7/



On 10/16/2015 11:19 AM, Stefano Stabellini wrote:
> Fantastic, thank you!
> 
> On Fri, 16 Oct 2015, Jim Perrin wrote:
>> Yup. this one works. I'll have a build for you to test early monday.
>>
>> On 10/15/2015 12:15 PM, Stefano Stabellini wrote:
>>> On Wed, 14 Oct 2015, Jim Perrin wrote:
>>>> On 10/13/2015 03:47 PM, Jim Perrin wrote:
>>>>>
>>>>>
>>>>> On 10/13/2015 05:13 AM, Stefano Stabellini wrote:
>>>>>
>>>>>> Any chances we can have that patch in the CentOS 7 aarch64 glibc?
>>>>>
>>>>> I'll take a look at including it, if you'd be willing to test it out
>>>>> before we consider pushing it as an update.
>>>>>
>>>>>
>>>>
>>>> This patch does not apply to our existing glibc package as there is no
>>>> sysdeps/unix/sysv/linux/aarch64/* to update. If you can come up with a
>>>> patch that addresses the issue you're trying to fix, we can give it a shot.
>>>
>>> The same code leaves under ports/ in our glibc package. I have prepended
>>> ports/ in the patch filenames (see below) and it works fine.
>>>
>>>
>>> diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h
>>> index b02af8a..211227c 100644
>>> --- a/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h
>>> +++ b/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h
>>> @@ -33,17 +33,6 @@
>>>  #include <sys/types.h>
>>>  #include <sys/user.h>
>>>  
>>> -/* We need to see the definition of struct pt_regs but do not want the
>>> -   linux PTRACE_* defines since they conflict with the generic eglibc
>>> -   definitions in sys/ptrace.h Hence the undef's below.  */
>>> -#include <asm/ptrace.h>
>>> -
>>> -#undef PTRACE_GET_THREAD_AREA
>>> -#undef PTRACE_GETHBPREGS
>>> -#undef PTRACE_SETHBPREGS
>>> -
>>> -#include <sys/user.h>
>>> -
>>>  __BEGIN_DECLS
>>>  
>>>  /* Type for a general-purpose register.  */
>>> @@ -53,11 +42,11 @@ typedef unsigned long elf_greg_t;
>>>     pt_regs' directly in the typedef, but tradition says that
>>>     the register set is an array, which does have some peculiar
>>>     semantics, so leave it that way.  */
>>> -#define ELF_NGREG (sizeof (struct user_pt_regs) / sizeof(elf_greg_t))
>>> +#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
>>>  typedef elf_greg_t elf_gregset_t[ELF_NGREG];
>>>  
>>>  /* Register set for the floating-point registers.  */
>>> -typedef struct user_fpsimd_state elf_fpregset_t;
>>> +typedef struct user_fpsimd_struct elf_fpregset_t;
>>>  
>>>  /* Signal info.  */
>>>  struct elf_siginfo
>>> diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h b/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h
>>> index eceeb38..0ca2715 100644
>>> --- a/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h
>>> +++ b/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h
>>> @@ -19,13 +19,19 @@
>>>  #ifndef _SYS_USER_H
>>>  #define _SYS_USER_H	1
>>>  
>>> -/* We need to see the definition of struct pt_regs but do not want the
>>> -   linux PTRACE_* defines since they conflict with the generic glibc
>>> -   definitions in sys/ptrace.h Hence the undef's below.  */
>>> -#include <asm/ptrace.h>
>>> -
>>> -#undef PTRACE_GET_THREAD_AREA
>>> -#undef PTRACE_GETHBPREGS
>>> -#undef PTRACE_SETHBPREGS
>>> +struct user_regs_struct
>>> +{
>>> +  unsigned long long regs[31];
>>> +  unsigned long long sp;
>>> +  unsigned long long pc;
>>> +  unsigned long long pstate;
>>> +};
>>> +
>>> +struct user_fpsimd_struct
>>> +{
>>> +  __uint128_t  vregs[32];
>>> +  unsigned int fpsr;
>>> +  unsigned int fpcr;
>>> +};
>>>  
>>>  #endif
>>>
>>
>> -- 
>> Jim Perrin
>> The CentOS Project | http://www.centos.org
>> twitter: @BitIntegrity | GPG Key: FA09AD77
>>

-- 
Jim Perrin
The CentOS Project | http://www.centos.org
twitter: @BitIntegrity | GPG Key: FA09AD77