On söndagen den 19 maj 2013, Magnus Holmgren wrote:
> OK, so now all of REG_EAX, REG_EBX and so on are defined on Linux, or
> rather, in the newest eglibc. Do you prefer renaming the enum items or
> #undef-ing all of them?

I didn't pay attention to the error messages. The conflict is with another 
enum, so renaming the constants is basically the only option. What do say 
about the attached patch?

-- 
Magnus Holmgren        [email protected]
Debian Developer 
Description: Rename enums in src/code/ia32.c
 They conflict with /usr/include/i386-linux-gnu/sys/ucontext.h of newer eglibc
Author: Magnus Holmgren
Bug-Debian: http://bugs.debian.org/708366
Forwarded: yes

--- a/src/code/ia32.c
+++ b/src/code/ia32.c
@@ -14,14 +14,9 @@
 #include "object.h"
 #include "builtin_functions.h"
 
-/* This is defined on windows */
-#ifdef REG_NONE
-#undef REG_NONE
-#endif
-
-enum ia32_reg {REG_EAX = 0, REG_EBX = 3, REG_ECX = 1, REG_EDX = 2, REG_NONE = 4};
+enum ia32_reg {PIKE_REG_EAX = 0, PIKE_REG_EBX = 3, PIKE_REG_ECX = 1, PIKE_REG_EDX = 2, PIKE_REG_NONE = 4};
 
-#define REG_BITMASK ((1 << REG_NONE) - 1)
+#define REG_BITMASK ((1 << PIKE_REG_NONE) - 1)
 
 /* #define REGISTER_DEBUG */
 
@@ -71,7 +66,7 @@ static int alloc_regs = 0, valid_regs =
 #define MOV_ABSADDR_TO_REG(ADDR, REG) do {				\
     MAKE_VALID_REG (REG);						\
     /* movl addr,%reg */						\
-    if ((REG) == REG_EAX)						\
+    if ((REG) == PIKE_REG_EAX)						\
       add_to_program (0xa1); /* Move dword at address to EAX. */	\
     else {								\
       add_to_program (0x8b); /* Move r/m32 to r32. */			\
@@ -83,7 +78,7 @@ static int alloc_regs = 0, valid_regs =
 #define MOV_REG_TO_ABSADDR(REG, ADDR) do {				\
     CHECK_VALID_REG (REG);						\
     /* movl %reg,addr */						\
-    if ((REG) == REG_EAX)						\
+    if ((REG) == PIKE_REG_EAX)						\
       add_to_program (0xa3); /* Move EAX to dword at address. */	\
     else {								\
       add_to_program (0x89); /* Move r32 to r/m32. */			\
@@ -217,7 +212,7 @@ static int alloc_regs = 0, valid_regs =
       add_to_program (0x48 | (REG)); /* Decrement r32. */		\
     else if (val_ < -128 || val_ > 127) {				\
       /* addl $val,%reg */						\
-      if ((REG) == REG_EAX)						\
+      if ((REG) == PIKE_REG_EAX)						\
 	add_to_program (0x05); /* Add imm32 to EAX. */			\
       else {								\
 	add_to_program (0x81); /* Add imm32 to r/m32. */		\
@@ -334,8 +329,8 @@ ptrdiff_t ia32_prev_stored_pc; /* PROG_P
 
 void ia32_flush_code_generator(void)
 {
-  next_reg = REG_EAX;
-  sp_reg = fp_reg = mark_sp_reg = REG_NONE;
+  next_reg = PIKE_REG_EAX;
+  sp_reg = fp_reg = mark_sp_reg = PIKE_REG_NONE;
   CLEAR_REGS();
   ia32_prev_stored_pc = -1;
 }
@@ -351,7 +346,7 @@ static enum ia32_reg alloc_reg (int avoi
     /* There's a free register. */
 
     for (reg = next_reg; (1 << reg) & used_regs;) {
-      reg = (reg + 1) % REG_NONE;
+      reg = (reg + 1) % PIKE_REG_NONE;
 #ifdef PIKE_DEBUG
       if (reg == next_reg) Pike_fatal ("Failed to find a free register.\n");
 #endif
@@ -364,15 +359,15 @@ static enum ia32_reg alloc_reg (int avoi
      * probably be replaced with an LRU strategy. */
 
     for (reg = next_reg; (1 << reg) & avoid_regs;) {
-      reg = (reg + 1) % REG_NONE;
+      reg = (reg + 1) % PIKE_REG_NONE;
 #ifdef PIKE_DEBUG
       if (reg == next_reg) Pike_fatal ("Failed to find a non-excluded register.\n");
 #endif
     }
 
-    if (sp_reg == reg)			{sp_reg = REG_NONE; DEALLOC_REG (reg);}
-    else if (fp_reg == reg)		{fp_reg = REG_NONE; DEALLOC_REG (reg);}
-    else if (mark_sp_reg == reg)	{mark_sp_reg = REG_NONE; DEALLOC_REG (reg);}
+    if (sp_reg == reg)			{sp_reg = PIKE_REG_NONE; DEALLOC_REG (reg);}
+    else if (fp_reg == reg)		{fp_reg = PIKE_REG_NONE; DEALLOC_REG (reg);}
+    else if (mark_sp_reg == reg)	{mark_sp_reg = PIKE_REG_NONE; DEALLOC_REG (reg);}
   }
 
 #ifdef REGISTER_DEBUG
@@ -386,11 +381,11 @@ static enum ia32_reg alloc_reg (int avoi
 #define DEF_LOAD_REG(REG, SET)						\
   static void PIKE_CONCAT(load_,REG) (int avoid_regs)			\
   {									\
-    if (REG == REG_NONE) {						\
+    if (REG == PIKE_REG_NONE) {						\
       REG = alloc_reg (avoid_regs);					\
       /* Update the round robin pointer here so that we disregard */	\
       /* the direct calls to alloc_reg for temporary registers. */	\
-      next_reg = (REG + 1) % REG_NONE;					\
+      next_reg = (REG + 1) % PIKE_REG_NONE;					\
       {SET;}								\
     }									\
     else								\
@@ -410,8 +405,8 @@ DEF_LOAD_REG (mark_sp_reg, {
 static void ia32_call_c_function(void *addr)
 {
   CALL_RELATIVE(addr);
-  next_reg = REG_EAX;
-  sp_reg = fp_reg = mark_sp_reg = REG_NONE;
+  next_reg = PIKE_REG_EAX;
+  sp_reg = fp_reg = mark_sp_reg = PIKE_REG_NONE;
   CLEAR_REGS();
 }
 

Attachment: signature.asc
Description: This is a digitally signed message part.

  • Fwd... Magnus Holmgren
    • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
    • ... Magnus Holmgren

Reply via email to