Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4bdf8bc4a15d4540d71db9fa01955db5edcf89ec
Commit:     4bdf8bc4a15d4540d71db9fa01955db5edcf89ec
Parent:     ee56314b79039b669396ee04aac3e342cd2e5a1f
Author:     Jeff Dike <[EMAIL PROTECTED]>
AuthorDate: Mon Feb 4 22:30:44 2008 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Feb 5 09:44:26 2008 -0800

    uml: borrow const.h techniques
    
    Suggested by Geert Uytterhoeven - use const.h to get constants that are 
usable
    in both C and assembly.  I can't include it directly since this code can't
    include kernel headers.  const.h is also for numeric constants that can be
    typed by tacking a "UL" or similar on the end.  The constants here have to 
be
    typed by casting them.
    
    So, the relevant parts of const.h are copied here and modified in order to
    allow the constants to be uncasted in assembly and casted in C.
    
    Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
    Cc: Geert Uytterhoeven <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/um/include/as-layout.h |   34 +++++++++++++++++++++-------------
 arch/um/sys-i386/stub.S     |    8 ++++----
 arch/um/sys-x86_64/stub.S   |    8 ++++----
 3 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/arch/um/include/as-layout.h b/arch/um/include/as-layout.h
index a5cdf95..2b859e0 100644
--- a/arch/um/include/as-layout.h
+++ b/arch/um/include/as-layout.h
@@ -10,23 +10,31 @@
 #include "kern_constants.h"
 
 /*
- * Assembly doesn't want any casting, but C does, so define these
- * without casts here, and define new symbols with casts inside the C
- * section.
+ * Stolen from linux/const.h, which can't be directly included since
+ * this is used in userspace code, which has no access to the kernel
+ * headers.  Changed to be suitable for adding casts to the start,
+ * rather than "UL" to the end.
  */
-#define ASM_STUB_CODE (UML_CONFIG_TOP_ADDR - 2 * UM_KERN_PAGE_SIZE)
-#define ASM_STUB_DATA (UML_CONFIG_TOP_ADDR - UM_KERN_PAGE_SIZE)
-#define ASM_STUB_START ASM_STUB_CODE
 
-/*
- * This file is included by the assembly stubs, which just want the
- * definitions above.
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
  */
-#ifndef __ASSEMBLY__
 
-#define STUB_CODE ((unsigned long) ASM_STUB_CODE)
-#define STUB_DATA ((unsigned long) ASM_STUB_DATA)
-#define STUB_START ((unsigned long) ASM_STUB_START)
+#ifdef __ASSEMBLY__
+#define _AC(X, Y)      (Y)
+#else
+#define __AC(X, Y)     (X (Y))
+#define _AC(X, Y)      __AC(X, Y)
+#endif
+
+#define STUB_CODE _AC((unsigned long), \
+                     UML_CONFIG_TOP_ADDR - 2 * UM_KERN_PAGE_SIZE)
+#define STUB_DATA _AC((unsigned long), UML_CONFIG_TOP_ADDR - UM_KERN_PAGE_SIZE)
+#define STUB_START _AC(, STUB_CODE)
+
+#ifndef __ASSEMBLY__
 
 #include "sysdep/ptrace.h"
 
diff --git a/arch/um/sys-i386/stub.S b/arch/um/sys-i386/stub.S
index e730772..7699e89 100644
--- a/arch/um/sys-i386/stub.S
+++ b/arch/um/sys-i386/stub.S
@@ -7,7 +7,7 @@
        .globl batch_syscall_stub
 batch_syscall_stub:
        /* load pointer to first operation */
-       mov     $(ASM_STUB_DATA+8), %esp
+       mov     $(STUB_DATA+8), %esp
 
 again:
        /* load length of additional data */
@@ -15,12 +15,12 @@ again:
 
        /* if(length == 0) : end of list */
        /* write possible 0 to header */
-       mov     %eax, ASM_STUB_DATA+4
+       mov     %eax, STUB_DATA+4
        cmpl    $0, %eax
        jz      done
 
        /* save current pointer */
-       mov     %esp, ASM_STUB_DATA+4
+       mov     %esp, STUB_DATA+4
 
        /* skip additional data */
        add     %eax, %esp
@@ -46,7 +46,7 @@ again:
 
 done:
        /* save return value */
-       mov     %eax, ASM_STUB_DATA
+       mov     %eax, STUB_DATA
 
        /* stop */
        int3
diff --git a/arch/um/sys-x86_64/stub.S b/arch/um/sys-x86_64/stub.S
index 4afe204..5687687 100644
--- a/arch/um/sys-x86_64/stub.S
+++ b/arch/um/sys-x86_64/stub.S
@@ -8,18 +8,18 @@ syscall_stub:
        /* We don't have 64-bit constants, so this constructs the address
         * we need.
         */
-       movq    $(ASM_STUB_DATA >> 32), %rbx
+       movq    $(STUB_DATA >> 32), %rbx
        salq    $32, %rbx
-       movq    $(ASM_STUB_DATA & 0xffffffff), %rcx
+       movq    $(STUB_DATA & 0xffffffff), %rcx
        or      %rcx, %rbx
        movq    %rax, (%rbx)
        int3
 
        .globl batch_syscall_stub
 batch_syscall_stub:
-       mov     $(ASM_STUB_DATA >> 32), %rbx
+       mov     $(STUB_DATA >> 32), %rbx
        sal     $32, %rbx
-       mov     $(ASM_STUB_DATA & 0xffffffff), %rax
+       mov     $(STUB_DATA & 0xffffffff), %rax
        or      %rax, %rbx
        /* load pointer to first operation */
        mov     %rbx, %rsp
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to