Define MAP_KERNEL_START by resolving MODULES_END at cmake time

Change-Id: Ib88fc045b64c4ad2dad6a4b13cb0372a735a26ab
This commit is contained in:
Balazs Gerofi
2020-04-02 14:53:43 +09:00
committed by Masamichi Takagi
parent 33eef71133
commit 04d17dd3e9
15 changed files with 85 additions and 45 deletions

View File

@@ -14,6 +14,19 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
if(DEFINED SYSCONF_INSTALL_DIR)
set(CMAKE_INSTALL_SYSCONFDIR "${SYSCONF_INSTALL_DIR}")
endif()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(BUILD_TARGET "smp-x86" CACHE STRING "Build target: smp-x86 | smp-arm64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(BUILD_TARGET "smp-arm64" CACHE STRING "Build target: smp-x86 | smp-arm64")
endif()
if (BUILD_TARGET STREQUAL "smp-x86")
set(ARCH "x86_64")
elseif (BUILD_TARGET STREQUAL "smp-arm64")
set(ARCH "arm64")
endif()
include(GNUInstallDirs)
include(CMakeParseArguments)
include(Kbuild)
@@ -39,15 +52,7 @@ if (ENABLE_LINUX_WORK_IRQ_FOR_IKC)
add_definitions(-DIHK_IKC_USE_LINUX_WORK_IRQ)
endif()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(BUILD_TARGET "smp-x86" CACHE STRING "Build target: smp-x86 | smp-arm64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(BUILD_TARGET "smp-arm64" CACHE STRING "Build target: smp-x86 | smp-arm64")
endif()
if (BUILD_TARGET STREQUAL "smp-x86")
set(ARCH "x86_64")
elseif (BUILD_TARGET STREQUAL "smp-arm64")
set(ARCH "arm64")
if (BUILD_TARGET STREQUAL "smp-arm64")
foreach(i RANGE 1 120)
add_definitions(-DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i})
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i}")
@@ -81,6 +86,24 @@ elseif (BUILD_TARGET STREQUAL "smp-arm64")
endif()
set_property(CACHE BUILD_TARGET PROPERTY STRINGS smp-x86 smp-arm64)
# define MAP_KERNEL_START
set(tmpdir ${CMAKE_CURRENT_BINARY_DIR}/tmp.resolve_MODULES_END)
file(REMOVE_RECURSE ${tmpdir})
file(MAKE_DIRECTORY ${tmpdir})
file(WRITE ${tmpdir}/driver.c "#include <linux/module.h>\n")
file(APPEND ${tmpdir}/driver.c "unsigned long MAP_KERNEL_START = MODULES_END - (1UL << 23);\n")
file(WRITE ${tmpdir}/Makefile "obj-m := driver.o\n")
file(APPEND ${tmpdir}/Makefile "all:\n")
file(APPEND ${tmpdir}/Makefile "\tmake ${KBUILD_MAKE_FLAGS_STR} -C ${KERNEL_DIR} M=${tmpdir} modules\n")
execute_process(COMMAND make -C ${tmpdir})
execute_process(COMMAND bash -c "offset=`readelf -S ${tmpdir}/driver.ko | grep .data | sed 's/.* //g'`; echo $((0x$offset))"
OUTPUT_VARIABLE MAP_KERNEL_START_OFFSET OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND bash -c "dd if=${tmpdir}/driver.ko bs=1 skip=${MAP_KERNEL_START_OFFSET} count=8 2>/dev/null | od -tx8 -Ax | head -1 | sed 's|.* |0x|g'"
OUTPUT_VARIABLE MAP_KERNEL_START OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ENABLE_MEMDUMP ON)
option(ENABLE_PERF "Enable perf support" ON)
option(ENABLE_RUSAGE "Enable rusage support" ON)
@@ -155,6 +178,7 @@ add_subdirectory(executer/kernel/mcctrl)
add_subdirectory(executer/user)
add_subdirectory(kernel)
add_subdirectory(tools/mcstat)
add_subdirectory(tools/crash)
configure_file(scripts/mcreboot-smp.sh.in mcreboot.sh @ONLY)
configure_file(scripts/mcstop+release-smp.sh.in mcstop+release.sh @ONLY)
@@ -190,6 +214,7 @@ message("KERNEL_DIR: ${KERNEL_DIR}")
message("SYSTEM_MAP: ${SYSTEM_MAP}")
message("VMLINUX: ${VMLINUX}")
message("KBUILD_C_FLAGS: ${KBUILD_C_FLAGS}")
message("MAP_KERNEL_START: ${MAP_KERNEL_START}")
message("ENABLE_MEMDUMP: ${ENABLE_MEMDUMP}")
message("ENABLE_PERF: ${ENABLE_PERF}")
message("ENABLE_RUSAGE: ${ENABLE_RUSAGE}")

View File

@@ -10,7 +10,7 @@
#include <smp.h>
#include <arm-gic-v3.h>
#define KERNEL_RAM_VADDR MAP_KERNEL_START
/* KERNEL_RAM_VADDR is defined by cmake */
//#ifndef CONFIG_SMP
//# define PTE_FLAGS PTE_TYPE_PAGE | PTE_AF

