linux/arch/tile/include/asm
Chris Metcalf 81711cee93 arch/tile: handle rt_sigreturn() more cleanly
The current tile rt_sigreturn() syscall pattern uses the common idiom
of loading up pt_regs with all the saved registers from the time of
the signal, then anticipating the fact that we will clobber the ABI
"return value" register (r0) as we return from the syscall by setting
the rt_sigreturn return value to whatever random value was in the pt_regs
for r0.

However, this breaks in our 64-bit kernel when running "compat" tasks,
since we always sign-extend the "return value" register to properly
handle returned pointers that are in the upper 2GB of the 32-bit compat
address space.  Doing this to the sigreturn path then causes occasional
random corruption of the 64-bit r0 register.

Instead, we stop doing the crazy "load the return-value register"
hack in sigreturn.  We already have some sigreturn-specific assembly
code that we use to pass the pt_regs pointer to C code.  We extend that
code to also set the link register to point to a spot a few instructions
after the usual syscall return address so we don't clobber the saved r0.
Now it no longer matters what the rt_sigreturn syscall returns, and the
pt_regs structure can be cleanly and completely reloaded.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
2010-12-17 16:59:29 -05:00
..
Kbuild arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
asm-offsets.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
atomic.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
atomic_32.h arch/tile: Various cleanups. 2010-08-13 08:52:19 -04:00
auxvec.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
backtrace.h arch/tile: support new info op generated by compiler 2010-10-15 15:39:25 -04:00
bitops.h bitops: make asm-generic/bitops/find.h more generic 2010-10-09 21:51:44 +02:00
bitops_32.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
bitsperlong.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
bug.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
bugs.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
byteorder.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
cache.h arch/tile: rename ARCH_KMALLOC_MINALIGN to ARCH_DMA_MINALIGN 2010-08-15 11:05:33 -04:00
cacheflush.h drivers/net/tile/: on-chip network drivers for the tile architecture 2010-11-24 13:11:18 -05:00
checksum.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
compat.h arch/tile: Use <asm-generic/syscalls.h> 2010-10-14 14:34:33 -04:00
cputime.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
current.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
delay.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
device.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
div64.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
dma-mapping.h dma-mapping: remove dma_is_consistent API 2010-08-11 08:59:21 -07:00
dma.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
elf.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
emergency-restart.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
errno.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
fcntl.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
fixmap.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ftrace.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
futex.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
hardirq.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hardwall.h arch/tile: Add driver to enable access to the user dynamic network. 2010-07-06 13:34:15 -04:00
highmem.h arch/tile: complete migration to new kmap_atomic scheme 2010-11-01 15:30:36 -04:00
homecache.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hugetlb.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hv_driver.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hw_irq.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ide.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
io.h pci root complex: support for tile architecture 2010-11-24 13:13:49 -05:00
ioctl.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ioctls.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ipc.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ipcbuf.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
irq.h arch/tile: Enable more sophisticated IRQ model for 32-bit chips. 2010-07-06 13:34:01 -04:00
irq_regs.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
irqflags.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2010-10-26 17:25:38 -07:00
kdebug.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
kexec.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
kmap_types.h arch/tile: complete migration to new kmap_atomic scheme 2010-11-01 15:30:36 -04:00
linkage.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
local.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
memprof.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
mman.h arch/tile: provide a definition of MAP_STACK 2010-10-14 15:09:02 -04:00
mmu.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
mmu_context.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
mmzone.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
module.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
msgbuf.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
mutex.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
opcode-tile.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
opcode-tile_32.h arch/tile: Shrink the tile-opcode files considerably. 2010-07-06 13:40:56 -04:00
opcode-tile_64.h arch/tile: Shrink the tile-opcode files considerably. 2010-07-06 13:40:56 -04:00
opcode_constants.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
opcode_constants_32.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
opcode_constants_64.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
page.h arch/tile: parameterize system PLs to support KVM port 2010-10-15 15:38:09 -04:00
param.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
pci.h pci root complex: support for tile architecture 2010-11-24 13:13:49 -05:00
percpu.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
pgalloc.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
pgtable.h arch/tile: complete migration to new kmap_atomic scheme 2010-11-01 15:30:36 -04:00
pgtable_32.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
poll.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
posix_types.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
processor.h drivers/net/tile/: on-chip network drivers for the tile architecture 2010-11-24 13:11:18 -05:00
ptrace.h arch/tile: parameterize system PLs to support KVM port 2010-10-15 15:38:09 -04:00
resource.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
scatterlist.h tile: remove unused ISA_DMA_THRESHOLD define 2010-08-11 10:38:06 -04:00
sections.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
sembuf.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
setup.h arch/tile: export only COMMAND_LINE_SIZE to userspace. 2010-08-15 12:14:41 -04:00
shmbuf.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
shmparam.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
sigcontext.h arch/tile: Change struct sigcontext to be more useful 2010-09-15 11:16:08 -04:00
sigframe.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
siginfo.h arch/tile: Fix a couple of issues with the COMPAT code for TILE-Gx. 2010-08-13 08:32:21 -04:00
signal.h arch/tile: handle rt_sigreturn() more cleanly 2010-12-17 16:59:29 -05:00
smp.h arch/tile: Enable more sophisticated IRQ model for 32-bit chips. 2010-07-06 13:34:01 -04:00
socket.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
sockios.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
spinlock.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
spinlock_32.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
spinlock_types.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
stack.h arch/tile: Miscellaneous cleanup changes. 2010-07-06 13:41:51 -04:00
stat.h asm-generic/stat.h: support 64-bit file time_t for stat() 2010-11-01 15:31:29 -04:00
statfs.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
string.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
swab.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
syscall.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
syscalls.h arch/tile: Use <asm-generic/syscalls.h> 2010-10-14 14:34:33 -04:00
system.h arch/tile: parameterize system PLs to support KVM port 2010-10-15 15:38:09 -04:00
termbits.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
termios.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
thread_info.h arch/tile: catch up on various minor cleanups. 2010-07-06 13:42:15 -04:00
timex.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
tlb.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
tlbflush.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
topology.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
traps.h arch/tile: enable single-step support for TILE-Gx 2010-10-15 15:38:26 -04:00
types.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
uaccess.h arch/tile: Various cleanups. 2010-08-13 08:52:19 -04:00
ucontext.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
unaligned.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
unistd.h asm-generic/stat.h: support 64-bit file time_t for stat() 2010-11-01 15:31:29 -04:00
user.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
xor.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00