Commit 0b9f386c authored by Guo Ren's avatar Guo Ren
Browse files

csky: Implement copy_thread_tls



This is required for clone3 which passes the TLS value through a
struct rather than a register.

Cc: Amanieu d'Antras <amanieu@gmail.com>
Signed-off-by: default avatarGuo Ren <guoren@linux.alibaba.com>
parent 5b49c82d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ config CSKY
	select GX6605S_TIMER if CPU_CK610
	select HAVE_ARCH_TRACEHOOK
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_COPY_THREAD_TLS
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
+4 −3
Original line number Diff line number Diff line
@@ -40,10 +40,11 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
	return sw->r15;
}

int copy_thread(unsigned long clone_flags,
int copy_thread_tls(unsigned long clone_flags,
		unsigned long usp,
		unsigned long kthread_arg,
		struct task_struct *p)
		struct task_struct *p,
		unsigned long tls)
{
	struct switch_stack *childstack;
	struct pt_regs *childregs = task_pt_regs(p);
@@ -70,7 +71,7 @@ int copy_thread(unsigned long clone_flags,
			childregs->usp = usp;
		if (clone_flags & CLONE_SETTLS)
			task_thread_info(p)->tp_value = childregs->tls
						      = childregs->regs[0];
						      = tls;

		childregs->a0 = 0;
		childstack->r15 = (unsigned long) ret_from_fork;