diff options
| author | Richard Weinberger <richard@nod.at> | 2012-01-24 14:09:12 -0500 |
|---|---|---|
| committer | Richard Weinberger <richard@nod.at> | 2012-03-24 19:29:57 -0400 |
| commit | 12783aa077f81e0dcf1b2f97ed24440048e9f09d (patch) | |
| tree | 648810a36028675185f024ff791b7c9f7b95d815 | |
| parent | 9310da0bbb826f8b6ed49a5f93092f8452820da0 (diff) | |
um: Switch to large mcmodel on x86_64
x86_64 UML is unable to load modules if more than 504MiB
of memory are used.
This happens because on x86_64 the UML process has a quite high
start address (typically around 0x6000000).
If UML's memory is larger than 504MiB VMALLOC_START happens to be after
0x8000000. This is no problem unless one loads a module which was built
with R_X86_64_32S relocations.
Symbols with a location > 0x8000000 cannot be used with R_X86_64_32S
To deal with this x86_64 UML has to be compiled with -mcmodel=large
such that no R_X86_64_32S relocations are used.
Signed-off-by: Richard Weinberger <richard@nod.at>
Reported-by: 전하늘 <allskyee@gmail.com>
| -rw-r--r-- | arch/um/Makefile | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/um/Makefile b/arch/um/Makefile index 4c993c89d0f0..55c0661e2b5d 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
| @@ -28,6 +28,7 @@ ifeq ($(SUBARCH),i386) | |||
| 28 | endif | 28 | endif |
| 29 | ifeq ($(SUBARCH),x86_64) | 29 | ifeq ($(SUBARCH),x86_64) |
| 30 | HEADER_ARCH := x86 | 30 | HEADER_ARCH := x86 |
| 31 | KBUILD_CFLAGS += -mcmodel=large | ||
| 31 | endif | 32 | endif |
| 32 | 33 | ||
| 33 | HOST_DIR := arch/$(HEADER_ARCH) | 34 | HOST_DIR := arch/$(HEADER_ARCH) |
