Discussion:
[GOLD] justsyms_exec test fail on powerpc64
Alan Modra
2018-11-26 11:01:46 UTC
Permalink
This test fails on powerpc64le due to the justsyms_lib being built
with exported_data at 0x2010000, apparently due to the powerpc target
code generating an empty relro .branch_lt section. Since the test
relies on the library having exported_data at 0x2000000, avoid the
problem by linking with -z norelro. Also, the test doesn't need to
avoid checking the function symbol on powerpc elfv2.

* testsuite/Makefile.am (justsyms_lib): Link with -z norelro.
* testsuite/Makefile.in: Regenerate.
* testsuite/justsyms_exec.c (main): Do check exported_func
on PowerPC64 ELFv2.

diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index b70a7d5a9f..135790b30d 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2013,7 +2013,7 @@ MOSTLYCLEANFILES += justsyms_lib
justsyms_lib.o: justsyms_lib.c
$(COMPILE) -c -o $@ $<
justsyms_lib: justsyms_lib.o gcctestdir/ld
- gcctestdir/ld -o $@ -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
+ gcctestdir/ld -o $@ -z norelro -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o

check_PROGRAMS += binary_test
MOSTLYCLEANFILES += binary.txt
diff --git a/gold/testsuite/justsyms_exec.c b/gold/testsuite/justsyms_exec.c
index 49c0b55d19..c0281e79b3 100644
--- a/gold/testsuite/justsyms_exec.c
+++ b/gold/testsuite/justsyms_exec.c
@@ -47,8 +47,8 @@ check(void *sym, long v, const char *name)
int
main(void)
{
-#ifndef __powerpc64__
- /* PowerPC64 uses function descriptors. */
+#if !defined (__powerpc64__) || (defined (_CALL_ELF) && _CALL_ELF == 2)
+ /* PowerPC64 ELFv1 uses function descriptors. */
check(exported_func, 0x1000200, "exported_func");
#endif
check(&exported_data, 0x2000000, "exported_data");
--
Alan Modra
Australia Development Lab, IBM
Loading...