[PATCH 3/4] libgcc: vxcrtstuff.c: make ctor/dtor functions static
Olivier Hainque
hainque@adacore.com
Tue Nov 30 10:14:54 GMT 2021
Hi Rasmus,
We had something close but slight different for
the support of shared libraries (for which I'm preparing
the patches). I think your version should work as well
but we have quite a few configurations and the devil is
in the details so I'm testing the effects in a few cases
before approving.
Olivier
> On 1 Nov 2021, at 10:34, Rasmus Villemoes <rv@rasmusvillemoes.dk> wrote:
>
> When the translation unit itself creates pointers to the ctors/dtors
> in a specific section handled by the linker (whether .init_array or
> .ctors.*), there's no reason for the functions to have external
> linkage. That ends up polluting the symbol table in the running
> kernel.
>
> This makes vxcrtstuff.c on par with the generic crtstuff.c which also
> defines e.g. frame_dummy and __do_global_dtors_aux static.
>
> libgcc/
> * config/vxcrtstuff.c: Make constructor and destructor
> functions static when possible.
> ---
> libgcc/config/vxcrtstuff.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/libgcc/config/vxcrtstuff.c b/libgcc/config/vxcrtstuff.c
> index c146e1be3be..652a65364b0 100644
> --- a/libgcc/config/vxcrtstuff.c
> +++ b/libgcc/config/vxcrtstuff.c
> @@ -58,14 +58,18 @@ __attribute__((section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4)))
>
> #define EH_CTOR_NAME _crtbe_register_frame
> #define EH_DTOR_NAME _ctrbe_deregister_frame
> +#define EH_LINKAGE static
>
> #else
>
> /* No specific sections for constructors or destructors: we thus use a
> symbol naming convention so that the constructors are then recognized
> - by munch or whatever tool is used for the final link phase. */
> + by munch or whatever tool is used for the final link phase. Since the
> + pointers to the constructor/destructor functions are not created in this
> + translation unit, they must have external linkage. */
> #define EH_CTOR_NAME _GLOBAL__I_00101_0__crtbe_register_frame
> #define EH_DTOR_NAME _GLOBAL__D_00101_1__crtbe_deregister_frame
> +#define EH_LINKAGE
>
> #endif
>
> @@ -88,13 +92,13 @@ __attribute__((section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4)))
>
> #endif /* USE_INITFINI_ARRAY */
>
> -EH_CTOR_ATTRIBUTE void EH_CTOR_NAME (void)
> +EH_LINKAGE EH_CTOR_ATTRIBUTE void EH_CTOR_NAME (void)
> {
> static struct object object;
> __register_frame_info (__EH_FRAME_BEGIN__, &object);
> }
>
> -EH_DTOR_ATTRIBUTE void EH_DTOR_NAME (void)
> +EH_LINKAGE EH_DTOR_ATTRIBUTE void EH_DTOR_NAME (void)
> {
> __deregister_frame_info (__EH_FRAME_BEGIN__);
> }
> --
> 2.31.1
>
More information about the Gcc-patches
mailing list