public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Kacvinsky, Tom" <Tom.Kacvinsky@vector.com>
To: "gcc-help@gcc.gnu.org" <gcc-help@gcc.gnu.org>
Subject: RE: Anonymous namespaces and global vs.local symbols in nm output
Date: Wed, 25 Nov 2020 01:28:30 +0000	[thread overview]
Message-ID: <97170eeab8164e89bcd95bb7bd5b4822@vector.com> (raw)
In-Reply-To: <CAH6eHdROnV7EjbwV6NDG+o6xRzdf0ONQocAnVNRnt9tCKG8Efg@mail.gmail.com>

HI,

> -----Original Message-----
> From: Jonathan Wakely <jwakely.gcc@gmail.com>
> Sent: Tuesday, November 24, 2020 3:03 PM
> To: Kacvinsky, Tom <Tom.Kacvinsky@vector.com>
> Cc: gcc-help@gcc.gnu.org
> Subject: Re: Anonymous namespaces and global vs.local symbols in nm
> output
> 
> On Tue, 24 Nov 2020 at 19:11, Kacvinsky, Tom via Gcc-help <gcc-
> help@gcc.gnu.org> wrote:
> >
> > This code
> >
> > #include <string>
> > #include <istream>
> > #include <iostream>
> > #include <vector>
> >
> > typedef std::vector<unsigned char> Signature;
> >
> > namespace foo {
> >   bool bar (const std::string& input,
> >             const Signature& signature,
> >             std::istream& key)
> >   {
> >     return true;
> >   }
> > }
> >
> > when compiled with
> >
> > g++ -fPIC -o global_noans.so -shared -static-libgcc -static-libstdc++
> > g++ -Wl,-h,global.so -fuse-ld=gold global_noans.cpp
> >
> > produces this nm output
> >
> > 0000000000082745 T
> > _ZN3foo3barERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt
> > 6vectorIhSaIhEERSi
> >
> > Notice how it is a global symbol?
> >
> > On the other hand, this code#include <string> #include <istream>
> > #include <iostream> #include <vector>
> >
> > typedef std::vector<unsigned char> Signature;
> >
> > namespace foo {
> >   namespace {
> >     bool bar(const std::string& input,
> >              const Signature& signature,
> >              std::istream& key)
> >     {
> >       return true;
> >     }
> >   }
> > }
> >
> > when compiled with
> >
> > g++ -fPIC -o global.so -shared -static-libgcc -static-libstdc++
> > g++ -Wl,-h,global.so -fuse-ld=gold global.cpp
> >
> > produces this nm output
> >
> > 00000000000826b5 t
> >
> _ZN3foo12_GLOBAL__N_13barERKNSt7__cxx1112basic_stringIcSt11char_trai
> ts
> > IcESaIcEEERKSt6vectorIhSaIhEERSi
> >
> > And now we note the symbolis local.  I tried building the shared
> > library with a -Wl,--version-script=global.map, where global.map is
> > set up to make the symbol glocal instead of local, and that did not
> > work.  I also tried compiling the source code with
> >
> > void __attribute__ ((visibility ("default")))
> >
> > but that made no difference, either, in the anonymous namespace symbol
> being lobal.
> 
> Why do you want to change it? G++ is doing the right thing.
> 
> What are you trying to achieve?

I am not trying to change it, I was more curious than anything as to why what I thought should be
external linkage turned out to be internal linkage.  The reason why I was surprised it was internal
linkage is I thought that we could do some internal testing with an LD_PRELOAD trick, but that did
not take because the symbol in  question is internal linkage.  Which is actually a good thing, it was
the kind of behavior we want.  Again, it was more curiosity than anything.

Thanks for your time responding!

Thanks,

Tom

      reply	other threads:[~2020-11-25  1:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-24 19:02 Kacvinsky, Tom
2020-11-24 19:23 ` Xi Ruoyao
2020-11-24 20:03 ` Jonathan Wakely
2020-11-25  1:28   ` Kacvinsky, Tom [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=97170eeab8164e89bcd95bb7bd5b4822@vector.com \
    --to=tom.kacvinsky@vector.com \
    --cc=gcc-help@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).