From: Sriraman Tallam <tmsriram@google.com>
To: binutils <binutils@sourceware.org>,
Cary Coutant <ccoutant@google.com>,
Paul Pluzhnikov <ppluzhnikov@google.com>,
Rong Xu <xur@google.com>, Brooks Moses <bmoses@google.com>,
Ollie Wild <aaw@google.com>, David Li <davidxl@google.com>,
Teresa Johnson <tejohnson@google.com>,
"H.J. Lu" <hjl.tools@gmail.com>,
Ian Lance Taylor <iant@google.com>
Subject: Patch to not create GOT and dynamic relocation entries for unresolved symbols with --warn-unresolved-symbols.
Date: Sat, 11 Apr 2015 00:16:00 -0000 [thread overview]
Message-ID: <CAAs8Hmxe3fNV-7MLyNhk_=DOaR91-s=dFw3E-cFdqCCiGxxreA@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1034 bytes --]
Hi,
We have a problem where we use --warn-unresolved-symbols to tide
over an issue where we know the symbol is undefined but we also know
that the it is never accessed.
Example:
extern int foo();
int (*p)() = NULL;
int main() {
if (p == &foo)
foo();
return 0;
}
Now,
$ g++ -O2 foo.cc
foo.cc:function main: warning: undefined reference to 'foo()'
gives the right warning but builds a.out just fine and runs fine as
long as p is not equal to foo which is our case.
However, with -fPIE
$ g++ -O2 -fPIE foo.cc -pie
foo.cc:function main: warning: undefined reference to 'foo()'
but
$./a.out
./a.out: symbol lookup error: ./a.out: undefined symbol: _Z3foov
because with fPIE, a function pointer access is using a GOTPCREL
relocation which creates a GOT entry and a dynamic relocation for it.
The dynamic linker does not like the unresolved symbol any more.
I have attached a patch to prevent creation of GOT and dynamic
relocation entries with --warn-unresolved-symbols in general. Is this
reasonable?
Thanks
Sri
[-- Attachment #2: warn_unresolved.txt --]
[-- Type: text/plain, Size: 1450 bytes --]
* x86_64.cc (Scan::global): Do not create GOT entry for
unresolved symbol with --warn-unresolved-symbols.
(Relocate::relocate): Check for GOT entry only when the
above condition is not true.
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index 007af1d..bccb0ab 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -2931,6 +2931,11 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
}
else
{
+ // If the symbol is unresolved and we use --warn-unresolved-symbols
+ // do not create GOT entry and dynamic relocation for it.
+ if (parameters->options().warn_unresolved_symbols()
+ && issue_undefined_symbol_error(gsym))
+ break;
// If this symbol is not fully resolved, we need to add a
// dynamic relocation for it.
Reloc_section* rela_dyn = target->rela_dyn_section(layout);
@@ -3557,8 +3562,14 @@ Target_x86_64<size>::Relocate::relocate(
{
if (gsym != NULL)
{
- gold_assert(gsym->has_got_offset(GOT_TYPE_STANDARD));
- got_offset = gsym->got_offset(GOT_TYPE_STANDARD) - target->got_size();
+ // We dont create GOT entries for unresolved symbols
+ // with --warn-unresolved-symbols.
+ if (!parameters->options().warn_unresolved_symbols()
+ || !issue_undefined_symbol_error(gsym))
+ {
+ gold_assert(gsym->has_got_offset(GOT_TYPE_STANDARD));
+ got_offset = gsym->got_offset(GOT_TYPE_STANDARD) - target->got_size();
+ }
}
else
{
next reply other threads:[~2015-04-11 0:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-11 0:16 Sriraman Tallam [this message]
2015-04-11 0:22 ` Sriraman Tallam
2015-04-11 2:18 ` Cary Coutant
2015-04-11 13:28 ` H.J. Lu
2015-04-20 23:06 ` Sriraman Tallam
2015-04-22 19:33 ` Cary Coutant
2015-04-23 15:09 ` Cary Coutant
2015-04-23 17:27 ` Sriraman Tallam
2015-04-23 18:01 ` Cary Coutant
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='CAAs8Hmxe3fNV-7MLyNhk_=DOaR91-s=dFw3E-cFdqCCiGxxreA@mail.gmail.com' \
--to=tmsriram@google.com \
--cc=aaw@google.com \
--cc=binutils@sourceware.org \
--cc=bmoses@google.com \
--cc=ccoutant@google.com \
--cc=davidxl@google.com \
--cc=hjl.tools@gmail.com \
--cc=iant@google.com \
--cc=ppluzhnikov@google.com \
--cc=tejohnson@google.com \
--cc=xur@google.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).