about summary refs log tree commit diff
path: root/sysdeps/unix/syscall-template.S
diff options
context:
space:
mode:
authorPaul E. Murphy <murphyp@linux.vnet.ibm.com>2015-08-21 14:39:01 -0500
committerAurelien Jarno <aurelien@aurel32.net>2016-04-08 23:30:47 +0200
commitab753f625e1dd77d388d1db6b9ecae54e871de84 (patch)
tree86ebcaa1ba006bc78a25c00c66d820f4b99614f0 /sysdeps/unix/syscall-template.S
parenta07df04187284a7993d890d5164a4433cebfd930 (diff)
downloadglibc-ab753f625e1dd77d388d1db6b9ecae54e871de84.tar.gz
glibc-ab753f625e1dd77d388d1db6b9ecae54e871de84.tar.xz
glibc-ab753f625e1dd77d388d1db6b9ecae54e871de84.zip
powerpc: Fix tabort usage in syscalls
Fix usage of tabort in generated syscalls.  r0 has special meaning
when used with this instruction, thus it will not generate
persistent errors, nor return an error code.  This mitigates poor
CPU usage when performing elided critical sections.

Additionally, transactions should be aborted when entering a user
invoked syscall.  Otherwise the results of the transaction may be
undefined.

2015-08-25  Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

	* sysdeps/powerpc/powerpc32/sysdep.h (ABORT_TRANSACTION): Use
	register other than r0 for tabort, it has special meaning.
	* sysdeps/powerpc/powerpc64/sysdep.h (ABORT_TRANSACTION): Likewise
	* sysdeps/unix.sysv/linux/powerpc/syscall.S (syscall): Abort
	transaction before starting syscall.

(cherry picked from commit 18173559a23e28055640b152e623d9f0d40ecca8)
Diffstat (limited to 'sysdeps/unix/syscall-template.S')
0 files changed, 0 insertions, 0 deletions