if(addr < MAX_REG_OFFSET){
                        tmp = getreg(child, addr);
                }
+#if defined(CONFIG_UML_X86) && !defined(CONFIG_64BIT)
                else if((addr >= offsetof(struct user, u_debugreg[0])) &&
                        (addr <= offsetof(struct user, u_debugreg[7]))){
                        addr -= offsetof(struct user, u_debugreg[0]);
                        addr = addr >> 2;
                        tmp = child->thread.arch.debugregs[addr];
                }
+#endif
                ret = put_user(tmp, (unsigned long __user *) data);
                break;
        }
                        ret = putreg(child, addr, data);
                        break;
                }
-#if 0 /* XXX x86_64 */
+#if defined(CONFIG_UML_X86) && !defined(CONFIG_64BIT)
                else if((addr >= offsetof(struct user, u_debugreg[0])) &&
                        (addr <= offsetof(struct user, u_debugreg[7]))){
                          addr -= offsetof(struct user, u_debugreg[0]);
 
        ({ (pte).pte_high = (phys) >> 32; \
           (pte).pte_low = (phys) | pgprot_val(prot); })
 
+#define pmd_val(x)     ((x).pmd)
+#define __pmd(x) ((pmd_t) { (x) } )
+
 typedef unsigned long long pfn_t;
 typedef unsigned long long phys_t;