g77 block data initialization

Dave Love d.love@dl.ac.uk
Mon Oct 19 11:19:00 GMT 1998

>>>>> "Skip" == Skip Egdorf <egdorf@zaphod.lanl.gov> writes:

 Skip> The main program is basically
 Skip>       PROGRAM MAIN
 Skip>       CALL STUFF
 Skip>       STOP
 Skip>       END

 Skip> where STUFF is all the actual program. I am replacing this with
 Skip> something like

 Skip> #include <dlfcn.h>
 Skip>       main (int ac, char **av)
 Skip>       {
 Skip>       h1 = dlopen ("flib1.so", ...);
 Skip>       h2 = dlopen ("flib2.so", ...);
 Skip>       ...
 Skip>       f = dlsym (h1, "STUFF_");
 Skip>       (*f)();
 Skip>       }

Uhm, why?  What's the advantage over just linking the shared (or even
static) libraries as normal?  [Note, BTW, if this is x86, that shared
objects consume a precious register, I believe -- can someone confirm
that, as we should probably note it in the doc?]

 Skip> The egcs problem seems to be that the initialization performed
 Skip> by the block-data programs ONLY happens in the FIRST archive
 Skip> loaded. Any block datas in the second, third, ... libraries do
 Skip> not seem to have their initializations performed.

To address any bug we'd need a runnable example and `g77 -v' output,
per manual.  You are using EXTERNAL for the block data and making sure
that's resolved, aren't you?

 Skip> Could someone

 Skip> a) give a brief tutorial, or point at a brief tutorial on how
 Skip>    fortran block data is implemented in egcs? I'm stonewalled, not
 Skip>    knowing exactly what I am looking at or for.

If you can tell us what information is missing from the g77 manual,
perhaps we can fill it in.  The second index entry (Block Data and
Libraries) seems to be the relevant one.

More information about the Gcc-bugs mailing list