delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/10/16/16:25:00

Message-Id: <m0xLopM-000S26C@inti.gov.ar>
Comments: Authenticated sender is <salvador AT natacha DOT inti DOT gov DOT ar>
From: "Salvador Eduardo Tropea (SET)" <salvador AT inti DOT edu DOT ar>
Organization: INTI
To: Nate Eldredge <eldredge AT ap DOT net>, djgpp AT delorie DOT com
Date: Thu, 16 Oct 1997 15:31:48 +0000
MIME-Version: 1.0
Subject: Re: RHIDE Question.

Nate Eldredge <eldredge AT ap DOT net> wrote:
> At 04:32  10/15/1997 +0000, Salvador Eduardo Tropea (SET) wrote:
> >Eli Zaretskii <eliz AT is DOT elta DOT co DOT il> wrote:
> 
> >> However, I think I have a case where the link order really is
> >> important.  This is when one or more of the modules being linked use
> >> functions with `__attribute__((constructor))' or ((destructor)).
> >> 
> >> For example, imagine that a program uses Filesystem Extensions to
> >> install handlers for some special files, and uses the constructor
> >> attribute to make the installation happen before `main' gets called.
> >> 
> >> These functions will be invoked by the startup/exit code in the order
> >> they are seen by the linker.  And that order might be important,
> >> e.g. when one function needs to install itself ahead of others, so it
> >> sees the calls first.
> >I faced this problem with constructors of classes and library functions that 
> >must be initialized before the constructor. I think the best way is to call
> the 
> >initialization of the other module from the constructor. 
************************************
> >If the module is 
> >already initialized it will return without making anything, if not is 
> >initialized. The other way is to check if the module is initialized in each 
> >function that's called externally. The last is a good practice and normally 
> >isn't slow to add:
> >
> >XXXX
> >{ 
> > if (!initialized)
> >   initialize();
> >}
> >
> >in the entry points. In this way you don't depend on the order of the link.
> Or how about this:
> void initialize(void) __attribute__((constructor));
> 
> void initialize(void)
> {
>    initialize_first_piece();
>    initialize_second_piece();
>    /* ... */
> }
> 
Of course is valid, is the same I say above the ****************** ;-)

SET

 
------------------------------------ 0 --------------------------------
Visit my home page: http://www.geocities.com/SiliconValley/Vista/6552/
Salvador Eduardo Tropea (SET). (Electronics Engineer)
Alternative e-mail: set-sot AT usa DOT net - ICQ: 2951574
Address: Curapaligue 2124, Caseros, 3 de Febrero
Buenos Aires, (1678), ARGENTINA
TE: +(541) 759 0013

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019