|
13 | 13 |
|
14 | 14 | #include <asm/ptrace.h> |
15 | 15 |
|
| 16 | +#ifdef CONFIG_64BIT |
| 17 | +#define DEFAULT_MAP_WINDOW (UL(1) << (MMAP_VA_BITS - 1)) |
| 18 | +#define STACK_TOP_MAX TASK_SIZE_64 |
| 19 | + |
| 20 | +#define arch_get_mmap_end(addr, len, flags) \ |
| 21 | +({ \ |
| 22 | + unsigned long mmap_end; \ |
| 23 | + typeof(addr) _addr = (addr); \ |
| 24 | + if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \ |
| 25 | + mmap_end = STACK_TOP_MAX; \ |
| 26 | + else if ((_addr) >= VA_USER_SV57) \ |
| 27 | + mmap_end = STACK_TOP_MAX; \ |
| 28 | + else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \ |
| 29 | + mmap_end = VA_USER_SV48; \ |
| 30 | + else \ |
| 31 | + mmap_end = VA_USER_SV39; \ |
| 32 | + mmap_end; \ |
| 33 | +}) |
| 34 | + |
| 35 | +#define arch_get_mmap_base(addr, base) \ |
| 36 | +({ \ |
| 37 | + unsigned long mmap_base; \ |
| 38 | + typeof(addr) _addr = (addr); \ |
| 39 | + typeof(base) _base = (base); \ |
| 40 | + unsigned long rnd_gap = DEFAULT_MAP_WINDOW - (_base); \ |
| 41 | + if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \ |
| 42 | + mmap_base = (_base); \ |
| 43 | + else if (((_addr) >= VA_USER_SV57) && (VA_BITS >= VA_BITS_SV57)) \ |
| 44 | + mmap_base = VA_USER_SV57 - rnd_gap; \ |
| 45 | + else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \ |
| 46 | + mmap_base = VA_USER_SV48 - rnd_gap; \ |
| 47 | + else \ |
| 48 | + mmap_base = VA_USER_SV39 - rnd_gap; \ |
| 49 | + mmap_base; \ |
| 50 | +}) |
| 51 | + |
| 52 | +#else |
| 53 | +#define DEFAULT_MAP_WINDOW TASK_SIZE |
| 54 | +#define STACK_TOP_MAX TASK_SIZE |
| 55 | +#endif |
| 56 | +#define STACK_ALIGN 16 |
| 57 | + |
| 58 | +#define STACK_TOP DEFAULT_MAP_WINDOW |
| 59 | + |
16 | 60 | /* |
17 | 61 | * This decides where the kernel will search for a free chunk of vm |
18 | 62 | * space during mmap's. |
19 | 63 | */ |
20 | | -#define TASK_UNMAPPED_BASE PAGE_ALIGN(TASK_SIZE / 3) |
21 | | - |
22 | | -#define STACK_TOP TASK_SIZE |
23 | 64 | #ifdef CONFIG_64BIT |
24 | | -#define STACK_TOP_MAX TASK_SIZE_64 |
| 65 | +#define TASK_UNMAPPED_BASE PAGE_ALIGN((UL(1) << MMAP_MIN_VA_BITS) / 3) |
25 | 66 | #else |
26 | | -#define STACK_TOP_MAX TASK_SIZE |
| 67 | +#define TASK_UNMAPPED_BASE PAGE_ALIGN(TASK_SIZE / 3) |
27 | 68 | #endif |
28 | | -#define STACK_ALIGN 16 |
29 | 69 |
|
30 | 70 | #ifndef __ASSEMBLY__ |
31 | 71 |
|
|
0 commit comments