binutils-2.22: Backport PR fixes from 2.22 branch
These are fixes mainly cherrypicks for mips/ppc/x86 mainly fixing PRs in ld and gold (From OE-Core rev: f098cfc24bae8e0685bcae53ea4fdc3326ddc6c4) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
268177e4e6
commit
97bb9c5b67
|
@ -1,4 +1,4 @@
|
|||
PR = "r15"
|
||||
PR = "r16"
|
||||
|
||||
LIC_FILES_CHKSUM="\
|
||||
file://src-release;endline=17;md5=4830a9ef968f3b18dd5e9f2c00db2d35\
|
||||
|
@ -32,6 +32,20 @@ SRC_URI = "\
|
|||
file://mips64-default-ld-emulation.patch \
|
||||
file://0001-PR-ld-13470.patch \
|
||||
file://rpath-sysroot.patch \
|
||||
file://0006-mips-dis.c-print_insn_micromips-Rename-local-variabl.patch \
|
||||
file://0019-PR-ld-13468.patch \
|
||||
file://0028-Backport-from-mainline.patch \
|
||||
file://0035-2011-12-19-Chung-Lin-Tang-cltang-codesourcery.com.patch \
|
||||
file://0036-2011-12-19-Chung-Lin-Tang-cltang-codesourcery.com.patch \
|
||||
file://0037-2011-12-19-Chung-Lin-Tang-cltang-codesourcery.com.patch \
|
||||
file://0038-Copy-from-mainline-to-binutils-2.22-branch.patch \
|
||||
file://0039-emulparams-elf32bmip.sh-OTHER_SECTIONS-Put-.mdebug.-.patch \
|
||||
file://0052-gas.patch \
|
||||
file://0055-Remove-ABI_64_P-check-on-R_X86_64_PCXX.patch \
|
||||
file://0078-PR-binutils-13622.patch \
|
||||
file://0144-timer.cc-include-unistd.h.patch \
|
||||
file://0166-2012-04-27-Doug-Kwan-dougkwan-google.com.patch \
|
||||
file://0182-PR-ld-13991.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "ee0f10756c84979622b992a4a61ea3f5"
|
||||
|
|
|
@ -0,0 +1,634 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From f72b2c498bc98f42048a3bf7f7d7891db9cabcfc Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Muller <muller@ics.u-strasbg.fr>
|
||||
Date: Fri, 25 Nov 2011 16:57:32 +0000
|
||||
Subject: [PATCH 006/262] * mips-dis.c (print_insn_micromips): Rename
|
||||
local variable iprintf to infprintf to
|
||||
avoid shadow warning.
|
||||
|
||||
---
|
||||
opcodes/ChangeLog | 5 ++
|
||||
opcodes/mips-dis.c | 188 ++++++++++++++++++++++++++--------------------------
|
||||
2 files changed, 99 insertions(+), 94 deletions(-)
|
||||
|
||||
2011-11-25 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||
|
||||
* mips-dis.c (print_insn_micromips): Rename local variable iprintf
|
||||
to infprintf to avoid shadow warning.
|
||||
|
||||
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
|
||||
index 4e18d8a..72285de 100644
|
||||
--- a/opcodes/mips-dis.c
|
||||
+++ b/opcodes/mips-dis.c
|
||||
@@ -2260,7 +2260,7 @@ print_insn_mips16 (bfd_vma memaddr, struct disassemble_info *info)
|
||||
static int
|
||||
print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
{
|
||||
- const fprintf_ftype iprintf = info->fprintf_func;
|
||||
+ const fprintf_ftype infprintf = info->fprintf_func;
|
||||
const struct mips_opcode *op, *opend;
|
||||
unsigned int lsb, msbd, msb;
|
||||
void *is = info->stream;
|
||||
@@ -2307,7 +2307,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
|
||||
if (status != 0)
|
||||
{
|
||||
- iprintf (is, "micromips 0x%x", higher);
|
||||
+ infprintf (is, "micromips 0x%x", higher);
|
||||
(*info->memory_error_func) (status, memaddr + 2, info);
|
||||
return -1;
|
||||
}
|
||||
@@ -2320,7 +2320,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
status = (*info->read_memory_func) (memaddr + 4, buffer, 2, info);
|
||||
if (status != 0)
|
||||
{
|
||||
- iprintf (is, "micromips 0x%x", higher);
|
||||
+ infprintf (is, "micromips 0x%x", higher);
|
||||
(*info->memory_error_func) (status, memaddr + 4, info);
|
||||
return -1;
|
||||
}
|
||||
@@ -2328,7 +2328,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
insn = bfd_getb16 (buffer);
|
||||
else
|
||||
insn = bfd_getl16 (buffer);
|
||||
- iprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
|
||||
+ infprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
|
||||
|
||||
info->insn_type = dis_noninsn;
|
||||
return 6;
|
||||
@@ -2341,7 +2341,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
|
||||
if (status != 0)
|
||||
{
|
||||
- iprintf (is, "micromips 0x%x", higher);
|
||||
+ infprintf (is, "micromips 0x%x", higher);
|
||||
(*info->memory_error_func) (status, memaddr + 2, info);
|
||||
return -1;
|
||||
}
|
||||
@@ -2371,9 +2371,9 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
- iprintf (is, "%s", op->name);
|
||||
+ infprintf (is, "%s", op->name);
|
||||
if (op->args[0] != '\0')
|
||||
- iprintf (is, "\t");
|
||||
+ infprintf (is, "\t");
|
||||
|
||||
for (s = op->args; *s != '\0'; s++)
|
||||
{
|
||||
@@ -2382,37 +2382,37 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
case ',':
|
||||
case '(':
|
||||
case ')':
|
||||
- iprintf (is, "%c", *s);
|
||||
+ infprintf (is, "%c", *s);
|
||||
break;
|
||||
|
||||
case '.':
|
||||
delta = GET_OP (insn, OFFSET10);
|
||||
if (delta & 0x200)
|
||||
delta |= ~0x3ff;
|
||||
- iprintf (is, "%d", delta);
|
||||
+ infprintf (is, "%d", delta);
|
||||
break;
|
||||
|
||||
case '1':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, STYPE));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, STYPE));
|
||||
break;
|
||||
|
||||
case '<':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, SHAMT));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, SHAMT));
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
|
||||
break;
|
||||
|
||||
case '|':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, TRAP));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, TRAP));
|
||||
break;
|
||||
|
||||
case '~':
|
||||
delta = GET_OP (insn, OFFSET12);
|
||||
if (delta & 0x800)
|
||||
delta |= ~0x7ff;
|
||||
- iprintf (is, "%d", delta);
|
||||
+ infprintf (is, "%d", delta);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
@@ -2433,34 +2433,34 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
case 'r':
|
||||
case 's':
|
||||
case 'v':
|
||||
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, CODE));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, CODE));
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, PREFX));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, PREFX));
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'u':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
|
||||
break;
|
||||
|
||||
case 'j': /* Same as i, but sign-extended. */
|
||||
case 'o':
|
||||
delta = (GET_OP (insn, DELTA) ^ 0x8000) - 0x8000;
|
||||
- iprintf (is, "%d", delta);
|
||||
+ infprintf (is, "%d", delta);
|
||||
break;
|
||||
|
||||
case 'k':
|
||||
- iprintf (is, "0x%x", GET_OP (insn, CACHE));
|
||||
+ infprintf (is, "0x%x", GET_OP (insn, CACHE));
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
@@ -2472,26 +2472,26 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
if (s_reg_encode != 0)
|
||||
{
|
||||
if (s_reg_encode == 1)
|
||||
- iprintf (is, "%s", mips_gpr_names[16]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[16]);
|
||||
else if (s_reg_encode < 9)
|
||||
- iprintf (is, "%s-%s",
|
||||
+ infprintf (is, "%s-%s",
|
||||
mips_gpr_names[16],
|
||||
mips_gpr_names[15 + s_reg_encode]);
|
||||
else if (s_reg_encode == 9)
|
||||
- iprintf (is, "%s-%s,%s",
|
||||
+ infprintf (is, "%s-%s,%s",
|
||||
mips_gpr_names[16],
|
||||
mips_gpr_names[23],
|
||||
mips_gpr_names[30]);
|
||||
else
|
||||
- iprintf (is, "UNKNOWN");
|
||||
+ infprintf (is, "UNKNOWN");
|
||||
}
|
||||
|
||||
if (immed & 0x10) /* For ra. */
|
||||
{
|
||||
if (s_reg_encode == 0)
|
||||
- iprintf (is, "%s", mips_gpr_names[31]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[31]);
|
||||
else
|
||||
- iprintf (is, ",%s", mips_gpr_names[31]);
|
||||
+ infprintf (is, ",%s", mips_gpr_names[31]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2504,32 +2504,32 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, CODE2));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, CODE2));
|
||||
break;
|
||||
|
||||
case 't':
|
||||
case 'w':
|
||||
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
|
||||
break;
|
||||
|
||||
case 'y':
|
||||
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
|
||||
break;
|
||||
|
||||
case 'z':
|
||||
- iprintf (is, "%s", mips_gpr_names[0]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[0]);
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, CODE10));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, CODE10));
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
- iprintf (is, "0x%lx", GET_OP (insn, COPZ));
|
||||
+ infprintf (is, "0x%lx", GET_OP (insn, COPZ));
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
|
||||
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
@@ -2540,7 +2540,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
'T' format. Therefore, until we gain understanding of
|
||||
cp2 register names, we can simply print the register
|
||||
numbers. */
|
||||
- iprintf (is, "$%ld", GET_OP (insn, RT));
|
||||
+ infprintf (is, "$%ld", GET_OP (insn, RT));
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
@@ -2559,44 +2559,44 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
case 0x000002fc: /* mtc0 */
|
||||
case 0x580000fc: /* dmfc0 */
|
||||
case 0x580002fc: /* dmtc0 */
|
||||
- iprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
|
||||
+ infprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
|
||||
break;
|
||||
default:
|
||||
- iprintf (is, "$%ld", GET_OP (insn, RS));
|
||||
+ infprintf (is, "$%ld", GET_OP (insn, RS));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
- iprintf (is, "%ld", GET_OP (insn, SEL));
|
||||
+ infprintf (is, "%ld", GET_OP (insn, SEL));
|
||||
break;
|
||||
|
||||
case 'K':
|
||||
- iprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
|
||||
+ infprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
- iprintf (is, "$fcc%ld", GET_OP (insn, CCC));
|
||||
+ infprintf (is, "$fcc%ld", GET_OP (insn, CCC));
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
- iprintf (is,
|
||||
+ infprintf (is,
|
||||
(op->pinfo & (FP_D | FP_S)) != 0
|
||||
? "$fcc%ld" : "$cc%ld",
|
||||
GET_OP (insn, BCC));
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
|
||||
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
case 'V':
|
||||
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
|
||||
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
|
||||
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
|
||||
break;
|
||||
|
||||
case '+':
|
||||
@@ -2606,18 +2606,18 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
{
|
||||
case 'A':
|
||||
lsb = GET_OP (insn, EXTLSB);
|
||||
- iprintf (is, "0x%x", lsb);
|
||||
+ infprintf (is, "0x%x", lsb);
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
msb = GET_OP (insn, INSMSB);
|
||||
- iprintf (is, "0x%x", msb - lsb + 1);
|
||||
+ infprintf (is, "0x%x", msb - lsb + 1);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
case 'H':
|
||||
msbd = GET_OP (insn, EXTMSBD);
|
||||
- iprintf (is, "0x%x", msbd + 1);
|
||||
+ infprintf (is, "0x%x", msbd + 1);
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
@@ -2637,30 +2637,30 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
mips_cp0sel_names_len,
|
||||
cp0reg, sel);
|
||||
if (n != NULL)
|
||||
- iprintf (is, "%s", n->name);
|
||||
+ infprintf (is, "%s", n->name);
|
||||
else
|
||||
- iprintf (is, "$%d,%d", cp0reg, sel);
|
||||
+ infprintf (is, "$%d,%d", cp0reg, sel);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'E':
|
||||
lsb = GET_OP (insn, EXTLSB) + 32;
|
||||
- iprintf (is, "0x%x", lsb);
|
||||
+ infprintf (is, "0x%x", lsb);
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
msb = GET_OP (insn, INSMSB) + 32;
|
||||
- iprintf (is, "0x%x", msb - lsb + 1);
|
||||
+ infprintf (is, "0x%x", msb - lsb + 1);
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
msbd = GET_OP (insn, EXTMSBD) + 32;
|
||||
- iprintf (is, "0x%x", msbd + 1);
|
||||
+ infprintf (is, "0x%x", msbd + 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* xgettext:c-format */
|
||||
- iprintf (is,
|
||||
+ infprintf (is,
|
||||
_("# internal disassembler error, "
|
||||
"unrecognized modifier (+%c)"),
|
||||
*s);
|
||||
@@ -2674,111 +2674,111 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
switch (*s)
|
||||
{
|
||||
case 'a': /* global pointer. */
|
||||
- iprintf (is, "%s", mips_gpr_names[28]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[28]);
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
regno = micromips_to_32_reg_b_map[GET_OP (insn, MB)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
regno = micromips_to_32_reg_c_map[GET_OP (insn, MC)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
regno = micromips_to_32_reg_d_map[GET_OP (insn, MD)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
regno = micromips_to_32_reg_e_map[GET_OP (insn, ME)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
/* Save lastregno for "mt" to print out later. */
|
||||
lastregno = micromips_to_32_reg_f_map[GET_OP (insn, MF)];
|
||||
- iprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
regno = micromips_to_32_reg_g_map[GET_OP (insn, MG)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
regno = micromips_to_32_reg_h_map[GET_OP (insn, MH)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
regno = micromips_to_32_reg_i_map[GET_OP (insn, MI)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
regno = micromips_to_32_reg_l_map[GET_OP (insn, ML)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
regno = micromips_to_32_reg_m_map[GET_OP (insn, MM)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
regno = micromips_to_32_reg_n_map[GET_OP (insn, MN)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
/* Save lastregno for "mt" to print out later. */
|
||||
lastregno = GET_OP (insn, MP);
|
||||
- iprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
regno = micromips_to_32_reg_q_map[GET_OP (insn, MQ)];
|
||||
- iprintf (is, "%s", mips_gpr_names[regno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[regno]);
|
||||
break;
|
||||
|
||||
case 'r': /* program counter. */
|
||||
- iprintf (is, "$pc");
|
||||
+ infprintf (is, "$pc");
|
||||
break;
|
||||
|
||||
case 's': /* stack pointer. */
|
||||
lastregno = 29;
|
||||
- iprintf (is, "%s", mips_gpr_names[29]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[29]);
|
||||
break;
|
||||
|
||||
case 't':
|
||||
- iprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
|
||||
break;
|
||||
|
||||
case 'z': /* $0. */
|
||||
- iprintf (is, "%s", mips_gpr_names[0]);
|
||||
+ infprintf (is, "%s", mips_gpr_names[0]);
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
/* Sign-extend the immediate. */
|
||||
immed = ((GET_OP (insn, IMMA) ^ 0x40) - 0x40) << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
immed = micromips_imm_b_map[GET_OP (insn, IMMB)];
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
immed = micromips_imm_c_map[GET_OP (insn, IMMC)];
|
||||
- iprintf (is, "0x%lx", immed);
|
||||
+ infprintf (is, "0x%lx", immed);
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
@@ -2797,50 +2797,50 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
|
||||
case 'F':
|
||||
immed = GET_OP (insn, IMMF);
|
||||
- iprintf (is, "0x%x", immed);
|
||||
+ infprintf (is, "0x%x", immed);
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
immed = (insn >> MICROMIPSOP_SH_IMMG) + 1;
|
||||
immed = (immed & MICROMIPSOP_MASK_IMMG) - 1;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
immed = GET_OP (insn, IMMH) << 1;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'I':
|
||||
immed = (insn >> MICROMIPSOP_SH_IMMI) + 1;
|
||||
immed = (immed & MICROMIPSOP_MASK_IMMI) - 1;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'J':
|
||||
immed = GET_OP (insn, IMMJ) << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
immed = GET_OP (insn, IMML);
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
immed = (insn >> MICROMIPSOP_SH_IMMM) - 1;
|
||||
immed = (immed & MICROMIPSOP_MASK_IMMM) + 1;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
immed = GET_OP (insn, IMMN);
|
||||
if (immed == 0)
|
||||
- iprintf (is, "%s,%s",
|
||||
+ infprintf (is, "%s,%s",
|
||||
mips_gpr_names[16],
|
||||
mips_gpr_names[31]);
|
||||
else
|
||||
- iprintf (is, "%s-%s,%s",
|
||||
+ infprintf (is, "%s-%s,%s",
|
||||
mips_gpr_names[16],
|
||||
mips_gpr_names[16 + immed],
|
||||
mips_gpr_names[31]);
|
||||
@@ -2848,35 +2848,35 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
|
||||
case 'O':
|
||||
immed = GET_OP (insn, IMMO);
|
||||
- iprintf (is, "0x%x", immed);
|
||||
+ infprintf (is, "0x%x", immed);
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
immed = GET_OP (insn, IMMP) << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
/* Sign-extend the immediate. */
|
||||
immed = (GET_OP (insn, IMMQ) ^ 0x400000) - 0x400000;
|
||||
immed <<= 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
immed = GET_OP (insn, IMMU) << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
immed = GET_OP (insn, IMMW) << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
/* Sign-extend the immediate. */
|
||||
immed = (GET_OP (insn, IMMX) ^ 0x8) - 0x8;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
@@ -2885,12 +2885,12 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
if (immed >= -2 && immed <= 1)
|
||||
immed ^= 0x100;
|
||||
immed = immed << 2;
|
||||
- iprintf (is, "%d", immed);
|
||||
+ infprintf (is, "%d", immed);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* xgettext:c-format */
|
||||
- iprintf (is,
|
||||
+ infprintf (is,
|
||||
_("# internal disassembler error, "
|
||||
"unrecognized modifier (m%c)"),
|
||||
*s);
|
||||
@@ -2900,7 +2900,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
|
||||
default:
|
||||
/* xgettext:c-format */
|
||||
- iprintf (is,
|
||||
+ infprintf (is,
|
||||
_("# internal disassembler error, "
|
||||
"unrecognized modifier (%c)"),
|
||||
*s);
|
||||
@@ -2937,7 +2937,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
|
||||
}
|
||||
#undef GET_OP
|
||||
|
||||
- iprintf (is, "0x%x", insn);
|
||||
+ infprintf (is, "0x%x", insn);
|
||||
info->insn_type = dis_noninsn;
|
||||
|
||||
return length;
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From 4c362e4511c4046e230fc9e330bf086753f04338 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Modra <amodra@bigpond.net.au>
|
||||
Date: Sat, 3 Dec 2011 10:29:17 +0000
|
||||
Subject: [PATCH 019/262] PR ld/13468 * elflink.c
|
||||
(bfd_elf_final_link): Don't segfault when checking
|
||||
for DT_TEXTREL and .dynamic does not exist.
|
||||
|
||||
---
|
||||
bfd/ChangeLog | 6 ++++++
|
||||
bfd/elflink.c | 9 +++------
|
||||
2 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
2011-12-03 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR ld/13468
|
||||
* elflink.c (bfd_elf_final_link): Don't segfault when checking
|
||||
for DT_TEXTREL and .dynamic does not exist.
|
||||
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index fc4266b..8556cec 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -11188,15 +11188,12 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||
goto error_return;
|
||||
|
||||
/* Check for DT_TEXTREL (late, in case the backend removes it). */
|
||||
- if ((info->warn_shared_textrel && info->shared)
|
||||
- || info->error_textrel)
|
||||
+ if (((info->warn_shared_textrel && info->shared)
|
||||
+ || info->error_textrel)
|
||||
+ && (o = bfd_get_section_by_name (dynobj, ".dynamic")) != NULL)
|
||||
{
|
||||
bfd_byte *dyncon, *dynconend;
|
||||
|
||||
- /* Fix up .dynamic entries. */
|
||||
- o = bfd_get_section_by_name (dynobj, ".dynamic");
|
||||
- BFD_ASSERT (o != NULL);
|
||||
-
|
||||
dyncon = o->contents;
|
||||
dynconend = o->contents + o->size;
|
||||
for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From fbd07e4e15de7a81a2de7f9583fa3240302e2867 Mon Sep 17 00:00:00 2001
|
||||
From: David Daney <ddaney@avtrex.com>
|
||||
Date: Sun, 11 Dec 2011 02:28:10 +0000
|
||||
Subject: [PATCH 028/262] Backport from mainline:
|
||||
|
||||
2011-12-10 David Daney <david.daney@cavium.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_link_hash_table.rld_value): Remove.
|
||||
(mips_elf_link_hash_table.rld_symbol): New field;
|
||||
(MIPS_ELF_RLD_MAP_SIZE): New macro.
|
||||
(_bfd_mips_elf_add_symbol_hook): Remember __rld_obj_head symbol
|
||||
in rld_symbol.
|
||||
(_bfd_mips_elf_create_dynamic_sections): Remember __rld_map symbol
|
||||
in rld_symbol.
|
||||
(_bfd_mips_elf_size_dynamic_sections): Set correct size for .rld_map.
|
||||
(_bfd_mips_elf_finish_dynamic_symbol): Remove .rld_map handling.
|
||||
(_bfd_mips_elf_finish_dynamic_sections): Use rld_symbol to
|
||||
calculate DT_MIPS_RLD_MAP value.
|
||||
(_bfd_mips_elf_link_hash_table_create): Initialize rld_symbol,
|
||||
quit initializing rld_value.
|
||||
|
||||
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
|
||||
index 33a454d..6b908ad 100644
|
||||
--- a/bfd/elfxx-mips.c
|
||||
+++ b/bfd/elfxx-mips.c
|
||||
@@ -436,8 +436,8 @@ struct mips_elf_link_hash_table
|
||||
entry is set to the address of __rld_obj_head as in IRIX5. */
|
||||
bfd_boolean use_rld_obj_head;
|
||||
|
||||
- /* This is the value of the __rld_map or __rld_obj_head symbol. */
|
||||
- bfd_vma rld_value;
|
||||
+ /* The __rld_map or __rld_obj_head symbol. */
|
||||
+ struct elf_link_hash_entry *rld_symbol;
|
||||
|
||||
/* This is set if we see any mips16 stub sections. */
|
||||
bfd_boolean mips16_stubs_seen;
|
||||
@@ -768,6 +768,10 @@ static bfd *reldyn_sorting_bfd;
|
||||
#define MIPS_ELF_GOT_SIZE(abfd) \
|
||||
(get_elf_backend_data (abfd)->s->arch_size / 8)
|
||||
|
||||
+/* The size of the .rld_map section. */
|
||||
+#define MIPS_ELF_RLD_MAP_SIZE(abfd) \
|
||||
+ (get_elf_backend_data (abfd)->s->arch_size / 8)
|
||||
+
|
||||
/* The size of a symbol-table entry. */
|
||||
#define MIPS_ELF_SYM_SIZE(abfd) \
|
||||
(get_elf_backend_data (abfd)->s->sizeof_sym)
|
||||
@@ -7081,6 +7085,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
return FALSE;
|
||||
|
||||
mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
|
||||
+ mips_elf_hash_table (info)->rld_symbol = h;
|
||||
}
|
||||
|
||||
/* If this is a mips16 text symbol, add 1 to the value to make it
|
||||
@@ -7266,6 +7271,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
||||
|
||||
if (! bfd_elf_link_record_dynamic_symbol (info, h))
|
||||
return FALSE;
|
||||
+ mips_elf_hash_table (info)->rld_symbol = h;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9027,7 +9033,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
|
||||
{
|
||||
/* We add a room for __rld_map. It will be filled in by the
|
||||
rtld to contain a pointer to the _r_debug structure. */
|
||||
- s->size += 4;
|
||||
+ s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
|
||||
}
|
||||
else if (SGI_COMPAT (output_bfd)
|
||||
&& CONST_STRNEQ (name, ".compact_rel"))
|
||||
@@ -10030,31 +10036,6 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
|
||||
if (IRIX_COMPAT (output_bfd) == ict_irix6)
|
||||
mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
|
||||
|
||||
- if (! info->shared)
|
||||
- {
|
||||
- if (! mips_elf_hash_table (info)->use_rld_obj_head
|
||||
- && (strcmp (name, "__rld_map") == 0
|
||||
- || strcmp (name, "__RLD_MAP") == 0))
|
||||
- {
|
||||
- asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
|
||||
- BFD_ASSERT (s != NULL);
|
||||
- sym->st_value = s->output_section->vma + s->output_offset;
|
||||
- bfd_put_32 (output_bfd, 0, s->contents);
|
||||
- if (mips_elf_hash_table (info)->rld_value == 0)
|
||||
- mips_elf_hash_table (info)->rld_value = sym->st_value;
|
||||
- }
|
||||
- else if (mips_elf_hash_table (info)->use_rld_obj_head
|
||||
- && strcmp (name, "__rld_obj_head") == 0)
|
||||
- {
|
||||
- /* IRIX6 does not use a .rld_map section. */
|
||||
- if (IRIX_COMPAT (output_bfd) == ict_irix5
|
||||
- || IRIX_COMPAT (output_bfd) == ict_none)
|
||||
- BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
|
||||
- != NULL);
|
||||
- mips_elf_hash_table (info)->rld_value = sym->st_value;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
/* Keep dynamic MIPS16 symbols odd. This allows the dynamic linker to
|
||||
treat MIPS16 symbols like any other. */
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
@@ -10517,7 +10498,19 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
|
||||
break;
|
||||
|
||||
case DT_MIPS_RLD_MAP:
|
||||
- dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
|
||||
+ {
|
||||
+ struct elf_link_hash_entry *h;
|
||||
+ h = mips_elf_hash_table (info)->rld_symbol;
|
||||
+ if (!h)
|
||||
+ {
|
||||
+ dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
|
||||
+ swap_out_p = FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+ s = h->root.u.def.section;
|
||||
+ dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
|
||||
+ + h->root.u.def.value);
|
||||
+ }
|
||||
break;
|
||||
|
||||
case DT_MIPS_OPTIONS:
|
||||
@@ -12794,7 +12787,7 @@ _bfd_mips_elf_link_hash_table_create (bfd *abfd)
|
||||
ret->procedure_count = 0;
|
||||
ret->compact_rel_size = 0;
|
||||
ret->use_rld_obj_head = FALSE;
|
||||
- ret->rld_value = 0;
|
||||
+ ret->rld_symbol = NULL;
|
||||
ret->mips16_stubs_seen = FALSE;
|
||||
ret->use_plts_and_copy_relocs = FALSE;
|
||||
ret->is_vxworks = FALSE;
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From 97beee82f0e45e65308083a7e4cfaab57623733c Mon Sep 17 00:00:00 2001
|
||||
From: cltang <cltang>
|
||||
Date: Mon, 19 Dec 2011 10:34:15 +0000
|
||||
Subject: [PATCH 035/262] 2011-12-19 Chung-Lin Tang
|
||||
<cltang@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
2011-12-13 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_calculate_relocation): Correct
|
||||
R_MIPS16_HI16/R_MIPS16_LO16 handling of two cleared lower bits,
|
||||
update comments.
|
||||
|
||||
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
|
||||
index 6b908ad..3939183 100644
|
||||
--- a/bfd/elfxx-mips.c
|
||||
+++ b/bfd/elfxx-mips.c
|
||||
@@ -5531,10 +5531,11 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
12: addu $v0,$v1
|
||||
14: move $gp,$v0
|
||||
So the offsets of hi and lo relocs are the same, but the
|
||||
- $pc is four higher than $t9 would be, so reduce
|
||||
- both reloc addends by 4. */
|
||||
+ base $pc is that used by the ADDIUPC instruction at $t9 + 4.
|
||||
+ ADDIUPC clears the low two bits of the instruction address,
|
||||
+ so the base is ($t9 + 4) & ~3. */
|
||||
if (r_type == R_MIPS16_HI16)
|
||||
- value = mips_elf_high (addend + gp - p - 4);
|
||||
+ value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
|
||||
/* The microMIPS .cpload sequence uses the same assembly
|
||||
instructions as the traditional psABI version, but the
|
||||
incoming $t9 has the low bit set. */
|
||||
@@ -5557,7 +5558,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
/* See the comment for R_MIPS16_HI16 above for the reason
|
||||
for this conditional. */
|
||||
if (r_type == R_MIPS16_LO16)
|
||||
- value = addend + gp - p;
|
||||
+ value = addend + gp - (p & ~(bfd_vma) 0x3);
|
||||
else if (r_type == R_MICROMIPS_LO16
|
||||
|| r_type == R_MICROMIPS_HI0_LO16)
|
||||
value = addend + gp - p + 3;
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From 26e802720ccd055d70addadbc39f4119716f8573 Mon Sep 17 00:00:00 2001
|
||||
From: cltang <cltang>
|
||||
Date: Mon, 19 Dec 2011 10:39:27 +0000
|
||||
Subject: [PATCH 036/262] 2011-12-19 Chung-Lin Tang
|
||||
<cltang@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
2011-12-19 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
Catherine Moore <clm@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_local_pic_function_p): Return true when
|
||||
H is a MIPS16 function with a kept 32-bit stub. Update comments.
|
||||
(mips_elf_get_la25_target): New function.
|
||||
(mips_elf_add_la25_intro): Change to use mips_elf_get_la25_target().
|
||||
(mips_elf_add_la25_stub): Move compute of use_trampoline_p down,
|
||||
change to use mips_elf_get_la25_target().
|
||||
(mips_elf_relocation_needs_la25_stub): Add target_is_16_bit_code_p
|
||||
parameter, add switch case for R_MIPS16_26.
|
||||
(mips_elf_calculate_relocation): Redirect relocation to point to the
|
||||
LA25 stub if it exists, instead of the MIPS16 stub. Update arguments
|
||||
of call to mips_elf_relocation_needs_la25_stub(), don't use la25 stub
|
||||
for mips16->mips16 calls.
|
||||
(_bfd_mips_elf_check_relocs): Update arguments of call to
|
||||
mips_elf_relocation_needs_la25_stub().
|
||||
(mips_elf_create_la25_stub): Change to use mips_elf_get_la25_target().
|
||||
|
||||
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
|
||||
index 3939183..9f3833b 100644
|
||||
--- a/bfd/elfxx-mips.c
|
||||
+++ b/bfd/elfxx-mips.c
|
||||
@@ -1575,9 +1575,10 @@ _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
|
||||
}
|
||||
|
||||
/* Return true if H is a locally-defined PIC function, in the sense
|
||||
- that it might need $25 to be valid on entry. Note that MIPS16
|
||||
- functions never need $25 to be valid on entry; they set up $gp
|
||||
- using PC-relative instructions instead. */
|
||||
+ that it or its fn_stub might need $25 to be valid on entry.
|
||||
+ Note that MIPS16 functions set up $gp using PC-relative instructions,
|
||||
+ so they themselves never need $25 to be valid. Only non-MIPS16
|
||||
+ entry points are of interest here. */
|
||||
|
||||
static bfd_boolean
|
||||
mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
|
||||
@@ -1586,11 +1587,32 @@ mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
|
||||
|| h->root.root.type == bfd_link_hash_defweak)
|
||||
&& h->root.def_regular
|
||||
&& !bfd_is_abs_section (h->root.root.u.def.section)
|
||||
- && !ELF_ST_IS_MIPS16 (h->root.other)
|
||||
+ && (!ELF_ST_IS_MIPS16 (h->root.other)
|
||||
+ || (h->fn_stub && h->need_fn_stub))
|
||||
&& (PIC_OBJECT_P (h->root.root.u.def.section->owner)
|
||||
|| ELF_ST_IS_MIPS_PIC (h->root.other)));
|
||||
}
|
||||
|
||||
+/* Set *SEC to the input section that contains the target of STUB.
|
||||
+ Return the offset of the target from the start of that section. */
|
||||
+
|
||||
+static bfd_vma
|
||||
+mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
|
||||
+ asection **sec)
|
||||
+{
|
||||
+ if (ELF_ST_IS_MIPS16 (stub->h->root.other))
|
||||
+ {
|
||||
+ BFD_ASSERT (stub->h->need_fn_stub);
|
||||
+ *sec = stub->h->fn_stub;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ *sec = stub->h->root.root.u.def.section;
|
||||
+ return stub->h->root.root.u.def.value;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* STUB describes an la25 stub that we have decided to implement
|
||||
by inserting an LUI/ADDIU pair before the target function.
|
||||
Create the section and redirect the function symbol to it. */
|
||||
@@ -1615,7 +1637,7 @@ mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
|
||||
sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
|
||||
|
||||
/* Create the section. */
|
||||
- input_section = stub->h->root.root.u.def.section;
|
||||
+ mips_elf_get_la25_target (stub, &input_section);
|
||||
s = htab->add_stub_section (name, input_section,
|
||||
input_section->output_section);
|
||||
if (s == NULL)
|
||||
@@ -1689,12 +1711,6 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
|
||||
bfd_vma value;
|
||||
void **slot;
|
||||
|
||||
- /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
|
||||
- of the section and if we would need no more than 2 nops. */
|
||||
- s = h->root.root.u.def.section;
|
||||
- value = h->root.root.u.def.value;
|
||||
- use_trampoline_p = (value != 0 || s->alignment_power > 4);
|
||||
-
|
||||
/* Describe the stub we want. */
|
||||
search.stub_section = NULL;
|
||||
search.offset = 0;
|
||||
@@ -1724,6 +1740,11 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
|
||||
*stub = search;
|
||||
*slot = stub;
|
||||
|
||||
+ /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
|
||||
+ of the section and if we would need no more than 2 nops. */
|
||||
+ value = mips_elf_get_la25_target (stub, &s);
|
||||
+ use_trampoline_p = (value != 0 || s->alignment_power > 4);
|
||||
+
|
||||
h->la25_stub = stub;
|
||||
return (use_trampoline_p
|
||||
? mips_elf_add_la25_trampoline (stub, info)
|
||||
@@ -4911,7 +4932,8 @@ is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
|
||||
stub. */
|
||||
|
||||
static bfd_boolean
|
||||
-mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
|
||||
+mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
|
||||
+ bfd_boolean target_is_16_bit_code_p)
|
||||
{
|
||||
/* We specifically ignore branches and jumps from EF_PIC objects,
|
||||
where the onus is on the compiler or programmer to perform any
|
||||
@@ -4925,7 +4947,6 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
|
||||
{
|
||||
case R_MIPS_26:
|
||||
case R_MIPS_PC16:
|
||||
- case R_MIPS16_26:
|
||||
case R_MICROMIPS_26_S1:
|
||||
case R_MICROMIPS_PC7_S1:
|
||||
case R_MICROMIPS_PC10_S1:
|
||||
@@ -4933,6 +4954,9 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
|
||||
case R_MICROMIPS_PC23_S2:
|
||||
return TRUE;
|
||||
|
||||
+ case R_MIPS16_26:
|
||||
+ return !target_is_16_bit_code_p;
|
||||
+
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
@@ -5193,14 +5217,28 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
have already noticed that we were going to need the
|
||||
stub. */
|
||||
if (local_p)
|
||||
- sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
|
||||
+ {
|
||||
+ sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
|
||||
+ value = 0;
|
||||
+ }
|
||||
else
|
||||
{
|
||||
BFD_ASSERT (h->need_fn_stub);
|
||||
- sec = h->fn_stub;
|
||||
+ if (h->la25_stub)
|
||||
+ {
|
||||
+ /* If a LA25 header for the stub itself exists, point to the
|
||||
+ prepended LUI/ADDIU sequence. */
|
||||
+ sec = h->la25_stub->stub_section;
|
||||
+ value = h->la25_stub->offset;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ sec = h->fn_stub;
|
||||
+ value = 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
- symbol = sec->output_section->vma + sec->output_offset;
|
||||
+ symbol = sec->output_section->vma + sec->output_offset + value;
|
||||
/* The target is 16-bit, but the stub isn't. */
|
||||
target_is_16_bit_code_p = FALSE;
|
||||
}
|
||||
@@ -5250,7 +5288,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
/* If this is a direct call to a PIC function, redirect to the
|
||||
non-PIC stub. */
|
||||
else if (h != NULL && h->la25_stub
|
||||
- && mips_elf_relocation_needs_la25_stub (input_bfd, r_type))
|
||||
+ && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
|
||||
+ target_is_16_bit_code_p))
|
||||
symbol = (h->la25_stub->stub_section->output_section->vma
|
||||
+ h->la25_stub->stub_section->output_offset
|
||||
+ h->la25_stub->offset);
|
||||
@@ -7925,7 +7964,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- if (h != NULL && mips_elf_relocation_needs_la25_stub (abfd, r_type))
|
||||
+ if (h != NULL
|
||||
+ && mips_elf_relocation_needs_la25_stub (abfd, r_type,
|
||||
+ ELF_ST_IS_MIPS16 (h->other)))
|
||||
((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
|
||||
|
||||
switch (r_type)
|
||||
@@ -9622,9 +9663,9 @@ mips_elf_create_la25_stub (void **slot, void *data)
|
||||
offset = stub->offset;
|
||||
|
||||
/* Work out the target address. */
|
||||
- target = (stub->h->root.root.u.def.section->output_section->vma
|
||||
- + stub->h->root.root.u.def.section->output_offset
|
||||
- + stub->h->root.root.u.def.value);
|
||||
+ target = mips_elf_get_la25_target (stub, &s);
|
||||
+ target += s->output_section->vma + s->output_offset;
|
||||
+
|
||||
target_high = ((target + 0x8000) >> 16) & 0xffff;
|
||||
target_low = (target & 0xffff);
|
||||
|
||||
--
|
||||
1.7.9.5
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,49 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From 80041361bf80194da35c5efb842125f3ce1d2bf2 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 20 Dec 2011 18:00:03 +0000
|
||||
Subject: [PATCH 039/262] * emulparams/elf32bmip.sh (OTHER_SECTIONS):
|
||||
Put .mdebug.* and .gcc_compiled_long* sections
|
||||
at address 0.
|
||||
|
||||
---
|
||||
ld/ChangeLog | 5 +++++
|
||||
ld/emulparams/elf32bmip.sh | 16 ++++++++--------
|
||||
2 files changed, 13 insertions(+), 8 deletions(-)
|
||||
|
||||
2011-12-20 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* emulparams/elf32bmip.sh (OTHER_SECTIONS): Put .mdebug.* and
|
||||
.gcc_compiled_long* sections at address 0.
|
||||
|
||||
diff --git a/ld/emulparams/elf32bmip.sh b/ld/emulparams/elf32bmip.sh
|
||||
index 44a0b8a..f0fcd2c 100644
|
||||
--- a/ld/emulparams/elf32bmip.sh
|
||||
+++ b/ld/emulparams/elf32bmip.sh
|
||||
@@ -64,14 +64,14 @@ OTHER_BSS_SYMBOLS='_fbss = .;'
|
||||
OTHER_SECTIONS='
|
||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
||||
- .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) }
|
||||
- .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) }
|
||||
- .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) }
|
||||
- .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) }
|
||||
- .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) }
|
||||
- .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) }
|
||||
- .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) }
|
||||
- .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
|
||||
+ .mdebug.abi32 0 : { KEEP(*(.mdebug.abi32)) }
|
||||
+ .mdebug.abiN32 0 : { KEEP(*(.mdebug.abiN32)) }
|
||||
+ .mdebug.abi64 0 : { KEEP(*(.mdebug.abi64)) }
|
||||
+ .mdebug.abiO64 0 : { KEEP(*(.mdebug.abiO64)) }
|
||||
+ .mdebug.eabi32 0 : { KEEP(*(.mdebug.eabi32)) }
|
||||
+ .mdebug.eabi64 0 : { KEEP(*(.mdebug.eabi64)) }
|
||||
+ .gcc_compiled_long32 0 : { KEEP(*(.gcc_compiled_long32)) }
|
||||
+ .gcc_compiled_long64 0 : { KEEP(*(.gcc_compiled_long64)) }
|
||||
'
|
||||
ARCH=mips
|
||||
MACHINE=
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From e45a3a5695408d472e8f0ca6c21eb03e5fd42817 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
Date: Sun, 8 Jan 2012 12:34:30 +0000
|
||||
Subject: [PATCH 052/262] gas/ * config/tc-mips.c (s_tls_rel_directive):
|
||||
Call mips_clear_insn_labels.
|
||||
|
||||
gas/testsuite/
|
||||
* gas/mips/tls-relw.s, gas/mips/tls-relw.d: New test.
|
||||
* gas/mips/mips.exp: Run it.
|
||||
---
|
||||
gas/ChangeLog | 4 ++++
|
||||
gas/config/tc-mips.c | 1 +
|
||||
gas/testsuite/ChangeLog | 5 +++++
|
||||
gas/testsuite/gas/mips/mips.exp | 1 +
|
||||
gas/testsuite/gas/mips/tls-relw.d | 8 ++++++++
|
||||
gas/testsuite/gas/mips/tls-relw.s | 12 ++++++++++++
|
||||
6 files changed, 31 insertions(+)
|
||||
create mode 100644 gas/testsuite/gas/mips/tls-relw.d
|
||||
create mode 100644 gas/testsuite/gas/mips/tls-relw.s
|
||||
|
||||
2012-01-08 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.c (s_tls_rel_directive): Call mips_clear_insn_labels.
|
||||
|
||||
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
|
||||
index 0fb3a6e..5324450 100644
|
||||
--- a/gas/config/tc-mips.c
|
||||
+++ b/gas/config/tc-mips.c
|
||||
@@ -16591,6 +16591,7 @@ s_tls_rel_directive (const size_t bytes, const char *dirstr,
|
||||
md_number_to_chars (p, 0, bytes);
|
||||
fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
|
||||
demand_empty_rest_of_line ();
|
||||
+ mips_clear_insn_labels ();
|
||||
}
|
||||
|
||||
/* Handle .dtprelword. */
|
||||
--- a/gas/testsuite/gas/mips/mips.exp
|
||||
+++ b/gas/testsuite/gas/mips/mips.exp
|
||||
@@ -878,6 +878,7 @@ if { [istarget mips*-*-vxworks*] } {
|
||||
|
||||
run_list_test "tls-ill" "-32"
|
||||
run_dump_test "tls-o32"
|
||||
+ run_dump_test "tls-relw"
|
||||
run_dump_test "jalr2"
|
||||
|
||||
run_dump_test_arches "aent" [mips_arch_list_matching mips1]
|
||||
diff --git a/gas/testsuite/gas/mips/tls-relw.d b/gas/testsuite/gas/mips/tls-relw.d
|
||||
new file mode 100644
|
||||
index 0000000..bc13b43
|
||||
--- /dev/null
|
||||
+++ b/gas/testsuite/gas/mips/tls-relw.d
|
||||
@@ -0,0 +1,8 @@
|
||||
+# as: -EB
|
||||
+# objdump: -sj.data
|
||||
+
|
||||
+.*
|
||||
+
|
||||
+Contents of section \.data:
|
||||
+ 0000 00000001 00000000 00000002 00000004 ................
|
||||
+ 0010 00000000 00000003 00000010 00000000 ................
|
||||
diff --git a/gas/testsuite/gas/mips/tls-relw.s b/gas/testsuite/gas/mips/tls-relw.s
|
||||
new file mode 100644
|
||||
index 0000000..6890685
|
||||
--- /dev/null
|
||||
+++ b/gas/testsuite/gas/mips/tls-relw.s
|
||||
@@ -0,0 +1,12 @@
|
||||
+ .data
|
||||
+start:
|
||||
+ .word 1
|
||||
+a:
|
||||
+ .tprelword t1
|
||||
+ .word 2
|
||||
+ .word a-start
|
||||
+b:
|
||||
+ .dtprelword t2
|
||||
+ .word 3
|
||||
+ .word b-start
|
||||
+ .word 0
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From fee27086a7592c1812253e9c1c26f412dd87f3a2 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Tue, 10 Jan 2012 20:34:56 +0000
|
||||
Subject: [PATCH 055/262] Remove ABI_64_P check on R_X86_64_PCXX
|
||||
|
||||
bfd/
|
||||
|
||||
2012-01-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/13581
|
||||
* elf64-x86-64.c (elf_x86_64_relocate_section): Remove ABI_64_P
|
||||
check on R_X86_64_PCXX.
|
||||
|
||||
ld/testsuite/
|
||||
|
||||
2012-01-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/13581
|
||||
* ld-x86-64/ilp32-4.s: New.
|
||||
* ld-x86-64/ilp32-10.d: Likewise.
|
||||
* ld-x86-64/ilp32-10.s: Likewise.
|
||||
|
||||
* ld-x86-64/ilp32-4.d: Adjusted.
|
||||
* ld-x86-64/ilp32-5.d: Likewise.
|
||||
* ld-x86-64/ilp32-5.s: Likewise.
|
||||
|
||||
* ld-x86-64/x86-64.exp: Run ilp32-10.
|
||||
---
|
||||
bfd/ChangeLog | 7 +++++++
|
||||
bfd/elf64-x86-64.c | 1 -
|
||||
ld/testsuite/ChangeLog | 14 ++++++++++++++
|
||||
ld/testsuite/ld-x86-64/ilp32-10.d | 3 +++
|
||||
ld/testsuite/ld-x86-64/ilp32-10.s | 3 +++
|
||||
ld/testsuite/ld-x86-64/ilp32-4.d | 32 +++++++++++++-------------------
|
||||
ld/testsuite/ld-x86-64/ilp32-4.s | 3 +++
|
||||
ld/testsuite/ld-x86-64/ilp32-5.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/ilp32-5.s | 2 +-
|
||||
ld/testsuite/ld-x86-64/x86-64.exp | 1 +
|
||||
10 files changed, 46 insertions(+), 22 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-x86-64/ilp32-10.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/ilp32-10.s
|
||||
create mode 100644 ld/testsuite/ld-x86-64/ilp32-4.s
|
||||
|
||||
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
|
||||
index 3a2444b..bdb3ae6 100644
|
||||
--- a/bfd/elf64-x86-64.c
|
||||
+++ b/bfd/elf64-x86-64.c
|
||||
@@ -3460,7 +3460,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
||||
case R_X86_64_PC16:
|
||||
case R_X86_64_PC32:
|
||||
if (info->shared
|
||||
- && ABI_64_P (output_bfd)
|
||||
&& (input_section->flags & SEC_ALLOC) != 0
|
||||
&& (input_section->flags & SEC_READONLY) != 0
|
||||
&& h != NULL)
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-10.d b/ld/testsuite/ld-x86-64/ilp32-10.d
|
||||
new file mode 100644
|
||||
index 0000000..43d9fbd
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-10.d
|
||||
@@ -0,0 +1,3 @@
|
||||
+#as: --x32
|
||||
+#ld: -shared -melf32_x86_64
|
||||
+#error: .*relocation R_X86_64_PC32 against undefined symbol `bar' can not be used when making a shared object; recompile with -fPIC
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-10.s b/ld/testsuite/ld-x86-64/ilp32-10.s
|
||||
new file mode 100644
|
||||
index 0000000..70e4a90
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-10.s
|
||||
@@ -0,0 +1,3 @@
|
||||
+ .globl foo
|
||||
+foo:
|
||||
+ mov bar(%rip), %rax
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d
|
||||
index 84dc7b2..92d8a67 100644
|
||||
--- a/ld/testsuite/ld-x86-64/ilp32-4.d
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-4.d
|
||||
@@ -1,36 +1,30 @@
|
||||
-#source: start.s
|
||||
#as: --x32
|
||||
#ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info
|
||||
#readelf: -d -S --wide
|
||||
|
||||
-There are 10 section headers, starting at offset 0x22c:
|
||||
+There are 9 section headers, starting at offset 0x1d8:
|
||||
|
||||
Section Headers:
|
||||
\[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al
|
||||
\[ 0\] NULL 00000000 000000 000000 00 0 0 0
|
||||
- \[ 1\] .hash HASH 00000094 000094 000030 04 A 2 0 4
|
||||
- \[ 2\] .dynsym DYNSYM 000000c4 0000c4 000070 10 A 3 2 4
|
||||
- \[ 3\] .dynstr STRTAB 00000134 000134 00001d 00 A 0 0 1
|
||||
- \[ 4\] .rela.dyn RELA 00000154 000154 00000c 0c A 2 0 4
|
||||
- \[ 5\] .text PROGBITS 00000160 000160 000005 00 AX 0 0 4
|
||||
- \[ 6\] .dynamic DYNAMIC 00200168 000168 000078 08 WA 3 0 4
|
||||
- \[ 7\] .shstrtab STRTAB 00000000 0001e0 00004a 00 0 0 1
|
||||
- \[ 8\] .symtab SYMTAB 00000000 0003bc 0000e0 10 9 9 4
|
||||
- \[ 9\] .strtab STRTAB 00000000 00049c 000043 00 0 0 1
|
||||
+ \[ 1\] .hash HASH 00000094 000094 00002c 04 A 2 0 4
|
||||
+ \[ 2\] .dynsym DYNSYM 000000c0 0000c0 000060 10 A 3 2 4
|
||||
+ \[ 3\] .dynstr STRTAB 00000120 000120 000019 00 A 0 0 1
|
||||
+ \[ 4\] .text PROGBITS 0000013c 00013c 000001 00 AX 0 0 4
|
||||
+ \[ 5\] .dynamic DYNAMIC 00200140 000140 000058 08 WA 3 0 4
|
||||
+ \[ 6\] .shstrtab STRTAB 00000000 000198 000040 00 0 0 1
|
||||
+ \[ 7\] .symtab SYMTAB 00000000 000340 0000c0 10 8 8 4
|
||||
+ \[ 8\] .strtab STRTAB 00000000 000400 00003f 00 0 0 1
|
||||
Key to Flags:
|
||||
W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\)
|
||||
I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
|
||||
O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
|
||||
|
||||
-Dynamic section at offset 0x168 contains 10 entries:
|
||||
+Dynamic section at offset 0x140 contains 6 entries:
|
||||
Tag Type Name/Value
|
||||
0x00000004 \(HASH\) 0x94
|
||||
- 0x00000005 \(STRTAB\) 0x134
|
||||
- 0x00000006 \(SYMTAB\) 0xc4
|
||||
- 0x0000000a \(STRSZ\) 29 \(bytes\)
|
||||
+ 0x00000005 \(STRTAB\) 0x120
|
||||
+ 0x00000006 \(SYMTAB\) 0xc0
|
||||
+ 0x0000000a \(STRSZ\) 25 \(bytes\)
|
||||
0x0000000b \(SYMENT\) 16 \(bytes\)
|
||||
- 0x00000007 \(RELA\) 0x154
|
||||
- 0x00000008 \(RELASZ\) 12 \(bytes\)
|
||||
- 0x00000009 \(RELAENT\) 12 \(bytes\)
|
||||
- 0x00000016 \(TEXTREL\) 0x0
|
||||
0x00000000 \(NULL\) 0x0
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-4.s b/ld/testsuite/ld-x86-64/ilp32-4.s
|
||||
new file mode 100644
|
||||
index 0000000..5f270c7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-4.s
|
||||
@@ -0,0 +1,3 @@
|
||||
+ .globl _start
|
||||
+_start:
|
||||
+ ret
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-5.d b/ld/testsuite/ld-x86-64/ilp32-5.d
|
||||
index e4673e5..4870c2b 100644
|
||||
--- a/ld/testsuite/ld-x86-64/ilp32-5.d
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-5.d
|
||||
@@ -4,5 +4,5 @@
|
||||
|
||||
#...
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
|
||||
-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_PC32 +[0-9a-f]+ +foo - 4
|
||||
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ +foo \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +foo \+ 0
|
||||
diff --git a/ld/testsuite/ld-x86-64/ilp32-5.s b/ld/testsuite/ld-x86-64/ilp32-5.s
|
||||
index 0d97807..ef0c60e 100644
|
||||
--- a/ld/testsuite/ld-x86-64/ilp32-5.s
|
||||
+++ b/ld/testsuite/ld-x86-64/ilp32-5.s
|
||||
@@ -1,6 +1,6 @@
|
||||
.globl bar
|
||||
bar:
|
||||
- mov foo(%rip), %rax
|
||||
+ mov foo@GOTPCREL(%rip), %rax
|
||||
|
||||
.data
|
||||
xxx:
|
||||
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
index 77b081b..44d3e07 100644
|
||||
--- a/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
@@ -207,6 +207,7 @@ run_dump_test "ilp32-6"
|
||||
run_dump_test "ilp32-7"
|
||||
run_dump_test "ilp32-8"
|
||||
run_dump_test "ilp32-9"
|
||||
+run_dump_test "ilp32-10"
|
||||
run_dump_test "ia32-1"
|
||||
run_dump_test "ia32-2"
|
||||
run_dump_test "ia32-3"
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From dcf0cb6bb406708020efe2db44f53af0fe822773 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 30 Jan 2012 11:35:37 +0000
|
||||
Subject: [PATCH 078/262] PR binutils/13622 * readelf.c
|
||||
(process_section_groups): If there are no section
|
||||
headers do not scan for section groups.
|
||||
(process_note_sections): Likewise for note
|
||||
sections.
|
||||
|
||||
---
|
||||
binutils/ChangeLog | 7 +++++++
|
||||
binutils/readelf.c | 5 +++--
|
||||
2 files changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
2012-01-26 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR binutils/13622
|
||||
* readelf.c (process_section_groups): If there are no section
|
||||
headers do not scan for section groups.
|
||||
(process_note_sections): Likewise for note sections.
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index 9e13190..bf053d9 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -4937,7 +4937,8 @@ process_section_groups (FILE * file)
|
||||
if (section_headers == NULL)
|
||||
{
|
||||
error (_("Section headers are not available!\n"));
|
||||
- abort ();
|
||||
+ /* PR 13622: This can happen with a corrupt ELF header. */
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
section_headers_groups = (struct group **) calloc (elf_header.e_shnum,
|
||||
@@ -12942,7 +12943,7 @@ process_note_sections (FILE * file)
|
||||
int res = 1;
|
||||
|
||||
for (i = 0, section = section_headers;
|
||||
- i < elf_header.e_shnum;
|
||||
+ i < elf_header.e_shnum && section != NULL;
|
||||
i++, section++)
|
||||
if (section->sh_type == SHT_NOTE)
|
||||
res &= process_corefile_note_segment (file,
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From b7578c6b7bd966b63ab1b2682fd90ed4f3a92e71 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Lance Taylor <ian@airs.com>
|
||||
Date: Fri, 6 Apr 2012 17:23:58 +0000
|
||||
Subject: [PATCH 144/262] * timer.cc: #include <unistd.h>.
|
||||
|
||||
---
|
||||
gold/ChangeLog | 4 ++++
|
||||
gold/timer.cc | 2 ++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
2012-04-06 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* timer.cc: #include <unistd.h>.
|
||||
|
||||
diff --git a/gold/timer.cc b/gold/timer.cc
|
||||
index d9b8874..44e19f5 100644
|
||||
--- a/gold/timer.cc
|
||||
+++ b/gold/timer.cc
|
||||
@@ -22,6 +22,8 @@
|
||||
|
||||
#include "gold.h"
|
||||
|
||||
+#include <unistd.h>
|
||||
+
|
||||
#ifdef HAVE_TIMES
|
||||
#include <sys/times.h>
|
||||
#endif
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
Upstream-Status: Backport
|
||||
|
||||
From b6db4b7975d21ec53da5975ddac021098da13bf3 Mon Sep 17 00:00:00 2001
|
||||
From: Doug Kwan <dougkwan@google.com>
|
||||
Date: Thu, 26 Apr 2012 18:08:19 +0000
|
||||
Subject: [PATCH 166/262] 2012-04-27 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
2012-03-16 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
* testsuite/Makefile.am: Disable test initpri3b.
|
||||
* testsuite/Makefile.in: Regenerate.
|
||||
|
||||
2012-03-14 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
* gold/arm.cc (Target_arm::Scan::global): Generate
|
||||
R_ARM_GLOB_DAT dynamic relocations for protected symbols in
|
||||
shared objects.
|
||||
---
|
||||
gold/ChangeLog | 15 +++++++++++++++
|
||||
gold/arm.cc | 4 +++-
|
||||
gold/testsuite/Makefile.am | 15 ++++++++++-----
|
||||
gold/testsuite/Makefile.in | 32 +++++++++++++-------------------
|
||||
4 files changed, 41 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/gold/arm.cc b/gold/arm.cc
|
||||
index 72c3670..a1e8e4c 100644
|
||||
--- a/gold/arm.cc
|
||||
+++ b/gold/arm.cc
|
||||
@@ -8374,7 +8374,9 @@ Target_arm<big_endian>::Scan::global(Symbol_table* symtab,
|
||||
Reloc_section* rel_dyn = target->rel_dyn_section(layout);
|
||||
if (gsym->is_from_dynobj()
|
||||
|| gsym->is_undefined()
|
||||
- || gsym->is_preemptible())
|
||||
+ || gsym->is_preemptible()
|
||||
+ || (gsym->visibility() == elfcpp::STV_PROTECTED
|
||||
+ && parameters->options().shared()))
|
||||
got->add_global_with_rel(gsym, GOT_TYPE_STANDARD,
|
||||
rel_dyn, elfcpp::R_ARM_GLOB_DAT);
|
||||
else
|
||||
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
|
||||
index 9b8605b..97d6457 100644
|
||||
--- a/gold/testsuite/Makefile.am
|
||||
+++ b/gold/testsuite/Makefile.am
|
||||
@@ -870,11 +870,16 @@ initpri3a_DEPENDENCIES = gcctestdir/ld
|
||||
initpri3a_LDFLAGS = -Bgcctestdir/
|
||||
initpri3a_LDADD =
|
||||
|
||||
-check_PROGRAMS += initpri3b
|
||||
-initpri3b_SOURCES = initpri3.c
|
||||
-initpri3b_DEPENDENCIES = gcctestdir/ld
|
||||
-initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
|
||||
-initpri3b_LDADD =
|
||||
+# This test fails on targets not using .ctors and .dtors sections (e.g. ARM
|
||||
+# EABI). Given that gcc is moving towards using .init_array in all cases,
|
||||
+# this test is commented out. A better fix would be checking whether gcc
|
||||
+# uses .ctors or .init_array sections in configure.
|
||||
+
|
||||
+# check_PROGRAMS += initpri3b
|
||||
+# initpri3b_SOURCES = initpri3.c
|
||||
+# initpri3b_DEPENDENCIES = gcctestdir/ld
|
||||
+# initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
|
||||
+# initpri3b_LDADD =
|
||||
|
||||
# Test --detect-odr-violations
|
||||
check_SCRIPTS += debug_msg.sh
|
||||
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
|
||||
index 785dcdd..518d32b 100644
|
||||
--- a/gold/testsuite/Makefile.in
|
||||
+++ b/gold/testsuite/Makefile.in
|
||||
@@ -56,6 +56,17 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ binary_unittest
|
||||
|
||||
+# This test fails on targets not using .ctors and .dtors sections (e.g. ARM
|
||||
+# EABI). Given that gcc is moving towards using .init_array in all cases,
|
||||
+# this test is commented out. A better fix would be checking whether gcc
|
||||
+# uses .ctors or .init_array sections in configure.
|
||||
+
|
||||
+# check_PROGRAMS += initpri3b
|
||||
+# initpri3b_SOURCES = initpri3.c
|
||||
+# initpri3b_DEPENDENCIES = gcctestdir/ld
|
||||
+# initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
|
||||
+# initpri3b_LDADD =
|
||||
+
|
||||
# Test --detect-odr-violations
|
||||
|
||||
# Similar to --detect-odr-violations: check for undefined symbols in .so's
|
||||
@@ -189,7 +200,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
|
||||
# Test -o when emitting to a special file (such as something in /dev).
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_24 = many_sections_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test initpri1 \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 initpri3a initpri3b \
|
||||
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 initpri3a \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile
|
||||
@GCC_FALSE@many_sections_test_DEPENDENCIES =
|
||||
@NATIVE_LINKER_FALSE@many_sections_test_DEPENDENCIES =
|
||||
@@ -204,8 +215,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
|
||||
@NATIVE_LINKER_FALSE@initpri2_DEPENDENCIES =
|
||||
@GCC_FALSE@initpri3a_DEPENDENCIES =
|
||||
@NATIVE_LINKER_FALSE@initpri3a_DEPENDENCIES =
|
||||
-@GCC_FALSE@initpri3b_DEPENDENCIES =
|
||||
-@NATIVE_LINKER_FALSE@initpri3b_DEPENDENCIES =
|
||||
|
||||
# Check that --detect-odr-violations works with compressed debug sections.
|
||||
@GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@am__append_27 = debug_msg_cdebug.err
|
||||
@@ -712,7 +721,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri1$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri3a$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri3b$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile$(EXEEXT)
|
||||
@GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_21 = flagstest_compress_debug_sections$(EXEEXT) \
|
||||
@GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile_and_compress_debug_sections$(EXEEXT)
|
||||
@@ -1200,11 +1208,6 @@ initpri2_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri2_LDFLAGS) \
|
||||
initpri3a_OBJECTS = $(am_initpri3a_OBJECTS)
|
||||
initpri3a_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri3a_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am_initpri3b_OBJECTS = \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri3.$(OBJEXT)
|
||||
-initpri3b_OBJECTS = $(am_initpri3b_OBJECTS)
|
||||
-initpri3b_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri3b_LDFLAGS) \
|
||||
- $(LDFLAGS) -o $@
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_justsyms_OBJECTS = \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms_1.$(OBJEXT)
|
||||
justsyms_OBJECTS = $(am_justsyms_OBJECTS)
|
||||
@@ -1698,7 +1701,7 @@ SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c basic_pie_test.c \
|
||||
incremental_copy_test.c incremental_test_2.c \
|
||||
incremental_test_3.c incremental_test_4.c incremental_test_5.c \
|
||||
incremental_test_6.c $(initpri1_SOURCES) $(initpri2_SOURCES) \
|
||||
- $(initpri3a_SOURCES) $(initpri3b_SOURCES) $(justsyms_SOURCES) \
|
||||
+ $(initpri3a_SOURCES) $(justsyms_SOURCES) \
|
||||
$(justsyms_exec_SOURCES) $(large_SOURCES) local_labels_test.c \
|
||||
many_sections_r_test.c $(many_sections_test_SOURCES) \
|
||||
$(object_unittest_SOURCES) permission_test.c plugin_test_1.c \
|
||||
@@ -2281,10 +2284,6 @@ LDADD = libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_DEPENDENCIES = gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_LDFLAGS = -Bgcctestdir/
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_LDADD =
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_SOURCES = initpri3.c
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_DEPENDENCIES = gcctestdir/ld
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_LDADD =
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_SOURCES = ver_test_main.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_DEPENDENCIES = gcctestdir/ld ver_test_1.so ver_test_2.so ver_test_4.so
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
||||
@@ -2928,9 +2927,6 @@ initpri2$(EXEEXT): $(initpri2_OBJECTS) $(initpri2_DEPENDENCIES)
|
||||
initpri3a$(EXEEXT): $(initpri3a_OBJECTS) $(initpri3a_DEPENDENCIES)
|
||||
@rm -f initpri3a$(EXEEXT)
|
||||
$(initpri3a_LINK) $(initpri3a_OBJECTS) $(initpri3a_LDADD) $(LIBS)
|
||||
-initpri3b$(EXEEXT): $(initpri3b_OBJECTS) $(initpri3b_DEPENDENCIES)
|
||||
- @rm -f initpri3b$(EXEEXT)
|
||||
- $(initpri3b_LINK) $(initpri3b_OBJECTS) $(initpri3b_LDADD) $(LIBS)
|
||||
justsyms$(EXEEXT): $(justsyms_OBJECTS) $(justsyms_DEPENDENCIES)
|
||||
@rm -f justsyms$(EXEEXT)
|
||||
$(justsyms_LINK) $(justsyms_OBJECTS) $(justsyms_LDADD) $(LIBS)
|
||||
@@ -3869,8 +3865,6 @@ initpri2.log: initpri2$(EXEEXT)
|
||||
@p='initpri2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
initpri3a.log: initpri3a$(EXEEXT)
|
||||
@p='initpri3a$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
-initpri3b.log: initpri3b$(EXEEXT)
|
||||
- @p='initpri3b$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
flagstest_o_specialfile.log: flagstest_o_specialfile$(EXEEXT)
|
||||
@p='flagstest_o_specialfile$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
flagstest_compress_debug_sections.log: flagstest_compress_debug_sections$(EXEEXT)
|
||||
--
|
||||
1.7.9.5
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue