From: Ian Lance Taylor <iant@google.com>
To: "WANG.Jiong" <wong.kwongyuan@gmail.com>
Cc: davem@davemloft.net, binutils@sourceware.org
Subject: Re: [GOLD] question about gold handling SPARC style .rela.plt, .rela.plt overlapping
Date: Tue, 07 Aug 2012 13:34:00 -0000 [thread overview]
Message-ID: <CAKOQZ8zAbvtxaNTJ8AmQO+Ux2BF+V1YKgfw5z3KPd6KAAmbCCw@mail.gmail.com> (raw)
In-Reply-To: <5020D0CA.9010306@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1141 bytes --]
On Tue, Aug 7, 2012 at 1:24 AM, WANG.Jiong <wong.kwongyuan@gmail.com> wrote:
>
> currently, I am porting gold linker for a private target which allow
> PLTREL overlapping
>
> ...
>
> So, should we always generate DT_RELA, DT_RELASZ, DT_RELAENT, and make
> DT_RELA, DT_RELASZ exactly the same value as DT_JMPREL, DT_PLTRELSZ ?
>
> that is, for the following condition check in
> Layout::add_target_dynamic_tags
>
> 4344 if (dyn_rel != NULL && dyn_rel->output_section() != NULL)
> 4345 {
> 4346 odyn->add_section_address(use_rel ? elfcpp::DT_REL :
> elfcpp::DT_RELA,
> 4347 dyn_rel->output_section());
> 4348 if (plt_rel != NULL
> 4349 && plt_rel->output_section() != NULL
> 4350 && dynrel_includes_plt)
>
> should we check dynrel_includes_plt even when dyn_rel == NULL ?
Yes, I agree. If dynrel_includes_plt && dyn_rel == NULL && plt_rel !=
NULL, we should generate the DT_REL tags.
I committed the attached patch.
Ian
2012-08-07 Ian Lance Taylor <iant@google.com>
* layout.cc (Layout::add_target_dynamic_tags): If
dynrel_includes_plt but no dyn_rel, emit dynamic reloc tags for
plt_rel.
[-- Attachment #2: foo.diff --]
[-- Type: application/octet-stream, Size: 2107 bytes --]
Index: layout.cc
===================================================================
RCS file: /cvs/src/src/gold/layout.cc,v
retrieving revision 1.231
retrieving revision 1.232
diff -u -p -r1.231 -r1.232
--- layout.cc 22 Jun 2012 18:02:24 -0000 1.231
+++ layout.cc 7 Aug 2012 13:24:47 -0000 1.232
@@ -4341,19 +4341,26 @@ Layout::add_target_dynamic_tags(bool use
use_rel ? elfcpp::DT_REL : elfcpp::DT_RELA);
}
- if (dyn_rel != NULL && dyn_rel->output_section() != NULL)
+ if ((dyn_rel != NULL && dyn_rel->output_section() != NULL)
+ || (dynrel_includes_plt
+ && plt_rel != NULL
+ && plt_rel->output_section() != NULL))
{
+ bool have_dyn_rel = dyn_rel != NULL && dyn_rel->output_section() != NULL;
+ bool have_plt_rel = plt_rel != NULL && plt_rel->output_section() != NULL;
odyn->add_section_address(use_rel ? elfcpp::DT_REL : elfcpp::DT_RELA,
- dyn_rel->output_section());
- if (plt_rel != NULL
- && plt_rel->output_section() != NULL
- && dynrel_includes_plt)
- odyn->add_section_size(use_rel ? elfcpp::DT_RELSZ : elfcpp::DT_RELASZ,
+ (have_dyn_rel
+ ? dyn_rel->output_section()
+ : plt_rel->output_section()));
+ elfcpp::DT size_tag = use_rel ? elfcpp::DT_RELSZ : elfcpp::DT_RELASZ;
+ if (have_dyn_rel && have_plt_rel && dynrel_includes_plt)
+ odyn->add_section_size(size_tag,
dyn_rel->output_section(),
plt_rel->output_section());
+ else if (have_dyn_rel)
+ odyn->add_section_size(size_tag, dyn_rel->output_section());
else
- odyn->add_section_size(use_rel ? elfcpp::DT_RELSZ : elfcpp::DT_RELASZ,
- dyn_rel->output_section());
+ odyn->add_section_size(size_tag, plt_rel->output_section());
const int size = parameters->target().get_size();
elfcpp::DT rel_tag;
int rel_size;
@@ -4379,7 +4386,7 @@ Layout::add_target_dynamic_tags(bool use
}
odyn->add_constant(rel_tag, rel_size);
- if (parameters->options().combreloc())
+ if (parameters->options().combreloc() && have_dyn_rel)
{
size_t c = dyn_rel->relative_reloc_count();
if (c > 0)
next prev parent reply other threads:[~2012-08-07 13:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-07 10:25 WANG.Jiong
2012-08-07 13:34 ` Ian Lance Taylor [this message]
2012-08-07 14:19 ` Jiong WANG
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=CAKOQZ8zAbvtxaNTJ8AmQO+Ux2BF+V1YKgfw5z3KPd6KAAmbCCw@mail.gmail.com \
--to=iant@google.com \
--cc=binutils@sourceware.org \
--cc=davem@davemloft.net \
--cc=wong.kwongyuan@gmail.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).