* [PATCH 0/4] user-cr: powerpc support etc
@ 2009-09-16 9:27 Nathan Lynch
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Nathan Lynch @ 2009-09-16 9:27 UTC (permalink / raw)
To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
Patch 1 is an obvious fix, I think.
The rest is an assortment of hacks I've employed to get this building
and working on powerpc.
Nathan Lynch (4):
fix rename fallout
restart: (build fix hack) define sa_family_t and struct linger
mktree: initial powerpc support hacks
makefile hack for powerpc
Makefile | 5 +++-
clone_ppc32.S | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
powerpc_asm.h | 46 +++++++++++++++++++++++++++++++++
restart.c | 31 ++++++++++++++++++++++
4 files changed, 160 insertions(+), 1 deletions(-)
create mode 100644 clone_ppc32.S
create mode 100644 powerpc_asm.h
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] fix rename fallout
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
@ 2009-09-16 9:27 ` Nathan Lynch
2009-09-16 9:27 ` [PATCH 2/4] restart: (build fix hack) define sa_family_t and struct linger Nathan Lynch
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Nathan Lynch @ 2009-09-16 9:27 UTC (permalink / raw)
To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
mktree was renamed to restart; update Makefile accordingly.
Signed-off-by: Nathan Lynch <ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
---
Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/Makefile b/Makefile
index 497648e..8cd0c2d 100644
--- a/Makefile
+++ b/Makefile
@@ -44,7 +44,7 @@ all: $(PROGS)
ckptinfo: ckptinfo_types.o
-mktree: CFLAGS += -D__REENTRANT -pthread
+restart: CFLAGS += -D__REENTRANT -pthread
ckptinfo_types.o: ckptinfo_types.c
@echo $(CC) -c $(CFLAGS) $<
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] restart: (build fix hack) define sa_family_t and struct linger
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
2009-09-16 9:27 ` [PATCH 1/4] fix rename fallout Nathan Lynch
@ 2009-09-16 9:27 ` Nathan Lynch
2009-09-16 9:27 ` [PATCH 3/4] mktree: initial powerpc support hacks Nathan Lynch
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Nathan Lynch @ 2009-09-16 9:27 UTC (permalink / raw)
To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
restart.c doesn't build against exported kernel headers:
$ make CPPFLAGS=-I$PWD/../linux-2.6.git/usr/include
cc -g -Wall -Wstrict-prototypes -Wno-trigraphs -I../linux/include -I../linux/arch//include -DCHECKPOINT_DEBUG -D__REENTRANT -pthread -I/home/nathanl/devel/user-cr.git/../linux-2.6.git/usr/include restart.c clone_ppc32.o -o restart
In file included from /home/nathanl/devel/user-cr.git/../linux-2.6.git/usr/include/linux/checkpoint_hdr.h:16,
from restart.c:42:
/home/nathanl/devel/user-cr.git/../linux-2.6.git/usr/include/linux/un.h:7: error: expected specifier-qualifier-list before ‘sa_family_t’
In file included from restart.c:42:
/home/nathanl/devel/user-cr.git/../linux-2.6.git/usr/include/linux/checkpoint_hdr.h:407: error: field ‘linger’ has incomplete type
make: *** [restart] Error 1
I am not sure what the right fix is. This is not it.
---
restart.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/restart.c b/restart.c
index 2d8d796..b93a2e1 100644
--- a/restart.c
+++ b/restart.c
@@ -10,6 +10,13 @@
#define _GNU_SOURCE
+/* Hacks ahoy */
+typedef unsigned short sa_family_t;
+struct linger {
+ int l_onoff; /* Linger active */
+ int l_linger; /* How long to linger for */
+};
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
--
1.6.0.6
_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] mktree: initial powerpc support hacks
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
2009-09-16 9:27 ` [PATCH 1/4] fix rename fallout Nathan Lynch
2009-09-16 9:27 ` [PATCH 2/4] restart: (build fix hack) define sa_family_t and struct linger Nathan Lynch
@ 2009-09-16 9:27 ` Nathan Lynch
2009-09-16 9:27 ` [PATCH 4/4] makefile hack for powerpc Nathan Lynch
2009-09-16 18:05 ` [PATCH 0/4] user-cr: powerpc support etc Oren Laadan
4 siblings, 0 replies; 6+ messages in thread
From: Nathan Lynch @ 2009-09-16 9:27 UTC (permalink / raw)
To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
---
clone_ppc32.S | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
powerpc_asm.h | 46 +++++++++++++++++++++++++++++++++
restart.c | 24 +++++++++++++++++
3 files changed, 149 insertions(+), 0 deletions(-)
create mode 100644 clone_ppc32.S
create mode 100644 powerpc_asm.h
diff --git a/clone_ppc32.S b/clone_ppc32.S
new file mode 100644
index 0000000..e159b19
--- /dev/null
+++ b/clone_ppc32.S
@@ -0,0 +1,79 @@
+#include <asm/unistd.h>
+#include "powerpc_asm.h"
+
+/* int [r3] clone_with_pids(int (*fn)(void *arg) [r3],
+ * void *child_stack [r4],
+ * int flags [r5],
+ * void *arg [r6],
+ * void *parent_tid [r7],
+ * void *tls [r8],
+ * void *child_tid [r9],
+ * struct target_pid_set *setp [r10]);
+ * Creates a child task with the pids specified by setp.
+ * Returns to parent only, child execution and exit is handled here.
+ * On error, returns negated errno. On success, returns the pid of the child
+ * created.
+ */
+
+ .text
+ .globl __clone_with_pids
+__clone_with_pids:
+
+ /* No argument validation. */
+
+ /* Set up parent's stack frame. */
+ stwu r1,-32(r1)
+
+ /* Save non-volatiles (r28-r31) which we plan to use. */
+ stmw r28,16(r1)
+
+ /* Set up child's stack frame. */
+ clrrwi r4,r4,4
+ li r0,0
+ stw r0,-16(r4)
+
+ /* Save fn, stack pointer, flags, and arg across system call. */
+ mr r28,r3
+ mr r29,r4
+ mr r30,r5
+ mr r31,r6
+
+ /* Set up arguments for system call. Stack pointer is already in r4. */
+ mr r3,r5 /* flags */
+ mr r5,r7 /* parent_tid */
+ mr r6,r8 /* tls */
+ mr r7,r9 /* child_tid */
+ mr r8,r10 /* setp */
+
+ /* Do the system call */
+ li r0,__NR_clone_with_pids
+ sc
+
+ /* Parent or child? */
+ cmpwi cr1,r3,0
+ crandc 4*cr1+eq,4*cr1+eq,4*cr0+so
+ bne cr1,parent
+
+ /* Child. Call fn. */
+ mtctr r28
+ mr r3,r31
+ bctrl
+
+ /* Assume result of fn in r3 and exit. */
+ li r0,__NR_exit
+ sc
+
+parent:
+ /* Restore non-volatiles. */
+ lmw r28,16(r1)
+
+ addi r1,r1,32
+
+ /* Return to caller on success. */
+ bnslr
+
+ /* Handle error. Negate the return value to signal an error
+ * to the caller, which must set errno.
+ */
+ neg r3,r3
+ blr
diff --git a/powerpc_asm.h b/powerpc_asm.h
new file mode 100644
index 0000000..58f459f
--- /dev/null
+++ b/powerpc_asm.h
@@ -0,0 +1,46 @@
+#ifndef __POWERPC_ASM_H
+#define _POWERPC_ASM_H
+
+#define r0 0
+#define r1 1
+#define r2 2
+#define r3 3
+#define r4 4
+#define r5 5
+#define r6 6
+#define r7 7
+#define r8 8
+#define r9 9
+#define r10 10
+#define r11 11
+#define r12 12
+#define r13 13
+#define r14 14
+#define r15 15
+#define r16 16
+#define r17 17
+#define r18 18
+#define r19 19
+#define r20 20
+#define r21 21
+#define r22 22
+#define r23 23
+#define r24 24
+#define r25 25
+#define r26 26
+#define r27 27
+#define r28 28
+#define r29 29
+#define r30 30
+#define r31 31
+
+#define cr0 0
+#define cr1 1
+#define cr2 2
+#define cr3 3
+#define cr4 4
+#define cr5 5
+#define cr6 6
+#define cr7 7
+
+#endif /* _POWERPC_ASM_H */
diff --git a/restart.c b/restart.c
index b93a2e1..499614e 100644
--- a/restart.c
+++ b/restart.c
@@ -1951,6 +1951,30 @@ int clone_with_pids(int (*fn)(void *), void *child_stack, int flags,
return retval;
}
+#elif defined(__powerpc__) && defined(__NR_clone_with_pids)
+
+extern int __clone_with_pids(int (*fn)(void *arg), void *child_stack, int flags,
+ void *arg, void *parent_tid, void *tls,
+ void *child_tid, struct target_pid_set *setp);
+
+static int clone_with_pids(int (*fn)(void *), void *child_stack, int flags,
+ struct target_pid_set *target_pids, void *arg)
+{
+ void *parent_tid = NULL;
+ void *tls = NULL;
+ void *child_tid = NULL;
+ pid_t newpid;
+
+ newpid = __clone_with_pids(fn, child_stack, flags, arg, parent_tid,
+ tls, child_tid, target_pids);
+
+ if (newpid < 0) {
+ errno = -newpid;
+ return -1;
+ }
+
+ return newpid;
+}
#else /* !defined(__NR_clone_with_pids) */
/* on other architectures fallback to regular clone(2) */
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] makefile hack for powerpc
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
` (2 preceding siblings ...)
2009-09-16 9:27 ` [PATCH 3/4] mktree: initial powerpc support hacks Nathan Lynch
@ 2009-09-16 9:27 ` Nathan Lynch
2009-09-16 18:05 ` [PATCH 0/4] user-cr: powerpc support etc Oren Laadan
4 siblings, 0 replies; 6+ messages in thread
From: Nathan Lynch @ 2009-09-16 9:27 UTC (permalink / raw)
To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
Add an explict restart target which links clone_ppc32.o into the
restart executable.
Ideas on how to handle this in a mergeable form are welcome.
---
Makefile | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index 8cd0c2d..10c068c 100644
--- a/Makefile
+++ b/Makefile
@@ -45,6 +45,9 @@ all: $(PROGS)
ckptinfo: ckptinfo_types.o
restart: CFLAGS += -D__REENTRANT -pthread
+# powerpc hack
+restart: restart.c clone_ppc32.o
+ $(CC) $(CFLAGS) $(CPPFLAGS) $^ -o $@
ckptinfo_types.o: ckptinfo_types.c
@echo $(CC) -c $(CFLAGS) $<
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/4] user-cr: powerpc support etc
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
` (3 preceding siblings ...)
2009-09-16 9:27 ` [PATCH 4/4] makefile hack for powerpc Nathan Lynch
@ 2009-09-16 18:05 ` Oren Laadan
4 siblings, 0 replies; 6+ messages in thread
From: Oren Laadan @ 2009-09-16 18:05 UTC (permalink / raw)
To: Nathan Lynch; +Cc: containers-qjLDD68F18O7TbgM5vRIOg
got them .. thanks.
Nathan Lynch wrote:
> Patch 1 is an obvious fix, I think.
>
> The rest is an assortment of hacks I've employed to get this building
> and working on powerpc.
>
> Nathan Lynch (4):
> fix rename fallout
> restart: (build fix hack) define sa_family_t and struct linger
> mktree: initial powerpc support hacks
> makefile hack for powerpc
>
> Makefile | 5 +++-
> clone_ppc32.S | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> powerpc_asm.h | 46 +++++++++++++++++++++++++++++++++
> restart.c | 31 ++++++++++++++++++++++
> 4 files changed, 160 insertions(+), 1 deletions(-)
> create mode 100644 clone_ppc32.S
> create mode 100644 powerpc_asm.h
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-09-16 18:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-16 9:27 [PATCH 0/4] user-cr: powerpc support etc Nathan Lynch
[not found] ` <1253093271-16357-1-git-send-email-ntl-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org>
2009-09-16 9:27 ` [PATCH 1/4] fix rename fallout Nathan Lynch
2009-09-16 9:27 ` [PATCH 2/4] restart: (build fix hack) define sa_family_t and struct linger Nathan Lynch
2009-09-16 9:27 ` [PATCH 3/4] mktree: initial powerpc support hacks Nathan Lynch
2009-09-16 9:27 ` [PATCH 4/4] makefile hack for powerpc Nathan Lynch
2009-09-16 18:05 ` [PATCH 0/4] user-cr: powerpc support etc Oren Laadan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.