diff --git a/hal/halx86/CMakeLists.txt b/hal/halx86/CMakeLists.txt index c7f1bdaccb5..e56a791d8da 100644 --- a/hal/halx86/CMakeLists.txt +++ b/hal/halx86/CMakeLists.txt @@ -52,7 +52,7 @@ function(add_hal _halname) set_module_type(${_halname} kerneldll ENTRYPOINT HalInitSystem 8) add_cd_file(TARGET ${_halname} DESTINATION reactos/system32 NO_CAB FOR all) if(MSVC) - add_target_link_flags(${_halname} "/ignore:4216 /ignore:4078") + add_target_link_flags(${_halname} "/ignore:4216 /SECTION:INIT,ERWD") else() target_link_libraries(${_halname} -lgcc) endif() diff --git a/ntoskrnl/CMakeLists.txt b/ntoskrnl/CMakeLists.txt index e1823f70019..13ca75e351a 100644 --- a/ntoskrnl/CMakeLists.txt +++ b/ntoskrnl/CMakeLists.txt @@ -36,7 +36,7 @@ set_subsystem(ntoskrnl native) if(MSVC) set_image_base(ntoskrnl 0x00400000) add_target_link_flags(ntoskrnl "/SECTION:.rsrc,!DP") #Accessed from bugcheck code - add_target_link_flags(ntoskrnl "/SECTION:INIT,D") + add_target_link_flags(ntoskrnl "/SECTION:INIT,ERWD") else() if(GDB) # Completely disable optimizations when debugging the kernel diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index d4aed60c361..a3048c34e1d 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -248,9 +248,9 @@ function(set_module_type_toolchain MODULE TYPE) add_target_link_flags(${MODULE} "/DLL") elseif(${TYPE} STREQUAL "kernelmodedriver") # Disable linker warning 4078 (multiple sections found with different attributes) for INIT section use - add_target_link_flags(${MODULE} "/DRIVER /IGNORE:4078 /SECTION:INIT,D") + add_target_link_flags(${MODULE} "/DRIVER /SECTION:INIT,ERWD") elseif(${TYPE} STREQUAL "wdmdriver") - add_target_link_flags(${MODULE} "/DRIVER:WDM /IGNORE:4078 /SECTION:INIT,D") + add_target_link_flags(${MODULE} "/DRIVER:WDM /SECTION:INIT,ERWD") endif() if(RUNTIME_CHECKS) diff --git a/sdk/include/ndk/section_attribs.h b/sdk/include/ndk/section_attribs.h index 2d1007aac6a..4b2a6100f32 100644 --- a/sdk/include/ndk/section_attribs.h +++ b/sdk/include/ndk/section_attribs.h @@ -8,7 +8,7 @@ Header Name: Abstract: - Preprocessor definitions to put code and data into the INIT section. + Preprocessor definitions to put code and data into specific sections. Author: @@ -20,19 +20,13 @@ Author: #if defined(__GNUC__) || defined(__clang__) -#define INIT_SECTION __attribute__((section ("INIT"))) -#define INIT_FUNCTION __attribute__((section ("INIT"))) +#define DATA_SEG(segment) __attribute__((section(segment))) +#define CODE_SEG(segment) __attribute__((section(segment))) #elif defined(_MSC_VER) -#pragma comment(linker, "/SECTION:INIT,ERW") -#define INIT_SECTION __declspec(allocate("INIT")) -#if (_MSC_VER >= 1800) // Visual Studio 2013 / version 12.0 -#define INIT_FUNCTION __declspec(code_seg("INIT")) -#else -#pragma section("INIT", read,execute,discard) -#define INIT_FUNCTION -#endif +#define DATA_SEG(segment) __declspec(allocate(segment)) +#define CODE_SEG(segment) __declspec(code_seg(segment)) #else