This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] SPU Linux syscall


Ken,

You should be modifying Makefile.am and regenerating Makefile.in. You don't ususally include the diff of Makefile.in in the patch.

-- Jeff J.

Ken Werner wrote:
Hi,

this patch adds a __linux_syscall function that allows to issue Linux system calls from the SPU.

libgloss/ChangeLog:

2008-06-07  Ken Werner  <ken.werner@de.ibm.com>
	* spu/Makefile.in: Add new file.
	* spu/linux_syscalls.c: New file to add Linux syscall support.

newlib/ChangeLog:

2008-06-07 Ken Werner <ken.werner@de.ibm.com>

	* libc/machine/spu/sys/linux_syscalls.h: New file to add Linux syscall
	support.

Index: src/libgloss/spu/Makefile.in
===================================================================
--- src.orig/libgloss/spu/Makefile.in
+++ src/libgloss/spu/Makefile.in
@@ -63,7 +63,7 @@ OBJS = \
pread.o pwrite.o read.o readlink.o readv.o rmdir.o sbrk.o \
sched_yield.o shm_open.o shm_unlink.o stat.o symlink.o sync.o \
syscalls.o truncate.o umask.o unlink.o utime.o utimes.o write.o \
- writev.o
+ writev.o linux_syscalls.o
# Object files specific to particular targets.
EVALOBJS = ${OBJS}
Index: src/libgloss/spu/linux_syscalls.c
===================================================================
--- /dev/null
+++ src/libgloss/spu/linux_syscalls.c
@@ -0,0 +1,62 @@
+/*
+(C) Copyright IBM Corp. 2008
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+* Neither the name of IBM nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Author: Ken Werner <ken.werner@de.ibm.com>
+*/
+
+#include "sys/linux_syscalls.h"
+#include <errno.h>
+
+int
+__linux_syscall (struct spu_syscall_block *s)
+{
+ int ret;
+ __vector unsigned int stopfunc = {
+ 0x00002104, /* stop 0x2104 */
+ (unsigned int) s,
+ 0x4020007f, /* nop */
+ 0x35000000 /* bi $0 */
+ };
+
+ void (*f) (void) = (void *) &stopfunc;
+ asm ("sync");
+
+ f ();
+
+ if (s->nr_ret > -4096ull)
+ {
+ errno = -s->nr_ret;
+ ret = -1;
+ }
+ else
+ {
+ ret = s->nr_ret;
+ }
+ return ret;
+}
Index: src/newlib/libc/machine/spu/sys/linux_syscalls.h
===================================================================
--- /dev/null
+++ src/newlib/libc/machine/spu/sys/linux_syscalls.h
@@ -0,0 +1,294 @@
+/*
+(C) Copyright IBM Corp. 2008
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+* Neither the name of IBM nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Author: Ken Werner <ken.werner@de.ibm.com>
+*/
+
+#ifndef __LINUX_SYSCALLS_H
+#define __LINUX_SYSCALLS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The system call numbers. See kernel source file
+ include/asm-powerpc/unistd.h. */
+#define __NR_read 3
+#define __NR_write 4
+#define __NR_open 5
+#define __NR_close 6
+#define __NR_waitpid 7
+#define __NR_creat 8
+#define __NR_link 9
+#define __NR_unlink 10
+
+#define __NR_chdir 12
+#define __NR_time 13
+#define __NR_mkdod 14
+#define __NR_chmod 15
+#define __NR_lchown 16
+
+#define __NR_lseek 19
+#define __NR_getpid 20
+
+#define __NR_setuid 23
+#define __NR_getuid 24
+#define __NR_stime 25
+
+#define __NR_alarm 27
+
+#define __NR_access 33
+#define __NR_nice 34
+
+#define __NR_sync 36
+#define __NR_kill 37
+#define __NR_rename 38
+#define __NR_mkdir 39
+#define __NR_rmdir 40
+#define __NR_dup 41
+#define __NR_pipe 42
+#define __NR_times 43
+
+#define __NR_brk 45
+#define __NR_setgid 46
+#define __NR_getgid 47
+
+#define __NR_geteuid 49
+#define __NR_getegid 50
+
+#define __NR_ioctl 54
+#define __NR_fcntl 55
+
+#define __NR_setpgid 57
+
+#define __NR_umask 60
+#define __NR_chroot 61
+
+#define __NR_dup2 63
+#define __NR_getppid 64
+#define __NR_getpgrp 65
+#define __NR_setsid 66
+
+#define __NR_sgetmask 68
+#define __NR_ssetmask 69
+#define __NR_setreuid 70
+#define __NR_setregid 71
+
+#define __NR_sethostname 74
+#define __NR_setrlimit 75
+
+#define __NR_getrusage 77
+#define __NR_gettimeofday 78
+#define __NR_settimeofday 79
+#define __NR_getgroups 80
+#define __NR_setgroups 81
+
+#define __NR_symlink 83
+
+#define __NR_readlink 85
+
+#define __NR_mmap 90
+#define __NR_munmap 91
+#define __NR_truncate 92
+#define __NR_ftruncate 93
+#define __NR_fchmod 94
+#define __NR_fchown 95
+#define __NR_getpriority 96
+#define __NR_setpriority 97
+
+#define __NR_socketcall 102
+#define __NR_syslog 103
+#define __NR_setitimer 104
+#define __NR_getitimer 105
+#define __NR_newstat 106
+#define __NR_newlstat 107
+#define __NR_newfstat 108
+
+#define __NR_vhangup 111
+
+#define __NR_wait4 114
+
+#define __NR_sysinfo 116
+
+#define __NR_fsync 118
+
+#define __NR_setdomainname 121
+#define __NR_newuname 122
+
+#define __NR_adjtimex 124
+#define __NR_mprotect 125
+
+#define __NR_getpgid 132
+#define __NR_fchdir 133
+#define __NR_bdflush 134
+
+#define __NR_personality 136
+
+#define __NR_setfsuid 138
+#define __NR_setfsgid 139
+#define __NR__llseek 140
+#define __NR_getdents 141
+#define __NR__newselect 142
+#define __NR_flock 143
+#define __NR_msync 144
+#define __NR_readv 145
+#define __NR_writev 146
+#define __NR_getsid 147
+#define __NR_fdatasync 148
+
+#define __NR_mlock 150
+#define __NR_munlock 151
+#define __NR_mlockall 152
+#define __NR_munlockall 153
+#define __NR_sched_setparam 154
+#define __NR_sched_getparam 155
+#define __NR_sched_setscheduler 156
+#define __NR_sched_getscheduler 157
+#define __NR_sched_yield 158
+#define __NR_sched_get_priority_max 159
+#define __NR_sched_get_priority_min 160
+#define __NR_sched_rr_get_interval 161
+#define __NR_nanosleep 162
+#define __NR_mremap 163
+#define __NR_setresuid 164
+#define __NR_getresuid 165
+
+#define __NR_poll 167
+
+#define __NR_setresgid 169
+#define __NR_getresgid 170
+#define __NR_prctl 171
+
+#define __NR_pread64 179
+#define __NR_pwrite64 180
+#define __NR_chown 181
+#define __NR_getcwd 182
+#define __NR_capget 183
+#define __NR_capset 184
+
+#define __NR_sendfile 185
+
+#define __NR_getrlimit 190
+#define __NR_readahead 191
+
+#define __NR_getdents64 202
+#define __NR_pivot_root 203
+
+#define __NR_madvise 205
+#define __NR_mincore 206
+#define __NR_gettid 207
+#define __NR_tkill 208
+#define __NR_setxattr 209
+#define __NR_lsetxattr 210
+#define __NR_fsetxattr 211
+#define __NR_getxattr 212
+#define __NR_lgetxattr 213
+#define __NR_fgetxattr 214
+#define __NR_listxattr 215
+#define __NR_llistxattr 216
+#define __NR_flistxattr 217
+#define __NR_removexattr 218
+#define __NR_lremovexattr 219
+#define __NR_fremovexattr 220
+#define __NR_futex 221
+#define __NR_sched_setaffinity 222
+#define __NR_sched_getaffinity 223
+
+#define __NR_io_setup 227
+#define __NR_io_destroy 228
+#define __NR_io_getevents 229
+#define __NR_io_submit 230
+#define __NR_io_cancel 231
+
+#define __NR_fadvise64 233
+
+#define __NR_epoll_create 236
+#define __NR_epoll_ctl 237
+#define __NR_epoll_wait 238
+#define __NR_remap_file_pages 239
+#define __NR_timer_create 240
+#define __NR_timer_settime 241
+#define __NR_timer_gettime 242
+#define __NR_timer_getoverrun 243
+#define __NR_timer_delete 244
+#define __NR_clock_settime 245
+#define __NR_clock_gettime 246
+#define __NR_clock_getres 247
+#define __NR_clock_nanosleep 248
+
+#define __NR_tgkill 250
+#define __NR_utimes 251
+#define __NR_statfs64 252
+#define __NR_fstatfs64 253
+
+#define __NR_rtas 255
+
+#define __NR_unshare 282
+#define __NR_splice 283
+#define __NR_tee 284
+#define __NR_vmsplice 285
+#define __NR_openat 286
+#define __NR_mkdirat 287
+#define __NR_mknodat 288
+#define __NR_fchownat 289
+#define __NR_futimesat 290
+#define __NR_fstatat64 291
+#define __NR_unlinkat 292
+#define __NR_renameat 293
+#define __NR_linkat 294
+#define __NR_symlinkat 295
+#define __NR_readlinkat 296
+#define __NR_fchmodat 297
+#define __NR_faccessat 298
+#define __NR_get_robust_list 299
+#define __NR_set_robust_list 300
+#define __NR_move_pages 301
+#define __NR_getcpu 302
+
+#define __NR_utimensat 304
+#define __NR_signalfd 305
+#define __NR_timerfd 306
+#define __NR_eventfd 307
+#define __NR_sync_file_range2 308
+
+
+/* System callbacks from the SPU. See kernel source file
+ include/asm-powerpc/spu.h. */
+struct spu_syscall_block
+{
+ unsigned long long nr_ret; /* System call nr and return value. */
+ unsigned long long parm[6]; /* System call arguments. */
+};
+
+/* Issues a Linux system call. */
+int __linux_syscall (struct spu_syscall_block *s);
+
+#ifdef __cplusplus
+}
+#endif
+#endif


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]