]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
modula-2: Fix registration of modules via constructors [PR108183].
authorIain Sandoe <iain@sandoe.co.uk>
Fri, 30 Dec 2022 19:46:13 +0000 (19:46 +0000)
committerIain Sandoe <iain@sandoe.co.uk>
Wed, 4 Jan 2023 14:54:41 +0000 (14:54 +0000)
This reworks the mechanism used for module registration to use init-
time constructors.  The order of registration is not important, the
actual initialization dependency tree will be computed early in the
execution (all that matters is that we have registered before that).

This fixes a potential issue in which the external name known to the
m2 system is of the form _M2_XXXXXX_ctor() but the C++ code was
producing a static variable instance with the same name.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108183

gcc/m2/ChangeLog:

* gm2-libs-ch/UnixArgs.cc (_M2_UnixArgs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* gm2-libs-ch/dtoa.cc (_M2_dtoa_ctor): Likewise.
* gm2-libs-ch/ldtoa.cc (_M2_ldtoa_ctor): Likewise.

libgm2/ChangeLog:

* libm2cor/KeyBoardLEDs.cc (_M2_KeyBoardLEDs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* libm2iso/ErrnoCategory.cc (_M2_ErrnoCategory_ctor): Likewise.
* libm2iso/RTco.cc (_M2_RTco_ctor): Likewise.
* libm2pim/Selective.cc (_M2_Selective_ctor): Likewise.
* libm2pim/SysExceptions.cc (_M2_SysExceptions_ctor): Likewise.
* libm2pim/UnixArgs.cc (_M2_UnixArgs_ctor): Likewise.
* libm2pim/cgetopt.cc (_M2_cgetopt_ctor): Likewise.
* libm2pim/dtoa.cc (_M2_dtoa_ctor): Likewise.
* libm2pim/errno.cc (_M2_errno_ctor): Likewise.
* libm2pim/ldtoa.cc (_M2_ldtoa_ctor): Likewise.
* libm2pim/sckt.cc (_M2_sckt_ctor): Likewise.
* libm2pim/termios.cc (_M2_termios_ctor): Likewise.
* libm2pim/wrapc.c: Add a new line to the file end.

16 files changed:
gcc/m2/gm2-libs-ch/UnixArgs.cc
gcc/m2/gm2-libs-ch/dtoa.cc
gcc/m2/gm2-libs-ch/ldtoa.cc
libgm2/libm2cor/KeyBoardLEDs.cc
libgm2/libm2iso/ErrnoCategory.cc
libgm2/libm2iso/RTco.cc
libgm2/libm2pim/Selective.cc
libgm2/libm2pim/SysExceptions.cc
libgm2/libm2pim/UnixArgs.cc
libgm2/libm2pim/cgetopt.cc
libgm2/libm2pim/dtoa.cc
libgm2/libm2pim/errno.cc
libgm2/libm2pim/ldtoa.cc
libgm2/libm2pim/sckt.cc
libgm2/libm2pim/termios.cc
libgm2/libm2pim/wrapc.c

index 1180f351b24f42a97a023d188ab831c935c56b45..4bb3769644c272b124b73d586f64461c74d5c396 100644 (file)
@@ -82,9 +82,8 @@ _M2_UnixArgs_dep (void)
 {
 }
 
-struct _M2_UnixArgs_ctor { _M2_UnixArgs_ctor (); } _M2_UnixArgs_ctor;
-
-_M2_UnixArgs_ctor::_M2_UnixArgs_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_UnixArgs_ctor (void)
 {
   M2RTS_RegisterModule ("UnixArgs", _M2_UnixArgs_init, _M2_UnixArgs_finish,
                        _M2_UnixArgs_dep);
index 57317588ba1c30af88e452d8e03a6811a3511a70..111fc4b67dc2107baca6de7f737ba578a6c86ceb 100644 (file)
@@ -189,9 +189,8 @@ _M2_dtoa_dep (void)
 #ifdef __cplusplus
 }
 
-struct _M2_dtoa_ctor { _M2_dtoa_ctor (); } _M2_dtoa_ctor;
-
-_M2_dtoa_ctor::_M2_dtoa_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_dtoa_ctor (void)
 {
   M2RTS_RegisterModule ("dtoa", _M2_dtoa_init, _M2_dtoa_finish,
                        _M2_dtoa_dep);
index ac14297ec244ebd97fc18fe28d01562529aa90c1..8d9e648fddfa82c0e07191be48040800118ca2f8 100644 (file)
@@ -118,9 +118,8 @@ _M2_ldtoa_dep (void)
 #   ifdef __cplusplus
 }
 
-struct _M2_ldtoa_ctor { _M2_ldtoa_ctor (); } _M2_ldtoa_ctor;
-
-_M2_ldtoa_ctor::_M2_ldtoa_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_ldtoa_ctor (void)
 {
   M2RTS_RegisterModule ("ldtoa", _M2_ldtoa_init, _M2_ldtoa_finish,
                        _M2_ldtoa_dep);
index b640df67adc5144f97c0d2effdaf0cf6f45625d1..bd0a4506a93d58311814c67c5516ef3638104631 100644 (file)
@@ -148,9 +148,8 @@ _M2_KeyBoardLEDs_dep (void)
 {
 }
 
-struct _M2_KeyBoardLEDs_ctor { _M2_KeyBoardLEDs_ctor (); } _M2_KeyBoardLEDs_ctor;
-
-_M2_KeyBoardLEDs_ctor::_M2_KeyBoardLEDs_ctor (void)
+extern "C" void __attribute__((__constructor__))
+ _M2_KeyBoardLEDs_ctor (void)
 {
   M2RTS_RegisterModule ("KeyBoardLEDs", _M2_KeyBoardLEDs_init, _M2_KeyBoardLEDs_finish,
                        _M2_KeyBoardLEDs_dep);
index 70e840d352b4760618dd18807e15cb1b2eb976da..2db26393f4a10b047fa7887aaf25fde126b4c79f 100644 (file)
@@ -171,9 +171,8 @@ _M2_ErrnoCategory_dep (void)
 {
 }
 
-struct _M2_ErrnoCategory_ctor { _M2_ErrnoCategory_ctor (); } _M2_ErrnoCategory_ctor;
-
-_M2_ErrnoCategory_ctor::_M2_ErrnoCategory_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_ErrnoCategory_ctor (void)
 {
   M2RTS_RegisterModule ("ErrnoCategory", _M2_ErrnoCategory_init, _M2_ErrnoCategory_fini,
                        _M2_ErrnoCategory_dep);
index 54c5078f03f65765ff9d44ef8a1b9144da0ab682..b6e46653530f3a216ad1ab580a7ba73a3553139b 100644 (file)
@@ -459,9 +459,8 @@ RTco_init (void)
   return 0;
 }
 
-struct _M2_RTco_ctor { _M2_RTco_ctor (); } _M2_RTco_ctor;
-
-_M2_RTco_ctor::_M2_RTco_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_RTco_ctor (void)
 {
   M2RTS_RegisterModule ("RTco", _M2_RTco_init, _M2_RTco_fini,
                        _M2_RTco_dep);
index a71c65779467143ed575afc9202f753c50706ce8..3c6b85533620710d033f8b3b9f2f03b058c32e16 100644 (file)
@@ -310,9 +310,8 @@ _M2_Selective_dep (void)
 {
 }
 
-struct _M2_Selective_ctor { _M2_Selective_ctor (); } _M2_Selective_ctor;
-
-_M2_Selective_ctor::_M2_Selective_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_Selective_ctor (void)
 {
   M2RTS_RegisterModule ("Selective", _M2_Selective_init, _M2_Selective_fini,
                        _M2_Selective_dep);
index 780b097aaa6e95e6ca0576383f29b08d13454bc3..2c37c7af87ef5bb3f350f5addc9fc84c0c492d80 100644 (file)
@@ -250,9 +250,8 @@ _M2_SysExceptions_dep (void)
 {
 }
 
-struct _M2_SysExceptions_ctor { _M2_SysExceptions_ctor (); } _M2_SysExceptions_ctor;
-
-_M2_SysExceptions_ctor::_M2_SysExceptions_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_SysExceptions_ctor (void)
 {
   M2RTS_RegisterModule ("SysExceptions", _M2_SysExceptions_init, _M2_SysExceptions_fini,
                        _M2_SysExceptions_dep);
index 419ad8388e7d1dd9245552055c1a1305467f31d7..944a3cde72f59556d3df007aa3cc378cd683bbb3 100644 (file)
@@ -82,9 +82,8 @@ _M2_UnixArgs_dep (void)
 {
 }
 
-struct _M2_UnixArgs_ctor { _M2_UnixArgs_ctor (); } _M2_UnixArgs_ctor;
-
-_M2_UnixArgs_ctor::_M2_UnixArgs_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_UnixArgs_ctor (void)
 {
   M2RTS_RegisterModule ("UnixArgs", _M2_UnixArgs_init, _M2_UnixArgs_fini,
                        _M2_UnixArgs_dep);
index fba20fccd22e4854aee5e625b4feee4cdc443683..4e8ac9e166058999c287b5e14389384e3aec789f 100644 (file)
@@ -149,9 +149,8 @@ _M2_cgetopt_dep (void)
 {
 }
 
-struct _M2_cgetopt_ctor { _M2_cgetopt_ctor (); } _M2_cgetopt_ctor;
-
-_M2_cgetopt_ctor::_M2_cgetopt_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_cgetopt_ctor (void)
 {
   M2RTS_RegisterModule ("cgetopt", _M2_cgetopt_init, _M2_cgetopt_fini,
                        _M2_cgetopt_dep);
index 7b8dff9781349b71f8d02b2a2fdc19a2b1e26940..95d24d456f9e450050e3f15df1397fc37259b45c 100644 (file)
@@ -255,9 +255,8 @@ _M2_dtoa_dep (void)
 {
 }
 
-struct _M2_dtoa_ctor { _M2_dtoa_ctor (); } _M2_dtoa_ctor;
-
-_M2_dtoa_ctor::_M2_dtoa_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_dtoa_ctor (void)
 {
   M2RTS_RegisterModule ("dtoa", _M2_dtoa_init, _M2_dtoa_fini,
                        _M2_dtoa_dep);
index d47b7b752538892c9da586ae0ce9b9dac6385fc5..296ab0b4c1112b18ca0120efd8e613279c080c42 100644 (file)
@@ -61,9 +61,8 @@ _M2_errno_dep (void)
 {
 }
 
-struct _M2_errno_ctor { _M2_errno_ctor (); } _M2_errno_ctor;
-
-_M2_errno_ctor::_M2_errno_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_errno_ctor (void)
 {
   M2RTS_RegisterModule ("errno", _M2_errno_init, _M2_errno_fini,
                        _M2_errno_dep);
index 8f0ae68c8d07bb11858af313af84cef8ba18d516..8b449830d709c44336cac960b4609577a34397ae 100644 (file)
@@ -180,9 +180,8 @@ _M2_ldtoa_dep (void)
 {
 }
 
-struct _M2_ldtoa_ctor { _M2_ldtoa_ctor (); } _M2_ldtoa_ctor;
-
-_M2_ldtoa_ctor::_M2_ldtoa_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_ldtoa_ctor (void)
 {
   M2RTS_RegisterModule ("ldtoa", _M2_ldtoa_init, _M2_ldtoa_fini,
                        _M2_ldtoa_dep);
index 6c68525acb0196bdf0bc353eeda4dac5a772b6be..585ed14aff0ddc976b70888b1fa25820fc3f216d 100644 (file)
@@ -421,9 +421,8 @@ _M2_sckt_dep (void)
 {
 }
 
-struct _M2_sckt_ctor { _M2_sckt_ctor (); } _M2_sckt_ctor;
-
-_M2_sckt_ctor::_M2_sckt_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_sckt_ctor (void)
 {
   M2RTS_RegisterModule ("sckt", _M2_sckt_init, _M2_sckt_finish,
                        _M2_sckt_dep);
index b446bb80cf32f506d6a9772135d8ece4335d6450..55818d2963e708510796fc72504dcc71f9c08b54 100644 (file)
@@ -1978,9 +1978,8 @@ _M2_termios_dep (void)
 {
 }
 
-struct _M2_termios_ctor { _M2_termios_ctor (); } _M2_termios_ctor;
-
-_M2_termios_ctor::_M2_termios_ctor (void)
+extern "C" void __attribute__((__constructor__))
+_M2_termios_ctor (void)
 {
   M2RTS_RegisterModule ("termios", _M2_termios_init, _M2_termios_fini,
                        _M2_termios_dep);
index 5aa491219c4ff93369f489dc7abdd374cfe33b27..8e35949a87f04f30474efbcb861f33cca0f07b75 100644 (file)
@@ -294,3 +294,4 @@ void
 _M2_wrapc_ctor ()
 {
 }
+