powerpc: Fix ifuncmain6pie failure with GCC 4.9
This patch fix the elf/ifuncmain6pie failure when building with GCC 4.9+. For some reason, the compiler removes the branch taken code at resolve_ifunc (sysdeps/powerpc/powerpc64/dl-machine.h) as dead-code and thus the testcase fails because the ifunc resolves branches to an invalid memory location. It fixes by explicit adding a dependency of value based on odp variable to avoid compiler optimization. It fixes BZ#17868.
This commit is contained in:
parent
972af9e8dd
commit
0e87343e20
@ -1,3 +1,9 @@
|
||||
2015-01-24 Adhemerval Zanellla <azanella@linux.vnet.ibm.com>
|
||||
|
||||
[BZ #17868]
|
||||
* sysdeps/powerpc/powerpc64/dl-machine.h (resolve_ifunc): Force value
|
||||
set dependency from opd value.
|
||||
|
||||
2015-01-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
|
||||
|
2
NEWS
2
NEWS
@ -18,7 +18,7 @@ Version 2.21
|
||||
17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724,
|
||||
17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777,
|
||||
17780, 17781, 17782, 17791, 17793, 17796, 17797, 17803, 17806, 17834,
|
||||
17844, 17848, 17870
|
||||
17844, 17848, 17868, 17870
|
||||
|
||||
* A new semaphore algorithm has been implemented in generic C code for all
|
||||
machines. Previous custom assembly implementations of semaphore were
|
||||
|
@ -623,7 +623,9 @@ resolve_ifunc (Elf64_Addr value,
|
||||
opd.fd_func = func->fd_func + sym_map->l_addr;
|
||||
opd.fd_toc = func->fd_toc + sym_map->l_addr;
|
||||
opd.fd_aux = func->fd_aux;
|
||||
value = (Elf64_Addr) &opd;
|
||||
/* GCC 4.9+ eliminates the branch as dead code, force the odp set
|
||||
dependency. */
|
||||
asm ("" : "=r" (value) : "0" (&opd), "X" (opd));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user