Revert r234656, and apply a proper fix for binutils PR 10474, which

caused linking clang on 32-bit PowerPC to fail with "relocation
truncated to fit: R_PPC_REL24" errors.

Original diffs (relicensed under GPLv2 with permission from author):
http://sourceware.org/git/?p=binutils.git;a=commit;h=1fd262ff7d7ea5adf4894c6b960e092e7e43e3cd
http://sourceware.org/git/?p=binutils.git;a=commit;h=053c49fbff58bd33bd0d12200ea61302f92caceb

Tested by:	andreast
MFC after:	1 week
This commit is contained in:
dim 2012-05-07 17:13:36 +00:00
parent 6837ff0b32
commit 66daa7f73f
2 changed files with 34 additions and 2 deletions

View File

@ -119,7 +119,40 @@ ppc_before_allocation (void)
}
}
}
gld${EMULATION_NAME}_before_allocation ();
/* Turn on relaxation if executable sections have addresses that
might make branches overflow. */
if (!command_line.relax)
{
bfd_vma low = (bfd_vma) -1;
bfd_vma high = 0;
asection *o;
/* Run lang_size_sections (if not already done). */
if (expld.phase != lang_mark_phase_enum)
{
expld.phase = lang_mark_phase_enum;
expld.dataseg.phase = exp_dataseg_none;
one_lang_size_sections_pass (NULL, FALSE);
lang_reset_memory_regions ();
}
for (o = output_bfd->sections; o != NULL; o = o->next)
{
if ((o->flags & (SEC_ALLOC | SEC_CODE)) != (SEC_ALLOC | SEC_CODE))
continue;
if (o->rawsize == 0)
continue;
if (low > o->vma)
low = o->vma;
if (high < o->vma + o->rawsize - 1)
high = o->vma + o->rawsize - 1;
}
if (high > low && high - low > (1 << 25) - 1)
command_line.relax = TRUE;
}
}
EOF

View File

@ -442,8 +442,7 @@ __T=${TARGET_ARCH}
__T=${MACHINE_ARCH}
.endif
# Clang is only for x86 and powerpc right now, by default.
# XXX: Temporarily disabled for 32-bit powerpc, due to a binutils bug.
.if ${__T} == "amd64" || ${__T} == "i386" || ${__T} == "powerpc64"
.if ${__T} == "amd64" || ${__T} == "i386" || ${__T:Mpowerpc*}
__DEFAULT_YES_OPTIONS+=CLANG
.else
__DEFAULT_NO_OPTIONS+=CLANG