[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: "struct user" conflicts on arm



Konstantinos Margaritis wrote:
Does anyone know what the impact of renaming these to use a REG_ prefix like
i386, amd64 and sparc do* would be?
at worst the packages that had to be workaround on arm* for this, can
have the workaround removed.
I have prepared a patch (attatched) that eliminates the dependency on sys/procfs.h and renames R? to REG_R?. I have tested it by modifying the header locally. I am now attempting to rebuild glibc with the patch.
After rebuilding glibc I will install it and attempt to rebuild GDB.

Please comment on the patch and advise on the best route for submission
(that is should I go through debian, through eglibc or direct to glibc?)

Since you're in the process of fixing things for glibc/arm
Note that I am not a glibc developer nor am I a dd (and even if I was a dd I don't think I would NMU glibc). I'm just a user with an interest
in the future of debian on arm.

would you
mind also looking at WCHAR_MIN/MAX undefined for arm?

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=598937
They most certainly are defined. The trouble is that WCHAR_MAX is defined
in a strange way.

#define __WCHAR_MAX	( (wchar_t) - 1 )

This definition is fine for normal c or c++ code but
it cannot be properly evaluated in the context of a preprocessor conditional.

The bug report has a patch (actually a replacement for
an existing patch) which looks fine to me.




Index: eglibc-2.13/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
===================================================================
--- eglibc-2.13.orig/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h	2006-08-17 01:23:58.000000000 +0000
+++ eglibc-2.13/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h	2011-12-17 12:52:43.000000000 +0000
@@ -23,7 +23,6 @@
 
 #include <features.h>
 #include <signal.h>
-#include <sys/procfs.h>
 
 /* We need the signal context definitions even if they are not used
    included in <signal.h>.  */
@@ -35,47 +34,64 @@
 #define NGREG	18
 
 /* Container for all general registers.  */
-typedef elf_gregset_t gregset_t;
+typedef greg_t gregset_t[NGREG];
 
 /* Number of each register is the `gregset_t' array.  */
 enum
 {
-  R0 = 0,
-#define R0	R0
-  R1 = 1,
-#define R1	R1
-  R2 = 2,
-#define R2	R2
-  R3 = 3,
-#define R3	R3
-  R4 = 4,
-#define R4	R4
-  R5 = 5,
-#define R5	R5
-  R6 = 6,
-#define R6	R6
-  R7 = 7,
-#define R7	R7
-  R8 = 8,
-#define R8	R8
-  R9 = 9,
-#define R9	R9
-  R10 = 10,
-#define R10	R10
-  R11 = 11,
-#define R11	R11
-  R12 = 12,
-#define R12	R12
-  R13 = 13,
-#define R13	R13
-  R14 = 14,
-#define R14	R14
-  R15 = 15
-#define R15	R15
+  REG_R0 = 0,
+#define REG_R0	REG_R0
+  REG_R1 = 1,
+#define REG_R1	REG_R1
+  REG_R2 = 2,
+#define REG_R2	REG_R2
+  REG_R3 = 3,
+#define REG_R3	REG_R3
+  REG_R4 = 4,
+#define REG_R4	REG_R4
+  REG_R5 = 5,
+#define REG_R5	REG_R5
+  REG_R6 = 6,
+#define REG_R6	REG_R6
+  REG_R7 = 7,
+#define REG_R7	REG_R7
+  REG_R8 = 8,
+#define REG_R8	REG_R8
+  REG_R9 = 9,
+#define REG_R9	REG_R9
+  REG_R10 = 10,
+#define REG_R10	REG_R10
+  REG_R11 = 11,
+#define REG_R11	REG_R11
+  REG_R12 = 12,
+#define REG_R12	REG_R12
+  REG_R13 = 13,
+#define REG_R13	REG_R13
+  REG_R14 = 14,
+#define REG_R14	REG_R14
+  REG_R15 = 15
+#define REG_R15	REG_R15
 };
 
+struct _libc_fpstate
+{
+  struct
+  {
+    unsigned int sign1:1;
+    unsigned int unused:15;
+    unsigned int sign2:1;
+    unsigned int exponent:14;
+    unsigned int j:1;
+    unsigned int mantissa1:31;
+    unsigned int mantissa0:32;
+  } fpregs[8];
+  unsigned int fpsr:32;
+  unsigned int fpcr:32;
+  unsigned char ftype[8];
+  unsigned int init_flag;
+};
 /* Structure to describe FPU registers.  */
-typedef elf_fpregset_t	fpregset_t;
+typedef struct _libc_fpstate	fpregset_t;
 
 /* Context to describe whole processor state.  This only describes
    the core registers; coprocessor registers get saved elsewhere

Reply to: