diff options
Diffstat (limited to 'arch/um/include/as-layout.h')
-rw-r--r-- | arch/um/include/as-layout.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/um/include/as-layout.h b/arch/um/include/as-layout.h index 2b859e020ac6..a2008f550fee 100644 --- a/arch/um/include/as-layout.h +++ b/arch/um/include/as-layout.h | |||
@@ -29,9 +29,20 @@ | |||
29 | #define _AC(X, Y) __AC(X, Y) | 29 | #define _AC(X, Y) __AC(X, Y) |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | /* | ||
33 | * The "- 1"'s are to avoid gcc complaining about integer overflows | ||
34 | * and unrepresentable decimal constants. With 3-level page tables, | ||
35 | * TASK_SIZE is 0x80000000, which gets turned into its signed decimal | ||
36 | * equivalent in asm-offsets.s. gcc then complains about that being | ||
37 | * unsigned only in C90. To avoid that, UM_TASK_SIZE is defined as | ||
38 | * TASK_SIZE - 1. To compensate, we need to add the 1 back here. | ||
39 | * However, adding it back to UM_TASK_SIZE produces more gcc | ||
40 | * complaints. So, I adjust the thing being subtracted from | ||
41 | * UM_TASK_SIZE instead. Bah. | ||
42 | */ | ||
32 | #define STUB_CODE _AC((unsigned long), \ | 43 | #define STUB_CODE _AC((unsigned long), \ |
33 | UML_CONFIG_TOP_ADDR - 2 * UM_KERN_PAGE_SIZE) | 44 | UM_TASK_SIZE - (2 * UM_KERN_PAGE_SIZE - 1)) |
34 | #define STUB_DATA _AC((unsigned long), UML_CONFIG_TOP_ADDR - UM_KERN_PAGE_SIZE) | 45 | #define STUB_DATA _AC((unsigned long), UM_TASK_SIZE - (UM_KERN_PAGE_SIZE - 1)) |
35 | #define STUB_START _AC(, STUB_CODE) | 46 | #define STUB_START _AC(, STUB_CODE) |
36 | 47 | ||
37 | #ifndef __ASSEMBLY__ | 48 | #ifndef __ASSEMBLY__ |