public inbox for c++-embedded@sourceware.org
 help / color / mirror / Atom feed
* Re: gcc vs g++ and linking with as
@ 1998-06-25  9:21 Dave Hansen
  0 siblings, 0 replies; 8+ messages in thread
From: Dave Hansen @ 1998-06-25  9:21 UTC (permalink / raw)
  To: c++-embedded, choward; +Cc: crossgcc

This is the name mangling that g++ uses to resolve overloaded functions.
To prevent this, declare the assembly functions as extern "C" in the
C++ code.  For example:

   extern "C" asm_fn();

HTH.  Regards,

     -=Dave

>>> Chris Howard <choward@intellistor.com> 06/25/98 10:29AM >>>
binutils 2.9
gcc/g++ 2.8.0

Host Sun Sparc Solaris 2.5
Target Motorola Coldfire (-m5200)  a.out object format

---

Not using stdlib  (-nostdlib)

We have some code in assembler, and some in C.
Compiling with as,gcc and linking with ld works fine.
Compiling with as,g++ and linking with ld does not work,
  undefined symbols for those things written in assembler.

The .o files output from g++ compilation have exported symbols that
end in '__Fv' whereas the assembler output .o files don't have
'__Fv' on the symbols.  Is that the problem?  Is there
some way to make it work?  What is __Fv?


An alternative might be to put the assembly code in
C/C++ wrapper functions.  Any hints/comments that
would be appreciated also.  


-- 
Chris Howard            Fujitsu Computer Products of America
                                          Longmont, Colorado
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             !
                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

^ permalink raw reply	[flat|nested] 8+ messages in thread
* RE: gcc vs g++ and linking with as
@ 1998-06-25 11:36 Gary Mussar
  0 siblings, 0 replies; 8+ messages in thread
From: Gary Mussar @ 1998-06-25 11:36 UTC (permalink / raw)
  To: choward, Dave Hansen; +Cc: c++-embedded, crossgcc

> But none of it is C++ code.  It's all C or assembler.
> Shouldn't gcc and g++ compile a *.c file the same way?
> 
No, gcc and g++ shells are almost alike but g++ always assumes that the
source is c++ rather than examining the extension to make that
determination.

> Also, we have calls going both ways  c-->asm()  asm-->c()
> 
> Sounds like name mangling will make asm-->c++() impossible (?)
> 
Its not impossible. You need to either know what the mangled name is to
invoke the routine (not recommended because it changes) or you need to
create the routine with C++ name mangling (using the C++ extern "C" stuff). 

Turning off name mangling for a particular function will prevent you from
overloading that function. 

You are treading on dangerous ground if you attempt to call member functions
of C++ objects because you will need to know the internals of how the "this"
pointer is passed around, etc..

Gary

> Dave Hansen wrote:
> > 
> > This is the name mangling that g++ uses to resolve overloaded functions.
> > To prevent this, declare the assembly functions as extern "C" in the
> > C++ code.  For example:
> > 
> >    extern "C" asm_fn();
> > 
> > HTH.  Regards,
> > 
> >      -=Dave
> > 
> > >>> Chris Howard <choward@intellistor.com> 06/25/98 10:29AM >>>
> > binutils 2.9
> > gcc/g++ 2.8.0
> > 
> > Host Sun Sparc Solaris 2.5
> > Target Motorola Coldfire (-m5200)  a.out object format
> > 
> > ---
> > 
> > Not using stdlib  (-nostdlib)
> > 
> > We have some code in assembler, and some in C.
> > Compiling with as,gcc and linking with ld works fine.
> > Compiling with as,g++ and linking with ld does not work,
> >   undefined symbols for those things written in assembler.
> > 
> > The .o files output from g++ compilation have exported symbols that
> > end in '__Fv' whereas the assembler output .o files don't have
> > '__Fv' on the symbols.  Is that the problem?  Is there
> > some way to make it work?  What is __Fv?
> > 
> > An alternative might be to put the assembly code in
> > C/C++ wrapper functions.  Any hints/comments that
> > would be appreciated also.
> > 
> > --
> > Chris Howard            Fujitsu Computer Products of America
> >                                           Longmont, Colorado
> >
> 
> 
> -- 
> Chris Howard            Fujitsu Computer Products of America
>                                           Longmont, Colorado

^ permalink raw reply	[flat|nested] 8+ messages in thread
* RE: gcc vs g++ and linking with as
@ 1998-06-25 11:26 Gary Mussar
  0 siblings, 0 replies; 8+ messages in thread
From: Gary Mussar @ 1998-06-25 11:26 UTC (permalink / raw)
  To: choward, c++-embedded; +Cc: crossgcc

The gcc shell will examine the suffix of the source file to determine if the
language is C or C++. The g++ shell assumes the language is C++ no matter
what the source file extension is. As a result, your file has been compiled
as a C++ file rather than a C file and C++ name mangling has been applied. 

Dave Hansen suggested using extern "C" around the appropriate sections of
code where you don't want C++ name mangling to occur. 

You can tell g++ that the source file is really C rather than C++ with the
-x c option.

You can modify you assembler routines to specify mangled names (which is not
really recommended because the name mangling scheme can change from release
to release).

> -----Original Message-----
> binutils 2.9
> gcc/g++ 2.8.0
> 
> Host Sun Sparc Solaris 2.5
> Target Motorola Coldfire (-m5200)  a.out object format
> 
> ---
> 
> Not using stdlib  (-nostdlib)
> 
> We have some code in assembler, and some in C.
> Compiling with as,gcc and linking with ld works fine.
> Compiling with as,g++ and linking with ld does not work,
>   undefined symbols for those things written in assembler.
> 
> The .o files output from g++ compilation have exported symbols that
> end in '__Fv' whereas the assembler output .o files don't have
> '__Fv' on the symbols.  Is that the problem?  Is there
> some way to make it work?  What is __Fv?
> 
> 
> An alternative might be to put the assembly code in
> C/C++ wrapper functions.  Any hints/comments that
> would be appreciated also.  
> 
> 
> -- 
> Chris Howard            Fujitsu Computer Products of America
>                                           Longmont, Colorado

^ permalink raw reply	[flat|nested] 8+ messages in thread
[parent not found: <s5923122.008@btree.com>]
* gcc vs g++ and linking with as
@ 1998-06-25  8:32 Chris Howard
  1998-06-25 20:20 ` C. M. Heard/VVNET, Inc.
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Chris Howard @ 1998-06-25  8:32 UTC (permalink / raw)
  To: c++-embedded; +Cc: crossgcc

binutils 2.9
gcc/g++ 2.8.0

Host Sun Sparc Solaris 2.5
Target Motorola Coldfire (-m5200)  a.out object format

---

Not using stdlib  (-nostdlib)

We have some code in assembler, and some in C.
Compiling with as,gcc and linking with ld works fine.
Compiling with as,g++ and linking with ld does not work,
  undefined symbols for those things written in assembler.

The .o files output from g++ compilation have exported symbols that
end in '__Fv' whereas the assembler output .o files don't have
'__Fv' on the symbols.  Is that the problem?  Is there
some way to make it work?  What is __Fv?


An alternative might be to put the assembly code in
C/C++ wrapper functions.  Any hints/comments that
would be appreciated also.  


-- 
Chris Howard            Fujitsu Computer Products of America
                                          Longmont, Colorado

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~1998-06-26  0:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1998-06-25  9:21 gcc vs g++ and linking with as Dave Hansen
  -- strict thread matches above, loose matches on Subject: below --
1998-06-25 11:36 Gary Mussar
1998-06-25 11:26 Gary Mussar
     [not found] <s5923122.008@btree.com>
1998-06-25 10:53 ` Chris Howard
1998-06-25  8:32 Chris Howard
1998-06-25 20:20 ` C. M. Heard/VVNET, Inc.
1998-06-25 23:03 ` Stephen Williams
1998-06-26  0:59 ` Robert J. Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).