diff --git a/global.lds b/global.lds new file mode 100644 index 00000000000..70cf314c477 --- /dev/null +++ b/global.lds @@ -0,0 +1,103 @@ +OUTPUT_FORMAT(pei-i386) +SECTIONS +{ + .text __image_base__ + __section_alignment__ : + { + __text_start__ = .; + *(.init) + *(.text) + *(SORT(.text$*)) + *(.glue_7t) + *(.glue_7) + *(.jcr) + ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; + LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); + ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; + LONG (-1);*(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); + *(.fini) + *(.gcc_exc) + __text_end__ = .; + *(.gcc_except_table) + } + init BLOCK(__section_alignment__) : + { + __init_start__ = . ; + *(init) + __init_end__ = . ; + } + .data BLOCK(__section_alignment__) : + { + __data_start__ = . ; + *(.data) + *(.data2) + *(SORT(.data$*)) + __data_end__ = . ; + __bss_start__ = . ; + *(.bss) + *(COMMON) + __bss_end__ = . ; + *(SORT(.CRT$*)) + } + .rdata BLOCK(__section_alignment__) : + { + *(.rdata) + *(SORT(.rdata$*)) + *(.eh_frame) + } + .edata BLOCK(__section_alignment__) : { *(.edata) } + .idata BLOCK(__section_alignment__) : + { + /* This cannot currently be handled with grouped sections. + See pe.em:sort_sections. */ + SORT(*)(.idata$2) + SORT(*)(.idata$3) + /* These zeroes mark the end of the import list. */ + LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); + SORT(*)(.idata$4) + SORT(*)(.idata$5) + SORT(*)(.idata$6) + SORT(*)(.idata$7) + } + .tls BLOCK(__section_alignment__) : + { + *(.tls) + *(.tls$) + *(SORT(.tls$*)) + } + /DISCARD/ : + { + *(.debug$S) + *(.debug$T) + *(.debug$F) + *(.drectve) + *(.debug_loc) + *(.debug_ranges) + *(.debug_aranges) + *(.debug_str) + *(.debug_frame) + *(.debug_pubnames) + *(.debug_pubtypes) + *(.gnu.linkonce.wt.*) + } + .rsrc BLOCK(__section_alignment__) : + { + *(.rsrc) + *(SORT(.rsrc$*)) + } + .reloc BLOCK(__section_alignment__) : + { + *(.reloc) + } + .debug_info BLOCK(__section_alignment__) (NOLOAD) : + { + [ .debug_info ] + } + .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) : + { + [ .debug_abbrev ] + } + .debug_line BLOCK(__section_alignment__) (NOLOAD) : + { + [ .debug_line ] + } +} \ No newline at end of file diff --git a/toolchain-mingw32.cmake b/toolchain-mingw32.cmake index b9fa62b0885..655e910bd99 100644 --- a/toolchain-mingw32.cmake +++ b/toolchain-mingw32.cmake @@ -1,5 +1,5 @@ -SET(ARCH i386) +set(ARCH i386) # Choose the right MinGW prefix if (CMAKE_HOST_SYSTEM_NAME MATCHES Windows) @@ -18,11 +18,12 @@ SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}g++) SET(CMAKE_RC_COMPILER ${MINGW_PREFIX}windres) SET(CMAKE_ASM_COMPILER ${MINGW_PREFIX}gcc) SET(CMAKE_ASM_COMPILE_OBJECT " -x assembler-with-cpp -o -D__ASM__ -c ") -SET(CMAKE_RC_COMPILE_OBJECT " -O coff -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_BINARY_DIR}/include/reactos -i -o -DRC_INVOKED") + +SET(CMAKE_RC_COMPILE_OBJECT " -i -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -O coff -o ") # Use stdcall fixups, and don't link with anything by default unless we say so -set(CMAKE_C_STANDARD_LIBRARIES "-lgcc") # We should add the environment libgcc here -SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup -Wl,--kill-at -nodefaultlibs -nostdlib") +set(CMAKE_C_STANDARD_LIBRARIES -lgcc CACHE STRING "libgcc") # We should add the environment libgcc here +set(CMAKE_SHARED_LINKER_FLAGS_INIT "-nodefaultlibs -nostdlib -Wl,--enable-auto-image-base -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl,-T,${REACTOS_SOURCE_DIR}/global.lds") # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search @@ -30,3 +31,4 @@ SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup -Wl,--kill-at -nodefau set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +