From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: Tom Tromey <tromey@redhat.com>, gdb-patches@sourceware.org
Subject: Re: Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.]
Date: Mon, 14 May 2012 17:05:00 -0000 [thread overview]
Message-ID: <20120514170422.GA13856@host2.jankratochvil.net> (raw)
In-Reply-To: <20120514165637.GK10253@adacore.com>
On Mon, 14 May 2012 18:56:37 +0200, Joel Brobecker wrote:
> So this is another example of copy-relocation?
No, this was just overriding library's symbol by executable's symbol.
$ main executable's has now just 'extern int x;'
echo -e '#include <stdio.h>\nint x=1;void f(void){printf("lib:%d\\n",x);}'|gcc -x c -fPIC -Wall -shared -o var.so -;echo -e '#include <stdio.h>\nextern int x;extern void f(void);int main(void){printf("main:%d\\n",x);f();return 0;}'|gcc ./var.so -x c -Wall -o var -;./var
main:1
lib:1
$ readelf -Wr var
Offset Info Type Symbol's Value Symbol's Name + Addend
0000000000600a40 0000000700000005 R_X86_64_COPY 0000000000600a40 x + 0
This is copy-relocation because the variable must be in the main executable
but at the same time it must be initialized from the library's value.
> When you say this is perfectly defined, this looks horrifying to me. It
> feels like you can break a shared library's code that way...
If library does not want to get its data overriden it should use
-fvisibility=hidden and properly mark any really exported variables by
"__attribute__ ((visibility("default")))". See man gcc for -fvisibility.
Exporting any variables from shared libraries should be rather avoided anyway
as it is generally expensive, because compiler has to ensure &variable has the
same address from any module.
That -fvisibility=hidden is not default is just unfortunately backward
compatibility. The default -fvisibility=default is needlessly expensive.
glibc does these tricks with visibilities.
Regards,
Jan
next prev parent reply other threads:[~2012-05-14 17:05 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-07 22:43 [RFC] choose symbol from given block's objfile first Joel Brobecker
2012-05-08 17:19 ` Tom Tromey
2012-05-09 19:05 ` [RFA] " Joel Brobecker
2012-05-09 19:08 ` Joel Brobecker
2012-05-09 20:15 ` Tom Tromey
2012-05-09 20:40 ` Joel Brobecker
2012-05-09 20:57 ` Tom Tromey
2012-05-09 21:06 ` Joel Brobecker
2012-05-10 13:42 ` Tom Tromey
2012-05-10 16:27 ` checked in: " Joel Brobecker
2012-05-10 17:19 ` Joel Brobecker
2012-05-09 21:48 ` Joel Brobecker
2012-05-09 21:49 ` Joel Brobecker
2012-05-18 16:10 ` gdb.base/print-file-var.exp false PASS [Re: [RFA] choose symbol from given block's objfile first.] Jan Kratochvil
2012-05-18 17:17 ` Joel Brobecker
2012-05-18 17:37 ` Jan Kratochvil
2012-05-09 20:08 ` [RFA] choose symbol from given block's objfile first Tom Tromey
2012-05-11 7:26 ` Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.] Jan Kratochvil
2012-05-11 12:25 ` Joel Brobecker
2012-05-14 14:39 ` Joel Brobecker
2012-05-14 14:52 ` Jan Kratochvil
2012-05-14 15:06 ` Joel Brobecker
2012-05-14 15:15 ` Jan Kratochvil
2012-05-14 16:57 ` Joel Brobecker
2012-05-14 17:05 ` Jan Kratochvil [this message]
2012-05-14 17:49 ` Pedro Alves
2012-05-14 17:59 ` Joel Brobecker
2012-05-14 18:07 ` Jan Kratochvil
2012-05-15 13:09 ` Joel Brobecker
2012-05-16 19:57 ` RFC for: "Re: Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.]" Joel Brobecker
2012-05-18 17:46 ` Jan Kratochvil
2012-05-28 14:27 ` Joel Brobecker
2012-05-28 16:12 ` Jan Kratochvil
2012-05-29 15:44 ` Joel Brobecker
2012-05-29 15:49 ` Joel Brobecker
2012-05-29 15:56 ` Jan Kratochvil
2012-05-29 16:02 ` Joel Brobecker
2012-05-29 16:12 ` Jan Kratochvil
2012-05-29 16:31 ` Pedro Alves
2012-05-10 14:14 ` [RFC] choose symbol from given block's objfile first Pedro Alves
2012-05-10 14:32 ` Tom Tromey
2012-05-10 14:50 ` Matt Rice
2012-05-10 15:07 ` Pedro Alves
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=20120514170422.GA13856@host2.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
/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