Keyboard layout files have special requirements to the section layout of the dell. That is because MS win32k devs didn't write proper code and that is why the original win32k first parses all sections, looks for the .data section, checks if everything is valid and then truncates a pointer in a table to 16 bit and uses this as an offset into the section. Of course that does ONLY work, if the section is the first section AND that pointer happens to be less than 64k off from the start of the section AND the image base is 64k aligned. To achieve this, add a new module type kbdlayout that does all the neccessary things. On MSVC we merge the sections with a linker command, on GCC we use a custom linker script.
svn path=/trunk/; revision=61053
set(__subsystem console)
elseif(${TYPE} STREQUAL win32gui)
set(__subsystem windows)
+ elseif(${TYPE} STREQUAL kbdlayout)
+ set_entrypoint(${MODULE} 0)
+ set_image_base(${MODULE} 0x5FFF0000)
+ set_subsystem(${MODULE} native)
+ if (MSVC)
+ # Merge the .text and .rdata section into the .data section
+ add_target_link_flags(${MODULE} "/ignore:4254 /SECTION:.data,ER /MERGE:.text=.data /MERGE:.rdata=.data /MERGE:.bss=.data /MERGE:.edata=.data")
+ else()
+ # Use a custom linker script
+ add_target_link_flags(${MODULE} "-Wl,-T,${CMAKE_SOURCE_DIR}/kbdlayout.lds")
+ add_dependencies(${MODULE} "${CMAKE_SOURCE_DIR}/kbdlayout.lds")
+ endif()
elseif(NOT ((${TYPE} STREQUAL win32dll) OR (${TYPE} STREQUAL win32ocx)
OR (${TYPE} STREQUAL cpl) OR (${TYPE} STREQUAL module)))
message(FATAL_ERROR "Unknown type ${TYPE} for module ${MODULE}")
add_library(kbda1 SHARED kbda1.c kbda1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbda1.def)
-set_entrypoint(kbda1 0)
+set_module_type(kbda1 kbdlayout)
add_dependencies(kbda1 psdk)
add_library(kbda2 SHARED kbda2.c kbda2.rc ${CMAKE_CURRENT_BINARY_DIR}/kbda2.def)
-set_entrypoint(kbda2 0)
+set_module_type(kbda2 kbdlayout)
add_dependencies(kbda2 psdk)
add_library(kbda3 SHARED kbda3.c kbda3.rc ${CMAKE_CURRENT_BINARY_DIR}/kbda3.def)
-set_entrypoint(kbda3 0)
+set_module_type(kbda3 kbdlayout)
add_dependencies(kbda3 psdk)
add_library(kbdal SHARED kbdal.c kbdal.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdal.def)
-set_entrypoint(kbdal 0)
+set_module_type(kbdal kbdlayout)
add_dependencies(kbdal psdk)
add_library(kbdarme SHARED kbdarme.c kbdarme.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdarme.def)
-set_entrypoint(kbdarme 0)
+set_module_type(kbdarme kbdlayout)
add_dependencies(kbdarme psdk)
add_library(kbdarmw SHARED kbdarmw.c kbdarmw.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdarmw.def)
-set_entrypoint(kbdarmw 0)
+set_module_type(kbdarmw kbdlayout)
add_dependencies(kbdarmw psdk)
add_library(kbdaze SHARED kbdaze.c kbdaze.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdaze.def)
-set_entrypoint(kbdaze 0)
+set_module_type(kbdaze kbdlayout)
add_dependencies(kbdaze psdk)
add_library(kbdazel SHARED kbdazel.c kbdazel.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdazel.def)
-set_entrypoint(kbdazel 0)
+set_module_type(kbdazel kbdlayout)
add_dependencies(kbdazel psdk)
add_library(kbdbe SHARED kbdbe.c kbdbe.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbe.def)
-set_entrypoint(kbdbe 0)
+set_module_type(kbdbe kbdlayout)
add_dependencies(kbdbe psdk)
add_library(kbdbga SHARED kbdbga.c kbdbga.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbga.def)
-set_entrypoint(kbdbga 0)
+set_module_type(kbdbga kbdlayout)
add_dependencies(kbdbga psdk)
add_library(kbdbgm SHARED kbdbgm.c kbdbgm.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbgm.def)
-set_entrypoint(kbdbgm 0)
+set_module_type(kbdbgm kbdlayout)
add_dependencies(kbdbgm psdk)
add_library(kbdbgt SHARED kbdbgt.c kbdbgt.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbgt.def)
-set_entrypoint(kbdbgt 0)
+set_module_type(kbdbgt kbdlayout)
add_dependencies(kbdbgt psdk)
add_library(kbdblr SHARED kbdblr.c kbdblr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdblr.def)
-set_entrypoint(kbdblr 0)
+set_module_type(kbdblr kbdlayout)
add_dependencies(kbdblr psdk)
add_library(kbdbr SHARED kbdbr.c kbdbr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbr.def)
-set_entrypoint(kbdbr 0)
+set_module_type(kbdbr kbdlayout)
add_dependencies(kbdbr psdk)
add_library(kbdbur SHARED kbdbur.c kbdbur.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdbur.def)
-set_entrypoint(kbdbur 0)
+set_module_type(kbdbur kbdlayout)
add_dependencies(kbdbur psdk)
add_library(kbdcan SHARED kbdcan.c kbdcan.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdcan.def)
-set_entrypoint(kbdcan 0)
+set_module_type(kbdcan kbdlayout)
add_dependencies(kbdcan psdk)
add_library(kbdcr SHARED kbdcr.c kbdcr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdcr.def)
-set_entrypoint(kbdcr 0)
+set_module_type(kbdcr kbdlayout)
add_dependencies(kbdcr psdk)
add_library(kbdcz SHARED kbdcz.c kbdcz.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdcz.def)
-set_entrypoint(kbdcz 0)
+set_module_type(kbdcz kbdlayout)
add_dependencies(kbdcz psdk)
add_library(kbdcz1 SHARED kbdcz1.c kbdcz1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdcz1.def)
-set_entrypoint(kbdcz1 0)
+set_module_type(kbdcz1 kbdlayout)
add_dependencies(kbdcz1 psdk)
add_library(kbdda SHARED kbdda.c kbdda.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdda.def)
-set_entrypoint(kbdda 0)
+set_module_type(kbdda kbdlayout)
add_dependencies(kbdda psdk)
add_library(kbddv SHARED kbddv.c kbddv.rc ${CMAKE_CURRENT_BINARY_DIR}/kbddv.def)
-set_entrypoint(kbddv 0)
+set_module_type(kbddv kbdlayout)
add_dependencies(kbddv psdk)
add_library(kbdes SHARED kbdes.c kbdes.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdes.def)
-set_entrypoint(kbdes 0)
+set_module_type(kbdes kbdlayout)
add_dependencies(kbdes psdk)
add_library(kbdest SHARED kbdest.c kbdest.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdest.def)
-set_entrypoint(kbdest 0)
+set_module_type(kbdest kbdlayout)
add_dependencies(kbdest psdk)
add_library(kbdfc SHARED kbdfc.c kbdfc.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdfc.def)
-set_entrypoint(kbdfc 0)
+set_module_type(kbdfc kbdlayout)
add_dependencies(kbdfc psdk)
add_library(kbdfi SHARED kbdfi.c kbdfi.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdfi.def)
-set_entrypoint(kbdfi 0)
+set_module_type(kbdfi kbdlayout)
add_dependencies(kbdfi psdk)
add_library(kbdfr SHARED kbdfr.c kbdfr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdfr.def)
-set_entrypoint(kbdfr 0)
+set_module_type(kbdfr kbdlayout)
add_dependencies(kbdfr psdk)
add_library(kbdgeo SHARED kbdgeo.c kbdgeo.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdgeo.def)
-set_entrypoint(kbdgeo 0)
+set_module_type(kbdgeo kbdlayout)
add_dependencies(kbdgeo psdk)
add_library(kbdgerg SHARED kbdgerg.c kbdgerg.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdgerg.def)
-set_entrypoint(kbdgerg 0)
+set_module_type(kbdgerg kbdlayout)
add_dependencies(kbdgerg psdk)
add_library(kbdgneo SHARED kbdgneo.c kbdgneo.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdgneo.def)
-set_entrypoint(kbdgneo 0)
+set_module_type(kbdgneo kbdlayout)
add_dependencies(kbdgneo psdk)
add_library(kbdgr SHARED kbdgr.c kbdgr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdgr.def)
-set_entrypoint(kbdgr 0)
+set_module_type(kbdgr kbdlayout)
add_dependencies(kbdgr psdk)
add_library(kbdgrist SHARED kbdgrist.c kbdgrist.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdgrist.def)
-set_entrypoint(kbdgrist 0)
+set_module_type(kbdgrist kbdlayout)
add_dependencies(kbdgrist psdk)
add_library(kbdhe SHARED kbdhe.c kbdhe.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdhe.def)
-set_entrypoint(kbdhe 0)
+set_module_type(kbdhe kbdlayout)
add_dependencies(kbdhe psdk)
add_library(kbdheb SHARED kbdheb.c kbdheb.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdheb.def)
-set_entrypoint(kbdheb 0)
+set_module_type(kbdheb kbdlayout)
add_dependencies(kbdheb psdk)
add_library(kbdhu SHARED kbdhu.c kbdhu.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdhu.def)
-set_entrypoint(kbdhu 0)
+set_module_type(kbdhu kbdlayout)
add_dependencies(kbdhu psdk)
add_library(kbdic SHARED kbdic.c kbdic.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdic.def)
-set_entrypoint(kbdic 0)
+set_module_type(kbdic kbdlayout)
add_dependencies(kbdic psdk)
add_library(kbdinasa SHARED kbdinasa.c kbdinasa.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdinasa.def)
-set_entrypoint(kbdinasa 0)
+set_module_type(kbdinasa kbdlayout)
add_dependencies(kbdinasa psdk)
add_library(kbdinben SHARED kbdinben.c kbdinben.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdinben.def)
-set_entrypoint(kbdinben 0)
+set_module_type(kbdinben kbdlayout)
add_dependencies(kbdinben psdk)
add_library(kbdindev SHARED kbdindev.c kbdindev.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdindev.def)
-set_entrypoint(kbdindev 0)
+set_module_type(kbdindev kbdlayout)
add_dependencies(kbdindev psdk)
add_library(kbdinguj SHARED kbdinguj.c kbdinguj.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdinguj.def)
-set_entrypoint(kbdinguj 0)
+set_module_type(kbdinguj kbdlayout)
add_dependencies(kbdinguj psdk)
add_library(kbdinmal SHARED kbdinmal.c kbdinmal.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdinmal.def)
-set_entrypoint(kbdinmal 0)
+set_module_type(kbdinmal kbdlayout)
add_dependencies(kbdinmal psdk)
add_library(kbdir SHARED kbdir.c kbdir.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdir.def)
-set_entrypoint(kbdir 0)
+set_module_type(kbdir kbdlayout)
add_dependencies(kbdir psdk)
add_library(kbdit SHARED kbdit.c kbdit.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdit.def)
-set_entrypoint(kbdit 0)
+set_module_type(kbdit kbdlayout)
add_dependencies(kbdit psdk)
add_library(kbdja SHARED kbdja.c kbdja.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdja.def)
-set_entrypoint(kbdja 0)
+set_module_type(kbdja kbdlayout)
add_dependencies(kbdja psdk)
add_library(kbdkaz SHARED kbdkaz.c kbdkaz.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdkaz.def)
-set_entrypoint(kbdkaz 0)
+set_module_type(kbdkaz kbdlayout)
add_dependencies(kbdkaz psdk)
add_library(kbdko SHARED kbdko.c kbdko.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdko.def)
-set_entrypoint(kbdko 0)
+set_module_type(kbdko kbdlayout)
add_dependencies(kbdko psdk)
add_library(kbdla SHARED kbdla.c kbdla.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdla.def)
-set_entrypoint(kbdla 0)
+set_module_type(kbdla kbdlayout)
add_dependencies(kbdla psdk)
add_library(kbdlt1 SHARED kbdlt1.c kbdlt1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdlt1.def)
-set_entrypoint(kbdlt1 0)
+set_module_type(kbdlt1 kbdlayout)
add_dependencies(kbdlt1 psdk)
add_library(kbdlv SHARED kbdlv.c kbdlv.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdlv.def)
-set_entrypoint(kbdlv 0)
+set_module_type(kbdlv kbdlayout)
add_dependencies(kbdlv psdk)
add_library(kbdmac SHARED kbdmac.c kbdmac.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdmac.def)
-set_entrypoint(kbdmac 0)
+set_module_type(kbdmac kbdlayout)
add_dependencies(kbdmac psdk)
add_library(kbdne SHARED kbdne.c kbdne.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdne.def)
-set_entrypoint(kbdne 0)
+set_module_type(kbdne kbdlayout)
add_dependencies(kbdne psdk)
add_library(kbdno SHARED kbdno.c kbdno.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdno.def)
-set_entrypoint(kbdno 0)
+set_module_type(kbdno kbdlayout)
add_dependencies(kbdno psdk)
add_library(kbdpl SHARED kbdpl.c kbdpl.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdpl.def)
-set_entrypoint(kbdpl 0)
+set_module_type(kbdpl kbdlayout)
add_dependencies(kbdpl psdk)
add_library(kbdpl1 SHARED kbdpl1.c kbdpl1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdpl1.def)
-set_entrypoint(kbdpl1 0)
+set_module_type(kbdpl1 kbdlayout)
add_dependencies(kbdpl1 psdk)
add_library(kbdpo SHARED kbdpo.c kbdpo.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdpo.def)
-set_entrypoint(kbdpo 0)
+set_module_type(kbdpo kbdlayout)
add_dependencies(kbdpo psdk)
add_library(kbdro SHARED kbdro.c kbdro.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdro.def)
-set_entrypoint(kbdro 0)
+set_module_type(kbdro kbdlayout)
add_dependencies(kbdro psdk)
add_library(kbdru SHARED kbdru.c kbdru.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdru.def)
-set_entrypoint(kbdru 0)
+set_module_type(kbdru kbdlayout)
add_dependencies(kbdru psdk)
add_library(kbdru1 SHARED kbdru1.c kbdru1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdru1.def)
-set_entrypoint(kbdru1 0)
+set_module_type(kbdru1 kbdlayout)
add_dependencies(kbdru1 psdk)
add_library(kbdsg SHARED kbdsg.c kbdsg.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdsg.def)
-set_entrypoint(kbdsg 0)
+set_module_type(kbdsg kbdlayout)
add_dependencies(kbdsg psdk)
add_library(kbdsk SHARED kbdsk.c kbdsk.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdsk.def)
-set_entrypoint(kbdsk 0)
+set_module_type(kbdsk kbdlayout)
add_dependencies(kbdsk psdk)
add_library(kbdsk1 SHARED kbdsk1.c kbdsk1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdsk1.def)
-set_entrypoint(kbdsk1 0)
+set_module_type(kbdsk1 kbdlayout)
add_dependencies(kbdsk1 psdk)
add_library(kbdsw SHARED kbdsw.c kbdsw.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdsw.def)
-set_entrypoint(kbdsw 0)
+set_module_type(kbdsw kbdlayout)
add_dependencies(kbdsw psdk)
add_library(kbdtat SHARED kbdtat.c kbdtat.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdtat.def)
-set_entrypoint(kbdtat 0)
+set_module_type(kbdtat kbdlayout)
add_dependencies(kbdtat psdk)
add_library(kbdth0 SHARED kbdth0.c kbdth0.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdth0.def)
-set_entrypoint(kbdth0 0)
+set_module_type(kbdth0 kbdlayout)
add_dependencies(kbdth0 psdk)
add_library(kbdth1 SHARED kbdth1.c kbdth1.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdth1.def)
-set_entrypoint(kbdth1 0)
+set_module_type(kbdth1 kbdlayout)
add_dependencies(kbdth1 psdk)
add_library(kbdth2 SHARED kbdth2.c kbdth2.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdth2.def)
-set_entrypoint(kbdth2 0)
+set_module_type(kbdth2 kbdlayout)
add_dependencies(kbdth2 psdk)
add_library(kbdth3 SHARED kbdth3.c kbdth3.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdth3.def)
-set_entrypoint(kbdth3 0)
+set_module_type(kbdth3 kbdlayout)
add_dependencies(kbdth3 psdk)
add_library(kbdtuf SHARED kbdtuf.c kbdtuf.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdtuf.def)
-set_entrypoint(kbdtuf 0)
+set_module_type(kbdtuf kbdlayout)
add_dependencies(kbdtuf psdk)
add_library(kbdtuq SHARED kbdtuq.c kbdtuq.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdtuq.def)
-set_entrypoint(kbdtuq 0)
+set_module_type(kbdtuq kbdlayout)
add_dependencies(kbdtuq psdk)
add_library(kbduk SHARED kbduk.c kbduk.rc ${CMAKE_CURRENT_BINARY_DIR}/kbduk.def)
-set_entrypoint(kbduk 0)
+set_module_type(kbduk kbdlayout)
add_dependencies(kbduk psdk)
add_library(kbdur SHARED kbdur.c kbdur.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdur.def)
-set_entrypoint(kbdur 0)
+set_module_type(kbdur kbdlayout)
add_dependencies(kbdur psdk)
add_library(kbdurs SHARED kbdurs.c kbdurs.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdurs.def)
-set_entrypoint(kbdurs 0)
+set_module_type(kbdurs kbdlayout)
add_dependencies(kbdurs psdk)
add_library(kbdus SHARED kbdus.c kbdus.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdus.def)
-set_entrypoint(kbdus 0)
+set_module_type(kbdus kbdlayout)
add_dependencies(kbdus psdk)
add_library(kbdusa SHARED kbdusa.c kbdusa.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdusa.def)
-set_entrypoint(kbdusa 0)
+set_module_type(kbdusa kbdlayout)
add_dependencies(kbdusa psdk)
add_library(kbdusl SHARED kbdusl.c kbdusl.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdusl.def)
-set_entrypoint(kbdusl 0)
+set_module_type(kbdusl kbdlayout)
add_dependencies(kbdusl psdk)
add_library(kbdusr SHARED kbdusr.c kbdusr.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdusr.def)
-set_entrypoint(kbdusr 0)
+set_module_type(kbdusr kbdlayout)
add_dependencies(kbdusr psdk)
add_library(kbdusx SHARED kbdusx.c kbdusx.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdusx.def)
-set_entrypoint(kbdusx 0)
+set_module_type(kbdusx kbdlayout)
add_dependencies(kbdusx psdk)
add_library(kbduzb SHARED kbduzb.c kbduzb.rc ${CMAKE_CURRENT_BINARY_DIR}/kbduzb.def)
-set_entrypoint(kbduzb 0)
+set_module_type(kbduzb kbdlayout)
add_dependencies(kbduzb psdk)
add_library(kbdvntc SHARED kbdvntc.c kbdvntc.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdvntc.def)
-set_entrypoint(kbdvntc 0)
+set_module_type(kbdvntc kbdlayout)
add_dependencies(kbdvntc psdk)
add_library(kbdycc SHARED kbdycc.c kbdycc.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdycc.def)
-set_entrypoint(kbdycc 0)
+set_module_type(kbdycc kbdlayout)
add_dependencies(kbdycc psdk)
add_library(kbdycl SHARED kbdycl.c kbdycl.rc ${CMAKE_CURRENT_BINARY_DIR}/kbdycl.def)
-set_entrypoint(kbdycl 0)
+set_module_type(kbdycl kbdlayout)
add_dependencies(kbdycl psdk)
--- /dev/null
+SECTIONS
+{
+ .data __image_base__ + __section_alignment__ :
+ {
+ *(.data)
+ *(SORT(.data*))
+ *(.rdata)
+ *(SORT(.rdata*))
+ *(.text)
+ *(SORT(.text*))
+ *(.bss)
+ *(COMMON)
+ }
+
+ .rsrc BLOCK(__section_alignment__) :
+ {
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+ }
+
+ .reloc BLOCK(__section_alignment__) :
+ {
+ *(.reloc)
+ }
+
+ .edata BLOCK(__section_alignment__) :
+ {
+ *(.edata)
+ }
+
+ /DISCARD/ :
+ {
+ *(*)
+ }
+}