Assembly symbol generation

Daniel Lohmann daniel.lohmann@informatik.uni-erlangen.de
Mon Sep 3 15:17:00 GMT 2007


Andrew Haley wrote:
> Katana Steel writes:
>  > 
>  > I wonder why; when I compile a C++ file with a header which looks like this:
>  > #ifndef __headername_h
>  > #define __headername_h 1
>  > 
>  > #ifdef __cplusplus
>  > 
>  > extern "C" void function1(int,char*,int);
>  > extern "C" void function2(int,char*,int);
>  > 
>  > #endif
>  > 
>  > #endif
>  > 
>  > under x86 & x64 linux this creates the symbols (output from nm):
>  >         U  function1
>  >         U  function2
>  > and using cygwin & mingw (x86) it creates these symbols (output from nm):
>  >         U  _function1
>  >         U  _function2
>  > 
>  > is there a good reason for this? 
> 
> The ABI says so.  The ABI allows programs generated by different tools
> to be linked together: it doesn't really matter what the convention
> is, as long as everyone on a particular platform agrees.
> 
> The "_" prefix is in fact an old UNIX convention that was IIRC dropped
> by UNIX System V when it went over to ELF format binaries.

On most platforms there is also a -mno-underscores or 
-fno-leading-underscores or similar option available that can be used to 
suppress this anachronism.

Daniel




-- 
Dipl.-Inf. Daniel Lohmann (Wissenschaftlicher Mitarbeiter)
Friedrich-Alexander-Universität Erlangen-Nürnberg
Informatik 4
Martensstr. 1
91058 Erlangen
Tel    : +49-9131-8527904
Fax    : +49-9131-8528732
WWW    : www4.informatik.uni-erlangen.de/~lohmann
eMail  : lohmann@informatik.uni-erlangen.de



More information about the Gcc-help mailing list