View File

@@ -56,7 +56,8 @@ extern char _end[];
#endif /* !__ASSEMBLY__ */
/*
* MAP_KERNEL_START is HOST MODULES_END - 8MiB
* MAP_KERNEL_START is HOST MODULES_END - 8MiB.
* It's defined by cmake.
*/
#if (VA_BITS == 39 && GRANULE_SIZE == _SZ4KB) /* ARM64_MEMORY_LAYOUT=1 */
#
@@ -67,7 +68,6 @@ extern char _end[];
# define MAP_VMAP_SIZE UL(0x0000000100000000)
# define MAP_FIXED_START UL(0xffffffbffbdfd000)
# define MAP_ST_START UL(0xffffffc000000000)
# define MAP_KERNEL_START UL(0xffffff8007800000)
#
#elif (VA_BITS == 42 && GRANULE_SIZE == _SZ64KB) /* ARM64_MEMORY_LAYOUT=3 */
#
@@ -78,7 +78,6 @@ extern char _end[];
# define MAP_VMAP_SIZE UL(0x0000000100000000)
# define MAP_FIXED_START UL(0xfffffdfffbdd0000)
# define MAP_ST_START UL(0xfffffe0000000000)
# define MAP_KERNEL_START UL(0xfffffc0007800000)
#
#elif (VA_BITS == 48 && GRANULE_SIZE == _SZ4KB) /* ARM64_MEMORY_LAYOUT=2 */
#
@@ -89,7 +88,6 @@ extern char _end[];
# define MAP_VMAP_SIZE UL(0x0000000100000000)
# define MAP_FIXED_START UL(0xffff7ffffbdfd000)
# define MAP_ST_START UL(0xffff800000000000)
# define MAP_KERNEL_START UL(0xffff000007800000)
#
#elif (VA_BITS == 48 && GRANULE_SIZE == _SZ64KB) /* ARM64_MEMORY_LAYOUT=4 */
#
@@ -100,7 +98,6 @@ extern char _end[];
# define MAP_VMAP_SIZE UL(0x0000000100000000)
# define MAP_FIXED_START UL(0xffff7ffffbdd0000)
# define MAP_ST_START UL(0xffff800000000000)
# define MAP_KERNEL_START UL(0xffff000007800000)
#
#else
# error address space is not defined.

View File

@@ -18,7 +18,7 @@ extern char data_start[], data_end[];
#define LARGE_PAGE_MASK (~((unsigned long)LARGE_PAGE_SIZE - 1))
#define MAP_ST_START 0xffff800000000000UL
#define MAP_KERNEL_START 0xffffffff80000000UL
/* MAP_KERNEL_START is defined by cmake */
#define PTL4_SHIFT 39
#define PTL3_SHIFT 30

View File

@@ -67,8 +67,8 @@
* Placing the LWK image in the virtual address space at the end of
* the Linux modules section enables us to map the LWK TEXT in Linux
* as well, so that Linux can also call into LWK text.
* It's defined by cmake.
*/
#define MAP_KERNEL_START 0xFFFFFFFFFE800000UL
#define STACK_TOP(region) ((region)->user_end)
#define MAP_VMAP_SIZE 0x0000000100000000UL

View File

@@ -14,6 +14,28 @@ mark_as_advanced(
KBUILD_MAKE_FLAGS
)
if (${CMAKE_GENERATOR} STREQUAL Ninja)
set(MAKE "make")
list(APPEND KBUILD_MAKE_FLAGS "-j")
else ()
set(MAKE "$(MAKE)")
endif ()
# Convert McKernel "arm64" into Linux "aarch64"
if ("${ARCH}" STREQUAL "arm64")
set(LINUX_ARCH "aarch64")
else ()
set(LINUX_ARCH "${ARCH}")
endif ()
if (NOT "${LINUX_ARCH}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}")
string(REGEX REPLACE "ld$" "" CROSS_COMPILE "${CMAKE_LINKER}")
list(APPEND KBUILD_MAKE_FLAGS "ARCH=${ARCH}")
list(APPEND KBUILD_MAKE_FLAGS "CROSS_COMPILE=${CROSS_COMPILE}")
endif()
string(REPLACE ";" " " KBUILD_MAKE_FLAGS_STR "${KBUILD_MAKE_FLAGS}")
function(kmod MODULE_NAME)
cmake_parse_arguments(KMOD "" "INSTALL_DEST" "C_FLAGS;SOURCES;EXTRA_SYMBOLS;DEPENDS" ${ARGN})
@@ -33,25 +55,6 @@ endif(ENABLE_WERROR)
configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/Kbuild.in
${CMAKE_CURRENT_BINARY_DIR}/Kbuild)
if (${CMAKE_GENERATOR} STREQUAL Ninja)
set(MAKE "make")
list(APPEND KBUILD_MAKE_FLAGS "-j")
else ()
set(MAKE "$(MAKE)")
endif ()
# Convert McKernel "arm64" into Linux "aarch64"
if ("${ARCH}" STREQUAL "arm64")
set(LINUX_ARCH "aarch64")
else ()
set(LINUX_ARCH "${ARCH}")
endif ()
if (NOT "${LINUX_ARCH}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}")
string(REGEX REPLACE "ld$" "" CROSS_COMPILE "${CMAKE_LINKER}")
list(APPEND KBUILD_MAKE_FLAGS "ARCH=${ARCH};CROSS_COMPILE=${CROSS_COMPILE}")
endif()
string(REGEX REPLACE "\\.c(;|$)" ".o.cmd\\1" KMOD_O_CMD "${KMOD_SOURCES}")
string(REGEX REPLACE "[^/;]+(;|$)" ".\\0" KMOD_O_CMD "${KMOD_O_CMD}")

