GLOBAL constructor symbol names for static vars are bogus!

Mike Stump mrs@wrs.com
Mon Mar 23 13:39:00 GMT 1998


> Date: Mon, 23 Mar 1998 13:50:45 -0500 (EST)
> From: "Brad M. Garcia" <bgarcia@fore.com>
> To: Mike Stump <mrs@wrs.com>

> On Fri, 20 Mar 1998, Mike Stump wrote:

> > munch from VxWorks is wrong.  Sed the output of munch to use asm ("bla
> > bla") on the decls, and it should work. 

> Can you give a small example?  I don't know much about inline asm.

nm t.o | munch | sed 's/void \([a-zA-Z.$_0-9]*\)()/void \1() asm("\1")/; s/ \([a-zA-Z0-9_$.]\)/ @\1/g; : foo; /@/{s/@\./_dots_@/g; s/@\([a-zA-Z0-9_$.]\)/\1@/g; s/@\([^a-zA-Z0-9_$.]\)/\1/g; s/@$//; b foo; }'

of:

void __foo1 () asm("__ct_real.function");

void runctors() {
  __foo1 ();
}

class A {
public:
  A () { }
} a;

gives:

...
void _GLOBAL__dots_I_dots_runctors__Fv() asm("_GLOBAL_.I.runctors__Fv");
...
    _GLOBAL__dots_I_dots_runctors__Fv,
...

and this can then be compiled in the normal fashion.

> > Or you can add a real decl to the file.

> What do you mean by this?

If you add void __dummy5() { } to the file, at the top, the problem
will also go away.



More information about the Gcc-bugs mailing list