+2014-06-16 Will Newton <will.newton@linaro.org>
+
+ * elf32-arm.c (elf32_arm_allocate_plt_entry): Increment
+ htab->next_tls_desc_index in the non-IPLT case.
+ Calculate GOT offset correctly for the non-IPLT case.
+ (allocate_dynrelocs_for_symbol): Don't increment
+ htab->next_tls_desc_index here.
+
2014-06-16 Alan Modra <amodra@gmail.com>
* elf32-vax.c (elf_vax_size_dynamic_sections): Clear linker
first entry. */
if (splt->size == 0)
splt->size += htab->plt_header_size;
+
+ htab->next_tls_desc_index++;
}
/* Allocate the PLT entry itself, including any leading Thumb stub. */
{
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
- arm_plt->got_offset = sgotplt->size - 8 * htab->num_tls_desc;
+ if (is_iplt_entry)
+ arm_plt->got_offset = sgotplt->size;
+ else
+ arm_plt->got_offset = sgotplt->size - 8 * htab->num_tls_desc;
sgotplt->size += 4;
}
}
h->target_internal = ST_BRANCH_TO_ARM;
}
- htab->next_tls_desc_index++;
-
/* VxWorks executables have a second set of relocations for
each PLT entry. They go in a separate relocation section,
which is processed by the kernel loader. */
+2014-06-16 Will Newton <will.newton@linaro.org>
+
+ * ld-arm/arm-elf.exp: Add ifunc-gdesc test.
+ * ld-arm/ifunc-gdesc.r: New file.
+ * ld-arm/ifunc-gdesc.s: Likewise.
+ * ld-arm/ifunc-gdesc.ver: Likewise.
+
2014-06-09 Ryan Mansfield <rmansfield@qnx.com>
* config/default.exp (GASP): Remove.
"" {long-plt-format.s}
{{objdump "-d -j .plt" long-plt-format.d}}
"long-plt-format"}
+ {"IFUNC and TLS descriptor shared library" "-shared -T arm-lib.ld --version-script=ifunc-gdesc.ver" "" "" {ifunc-gdesc.s}
+ {{objdump "-Rw" ifunc-gdesc.r}}
+ "ifunc-gdesc.so"}
}
run_ld_link_tests $armelftests_common
--- /dev/null
+tmpdir/ifunc-gdesc.so: file format elf32-(big|little)arm
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0000825c R_ARM_IRELATIVE \*ABS\*
+00008248 R_ARM_TLS_DESC \*ABS\*
+00008250 R_ARM_TLS_DESC \*ABS\*
--- /dev/null
+
+ .arm
+
+foo:
+ bl ifunc1(PLT)
+ ldr r0,1f
+2: bl loc1(tlscall)
+ nop
+1: .word loc1(tlsdesc) + (. - 2b)
+
+ ldr r0,1f
+2: bl loc2(tlscall)
+ nop
+1: .word loc2(tlsdesc) + (. - 2b)
+
+ .type ifunc1,%gnu_indirect_function
+ .global ifunc1
+ifunc1:
+ mov pc,lr
+ .size ifunc1,.-ifunc1
+
+
+ .section .tdata,"awT",%progbits
+ .space 8
+ .type loc1, %object
+loc1: .space 4
+ .type loc2, %object
+loc2: .space 4
+
--- /dev/null
+{
+global: foo;
+local: *;
+};
\ No newline at end of file