From 5d3975ab89e623af16573345ec0d6d665612fd1b Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 19 Mar 2013 17:53:07 +0100 Subject: Add support for static constructors and destructors --- lib/efm32/efm32g/libopencm3_efm32g.ld | 23 +++++++++++++++++++++++ lib/efm32/efm32gg/libopencm3_efm32gg.ld | 23 +++++++++++++++++++++++ lib/efm32/efm32lg/libopencm3_efm32lg.ld | 23 +++++++++++++++++++++++ lib/efm32/efm32tg/libopencm3_efm32tg.ld | 23 +++++++++++++++++++++++ 4 files changed, 92 insertions(+) (limited to 'lib/efm32') diff --git a/lib/efm32/efm32g/libopencm3_efm32g.ld b/lib/efm32/efm32g/libopencm3_efm32g.ld index b18da7f..87d6ee6 100644 --- a/lib/efm32/efm32g/libopencm3_efm32g.ld +++ b/lib/efm32/efm32g/libopencm3_efm32g.ld @@ -38,6 +38,29 @@ SECTIONS . = ALIGN(4); } >rom + /* C++ Static constructors/destructors, also used for __attribute__ + * ((constructor)) and the likes */ + .preinit_array : { + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + } >rom + .init_array : { + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + } >rom + .fini_array : { + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + } >rom + /* * Another section used by C++ stuff, appears when using newlib with * 64bit (long long) printf support diff --git a/lib/efm32/efm32gg/libopencm3_efm32gg.ld b/lib/efm32/efm32gg/libopencm3_efm32gg.ld index b18da7f..87d6ee6 100644 --- a/lib/efm32/efm32gg/libopencm3_efm32gg.ld +++ b/lib/efm32/efm32gg/libopencm3_efm32gg.ld @@ -38,6 +38,29 @@ SECTIONS . = ALIGN(4); } >rom + /* C++ Static constructors/destructors, also used for __attribute__ + * ((constructor)) and the likes */ + .preinit_array : { + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + } >rom + .init_array : { + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + } >rom + .fini_array : { + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + } >rom + /* * Another section used by C++ stuff, appears when using newlib with * 64bit (long long) printf support diff --git a/lib/efm32/efm32lg/libopencm3_efm32lg.ld b/lib/efm32/efm32lg/libopencm3_efm32lg.ld index b18da7f..87d6ee6 100644 --- a/lib/efm32/efm32lg/libopencm3_efm32lg.ld +++ b/lib/efm32/efm32lg/libopencm3_efm32lg.ld @@ -38,6 +38,29 @@ SECTIONS . = ALIGN(4); } >rom + /* C++ Static constructors/destructors, also used for __attribute__ + * ((constructor)) and the likes */ + .preinit_array : { + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + } >rom + .init_array : { + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + } >rom + .fini_array : { + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + } >rom + /* * Another section used by C++ stuff, appears when using newlib with * 64bit (long long) printf support diff --git a/lib/efm32/efm32tg/libopencm3_efm32tg.ld b/lib/efm32/efm32tg/libopencm3_efm32tg.ld index b18da7f..87d6ee6 100644 --- a/lib/efm32/efm32tg/libopencm3_efm32tg.ld +++ b/lib/efm32/efm32tg/libopencm3_efm32tg.ld @@ -38,6 +38,29 @@ SECTIONS . = ALIGN(4); } >rom + /* C++ Static constructors/destructors, also used for __attribute__ + * ((constructor)) and the likes */ + .preinit_array : { + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + } >rom + .init_array : { + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + } >rom + .fini_array : { + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + } >rom + /* * Another section used by C++ stuff, appears when using newlib with * 64bit (long long) printf support -- cgit v1.2.3