View File

@@ -6,7 +6,8 @@ configure_file(include/swapfmt.h.in include/swapfmt.h)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=include
OUTPUT_VARIABLE SYSTEM_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE)
add_definitions(-D__KERNEL__ -DIHK_OS_MANYCORE)
add_definitions(-D__KERNEL__ -DIHK_OS_MANYCORE
-DMAP_KERNEL_START=${MAP_KERNEL_START}UL -DKERNEL_RAM_VADDR=${MAP_KERNEL_START})
add_compile_options(-ffreestanding -O2 -nostdinc -isystem ${SYSTEM_INCLUDE} -fno-omit-frame-pointer)
include_directories(
"${CMAKE_CURRENT_BINARY_DIR}/include"
@@ -163,12 +164,17 @@ elseif (BUILD_TARGET STREQUAL "smp-arm64")
add_definitions(-DCONFIG_ARM64_SVE)
endif()
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/config/${LINKER_SCRIPT}.in
${CMAKE_CURRENT_BINARY_DIR}/config/${LINKER_SCRIPT}
@ONLY
)
add_executable(mckernel.img ${MCKERNEL_SRCS})
set_target_properties(mckernel.img PROPERTIES INSTALL_RPATH "")
set_target_properties(mckernel.img PROPERTIES LINK_FLAGS
"-e arch_start -T ${CMAKE_CURRENT_SOURCE_DIR}/config/${LINKER_SCRIPT} --build-id")
"-e arch_start -T ${CMAKE_CURRENT_BINARY_DIR}/config/${LINKER_SCRIPT} --build-id")
install(TARGETS "mckernel.img"
DESTINATION "${MCKERNELDIR}")

View File

@@ -6,7 +6,7 @@ PHDRS
}
SECTIONS
{
. = 0xffffff8007800000; /* KERNEL_START */
. = @MAP_KERNEL_START@;
_head = .;
.text : {

View File

@@ -6,7 +6,7 @@ PHDRS
}
SECTIONS
{
. = 0xffff000007800000; /* KERNEL_START */
. = @MAP_KERNEL_START@;
_head = .;
.text : {

View File

@@ -6,7 +6,7 @@ PHDRS
}
SECTIONS
{
. = 0xfffffc0007800000; /* KERNEL_START */
. = @MAP_KERNEL_START@;
_head = .;
.text : {

View File

@@ -6,7 +6,7 @@ PHDRS
}
SECTIONS
{
. = 0xffff000007800000; /* KERNEL_START */
. = @MAP_KERNEL_START@;
_head = .;
.text : {

View File

@@ -5,7 +5,7 @@ PHDRS
}
SECTIONS
{
. = 0xFFFFFFFFFE801000;
. = @MAP_KERNEL_START@ + 0x1000;
_head = .;
.text : {

View File

@@ -0,0 +1,9 @@
configure_file(mckernel.mk.in mckernel.mk @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mckernel.mk
DESTINATION ${CMAKE_INSTALL_DATADIR}/tool/crash/)
foreach(file IN ITEMS mckernel.c README)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file}
DESTINATION ${CMAKE_INSTALL_DATADIR}/tool/crash/)
endforeach()

View File

@@ -83,7 +83,7 @@ static struct mck_size_table {
#ifdef X86_64
#define MAP_FIXED_START 0xffff860000000000UL
#define MAP_KERNEL_START 0xffffffff80000000UL
/* MAP_KERNEL_START is defined by cmake */
#define MAP_ST_START 0xffff800000000000UL
unsigned long LINUX_PAGE_OFFSET = -1UL;
unsigned long x86_kernel_phys_base = -1UL;

View File

@@ -51,4 +51,4 @@ endif
all: mckernel.so
mckernel.so: $(INCDIR)/defs.h mckernel.c
gcc -Wall -g -I$(INCDIR) -shared -rdynamic -o mckernel.so mckernel.c -fPIC -D$(TARGET) $(TARGET_CFLAGS) $(GDB_FLAGS)
gcc -Wall -g -I$(INCDIR) -shared -rdynamic -o mckernel.so mckernel.c -fPIC -D$(TARGET) -DMAP_KERNEL_START=@MAP_KERNEL_START@UL $(TARGET_CFLAGS) $(GDB_FLAGS)