uml: use PAGE_SIZE in linker scripts
This patch includes page.h header into linker scripts that allow us to use PAGE_SIZE macro instead of numeric constant. To be able to include page.h into linker scripts page.h is needed for some modification - i.e. we need to use __ASSEMBLY__ and _AC macro [jdike@linux.intel.com - fixed conflict with as-layout.h] Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: WANG Cong <xiyou.wangcong@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
6d0742426c
Коммит
a7dfa9403b
|
@ -23,16 +23,16 @@
|
|||
*/
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#define _AC(X, Y) (Y)
|
||||
#define _UML_AC(X, Y) (Y)
|
||||
#else
|
||||
#define __AC(X, Y) (X (Y))
|
||||
#define _AC(X, Y) __AC(X, Y)
|
||||
#define __UML_AC(X, Y) (X(Y))
|
||||
#define _UML_AC(X, Y) __UML_AC(X, Y)
|
||||
#endif
|
||||
|
||||
#define STUB_START _AC(, 0x100000)
|
||||
#define STUB_CODE _AC((unsigned long), STUB_START)
|
||||
#define STUB_DATA _AC((unsigned long), STUB_CODE + UM_KERN_PAGE_SIZE)
|
||||
#define STUB_END _AC((unsigned long), STUB_DATA + UM_KERN_PAGE_SIZE)
|
||||
#define STUB_START _UML_AC(, 0x100000)
|
||||
#define STUB_CODE _UML_AC((unsigned long), STUB_START)
|
||||
#define STUB_DATA _UML_AC((unsigned long), STUB_CODE + UM_KERN_PAGE_SIZE)
|
||||
#define STUB_END _UML_AC((unsigned long), STUB_DATA + UM_KERN_PAGE_SIZE)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <asm-generic/vmlinux.lds.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
OUTPUT_FORMAT(ELF_FORMAT)
|
||||
OUTPUT_ARCH(ELF_ARCH)
|
||||
|
@ -21,7 +22,7 @@ SECTIONS
|
|||
_einittext = .;
|
||||
}
|
||||
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
/* Read-only sections, merged into text segment: */
|
||||
.hash : { *(.hash) }
|
||||
|
@ -68,9 +69,9 @@ SECTIONS
|
|||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
} =0x90909090
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.syscall_stub : {
|
||||
__syscall_stub_start = .;
|
||||
*(.__syscall_stub*)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <asm-generic/vmlinux.lds.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
OUTPUT_FORMAT(ELF_FORMAT)
|
||||
OUTPUT_ARCH(ELF_ARCH)
|
||||
|
@ -26,7 +27,7 @@ SECTIONS
|
|||
INIT_TEXT
|
||||
_einittext = .;
|
||||
}
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
.text :
|
||||
{
|
||||
|
@ -39,7 +40,7 @@ SECTIONS
|
|||
*(.gnu.linkonce.t*)
|
||||
}
|
||||
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.syscall_stub : {
|
||||
__syscall_stub_start = .;
|
||||
*(.__syscall_stub*)
|
||||
|
@ -79,7 +80,7 @@ SECTIONS
|
|||
.sdata : { *(.sdata) }
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
. = ALIGN(0x1000);
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.sbss :
|
||||
{
|
||||
__bss_start = .;
|
||||
|
|
|
@ -7,16 +7,20 @@
|
|||
#ifndef __UM_PAGE_H
|
||||
#define __UM_PAGE_H
|
||||
|
||||
#include <linux/const.h>
|
||||
|
||||
/* PAGE_SHIFT determines the page size */
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct page;
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/vm-flags.h>
|
||||
|
||||
/* PAGE_SHIFT determines the page size */
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
/*
|
||||
* These are used to make use of C type-checking..
|
||||
*/
|
||||
|
@ -120,4 +124,5 @@ extern struct page *arch_validate(struct page *page, gfp_t mask, int order);
|
|||
#include <asm-generic/memory_model.h>
|
||||
#include <asm-generic/page.h>
|
||||
|
||||
#endif
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __UM_PAGE_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче