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] libgloss/arm: Add linux syscall interface.


Patch checked in.

-- Jeff J.

Shaun Jackman wrote:
On 5/19/06, Jeff Johnston <jjohnstn@redhat.com> wrote:

Shaun,

   Please resubmit this patch (and all subsequent patches) as attached
files.  I attempted saving your mail (which has the patch part in
BASE64) and converting it using a base64 utility.  The patch is
malformed, probably due to added line breaks for longer lines.  That's
as far as I go.

When you resubmit it, I'll check it in.

-- Jeff J.


Sorry for the difficulties. Please find an updated patch attached.

Cheers,
Shaun

2006-05-25 Shaun Jackman <sjackman@gmail.com>

      * arm/Makefile.in: Add Linux syscall interface.
      * arm/linux-crt0.S: New file.
      * arm/linux-syscall.h: New file.
      * arm/linux-syscalls0.S: New file.
      * arm/linux-syscalls1.c: New file.

Index: arm/Makefile.in
===================================================================
RCS file: /cvs/src/src/libgloss/arm/Makefile.in,v
retrieving revision 1.6
diff -u -r1.6 Makefile.in
--- arm/Makefile.in    13 Apr 2005 00:01:40 -0000    1.6
+++ arm/Makefile.in    25 May 2006 19:49:53 -0000
@@ -53,6 +53,12 @@
@BUILD_CRT0_FALSE@CRT0        =
@BUILD_CRT0_FALSE@CRT0_INSTALL    =

+LINUX_CRT0    = linux-crt0.o
+LINUX_BSP     = libgloss-linux.a
+LINUX_OBJS    = linux-syscalls0.o linux-syscalls1.o
+LINUX_SCRIPTS = linux.specs
+LINUX_INSTALL = install-linux
+
REDBOOT_CRT0    = redboot-crt0.o
REDBOOT_OBJS    = redboot-syscalls.o
REDBOOT_SCRIPTS    = redboot.ld redboot.specs
@@ -87,7 +93,7 @@
# build a test program for each target board. Just trying to get
# it to link is a good test, so we ignore all the errors for now.
#
-all: ${CRT0} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0}
${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP}
+all: ${CRT0} ${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0}
${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0}
${RDIMON_BSP}

#
# here's where we build the test programs for each target
@@ -115,6 +121,10 @@
rdimon-libcfunc.o: libcfunc.c
    $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<

+$(LINUX_BSP): $(LINUX_OBJS)
+    ${AR} ${ARFLAGS} $@ $^
+    ${RANLIB} $@
+
$(RDPMON_BSP): $(RDPMON_OBJS)
    ${AR} ${ARFLAGS} $@ $^
    ${RANLIB} $@
@@ -130,11 +140,15 @@
    rm -f Makefile config.status *~

.PHONY: install info install-info clean-info
-install: ${CRT0_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL}
${RDIMON_INSTALL} ${IQ80310_INSTALL}  ${PID_INSTALL}
+install: ${CRT0_INSTALL} ${LINUX_INSTALL} ${REDBOOT_INSTALL}
${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL}  ${PID_INSTALL}

install-crt0:
    ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x

+install-linux:
+    set -e; for x in ${LINUX_CRT0} ${LINUX_BSP}; do ${INSTALL_DATA} $$x
$(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+    set -e; for x in ${LINUX_SCRIPTS}; do ${INSTALL_DATA}
${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x;
done
+
install-redboot:
    set -e; for x in ${REDBOOT_CRT0} ${REDBOOT_OBJS}; do ${INSTALL_DATA}
$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
    set -e; for x in ${REDBOOT_SCRIPTS}; do ${INSTALL_DATA}
${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x;
done
--- /dev/null    2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-crt0.S    2006-03-28 16:32:28.000000000 -0700
@@ -0,0 +1,46 @@
+/** Linux startup code for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+.global _start
+.type _start, %function
+_start:
+#if __thumb__
+    /* Switch to Thumb mode. */
+    adr r0, _start_thumb+1
+    bx r0
+.size _start, .-_start
+.global _start_thumb
+.thumb_func
+_start_thumb:
+#endif
+
+#if 0
+    /* Clear the BSS. This task is normally handled by the kernel. */
+    ldr r0, =__bss_start
+    mov r1, #0
+    ldr r2, =_end
+    sub r2, r2, r0
+    bl memset
+#endif
+
+    pop {r0} @ argc
+    mov r1, sp @ argv
+    lsl r2, r0, #2
+    add r2, r1
+    add r2, #4 @ envp
+    ldr r3, =environ
+    str r2, [r3]
+    bl main
+    bl exit
+    b .
+
+#if __thumb__
+.size _start_thumb, .-_start_thumb
+#else
+.size _start, .-_start
+#endif
--- /dev/null    2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscall.h    2006-05-25 13:48:19.000000000 -0600
@@ -0,0 +1,318 @@
+/** Linux system call numbers for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#ifndef _LIBGLOSS_ARM_LINUX_UNISTD_H
+#define _LIBGLOSS_ARM_LINUX_UNISTD_H
+
+#if __thumb__
+# define SYS_BASE 0
+#else
+# define SYS_BASE 0x900000
+#endif
+
+#define SYS_restart_syscall        (SYS_BASE+  0)
+#define SYS_exit                   (SYS_BASE+  1)
+#define SYS_fork                   (SYS_BASE+  2)
+#define SYS_read                   (SYS_BASE+  3)
+#define SYS_write                  (SYS_BASE+  4)
+#define SYS_open                   (SYS_BASE+  5)
+#define SYS_close                  (SYS_BASE+  6)
+/*      SYS_waitpid                was         7 */
+#define SYS_creat                  (SYS_BASE+  8)
+#define SYS_link                   (SYS_BASE+  9)
+#define SYS_unlink                 (SYS_BASE+ 10)
+#define SYS_execve                 (SYS_BASE+ 11)
+#define SYS_chdir                  (SYS_BASE+ 12)
+#define SYS_time                   (SYS_BASE+ 13)
+#define SYS_mknod                  (SYS_BASE+ 14)
+#define SYS_chmod                  (SYS_BASE+ 15)
+#define SYS_lchown                 (SYS_BASE+ 16)
+/*      SYS_break                  was        17 */
+/*      SYS_stat                   was        18 */
+#define SYS_lseek                  (SYS_BASE+ 19)
+#define SYS_getpid                 (SYS_BASE+ 20)
+#define SYS_mount                  (SYS_BASE+ 21)
+#define SYS_umount                 (SYS_BASE+ 22)
+#define SYS_setuid                 (SYS_BASE+ 23)
+#define SYS_getuid                 (SYS_BASE+ 24)
+#define SYS_stime                  (SYS_BASE+ 25)
+#define SYS_ptrace                 (SYS_BASE+ 26)
+#define SYS_alarm                  (SYS_BASE+ 27)
+/*      SYS_fstat                  was        28 */
+#define SYS_pause                  (SYS_BASE+ 29)
+#define SYS_utime                  (SYS_BASE+ 30)
+/*      SYS_stty                   was        31 */
+/*      SYS_gtty                   was        32 */
+#define SYS_access                 (SYS_BASE+ 33)
+#define SYS_nice                   (SYS_BASE+ 34)
+/*      SYS_ftime                  was        35 */
+#define SYS_sync                   (SYS_BASE+ 36)
+#define SYS_kill                   (SYS_BASE+ 37)
+#define SYS_rename                 (SYS_BASE+ 38)
+#define SYS_mkdir                  (SYS_BASE+ 39)
+#define SYS_rmdir                  (SYS_BASE+ 40)
+#define SYS_dup                    (SYS_BASE+ 41)
+#define SYS_pipe                   (SYS_BASE+ 42)
+#define SYS_times                  (SYS_BASE+ 43)
+/*      SYS_prof                   was        44 */
+#define SYS_brk                    (SYS_BASE+ 45)
+#define SYS_setgid                 (SYS_BASE+ 46)
+#define SYS_getgid                 (SYS_BASE+ 47)
+/*      SYS_signal                 was        48 */
+#define SYS_geteuid                (SYS_BASE+ 49)
+#define SYS_getegid                (SYS_BASE+ 50)
+#define SYS_acct                   (SYS_BASE+ 51)
+#define SYS_umount2                (SYS_BASE+ 52)
+/*      SYS_lock                   was        53 */
+#define SYS_ioctl                  (SYS_BASE+ 54)
+#define SYS_fcntl                  (SYS_BASE+ 55)
+/*      SYS_mpx                    was        56 */
+#define SYS_setpgid                (SYS_BASE+ 57)
+/*      SYS_ulimit                 was        58 */
+/*      SYS_olduname               was        59 */
+#define SYS_umask                  (SYS_BASE+ 60)
+#define SYS_chroot                 (SYS_BASE+ 61)
+#define SYS_ustat                  (SYS_BASE+ 62)
+#define SYS_dup2                   (SYS_BASE+ 63)
+#define SYS_getppid                (SYS_BASE+ 64)
+#define SYS_getpgrp                (SYS_BASE+ 65)
+#define SYS_setsid                 (SYS_BASE+ 66)
+#define SYS_sigaction              (SYS_BASE+ 67)
+/*      SYS_sgetmask               was        68 */
+/*      SYS_ssetmask               was        69 */
+#define SYS_setreuid               (SYS_BASE+ 70)
+#define SYS_setregid               (SYS_BASE+ 71)
+#define SYS_sigsuspend             (SYS_BASE+ 72)
+#define SYS_sigpending             (SYS_BASE+ 73)
+#define SYS_sethostname            (SYS_BASE+ 74)
+#define SYS_setrlimit              (SYS_BASE+ 75)
+#define SYS_getrlimit              (SYS_BASE+ 76)
+#define SYS_getrusage              (SYS_BASE+ 77)
+#define SYS_gettimeofday           (SYS_BASE+ 78)
+#define SYS_settimeofday           (SYS_BASE+ 79)
+#define SYS_getgroups              (SYS_BASE+ 80)
+#define SYS_setgroups              (SYS_BASE+ 81)
+#define SYS_select                 (SYS_BASE+ 82)
+#define SYS_symlink                (SYS_BASE+ 83)
+/*      SYS_lstat                  was        84 */
+#define SYS_readlink               (SYS_BASE+ 85)
+#define SYS_uselib                 (SYS_BASE+ 86)
+#define SYS_swapon                 (SYS_BASE+ 87)
+#define SYS_reboot                 (SYS_BASE+ 88)
+#define SYS_readdir                (SYS_BASE+ 89)
+#define SYS_mmap                   (SYS_BASE+ 90)
+#define SYS_munmap                 (SYS_BASE+ 91)
+#define SYS_truncate               (SYS_BASE+ 92)
+#define SYS_ftruncate              (SYS_BASE+ 93)
+#define SYS_fchmod                 (SYS_BASE+ 94)
+#define SYS_fchown                 (SYS_BASE+ 95)
+#define SYS_getpriority            (SYS_BASE+ 96)
+#define SYS_setpriority            (SYS_BASE+ 97)
+/*      SYS_profil                 was        98 */
+#define SYS_statfs                 (SYS_BASE+ 99)
+#define SYS_fstatfs                (SYS_BASE+100)
+/*      SYS_ioperm                 was       101 */
+#define SYS_socketcall             (SYS_BASE+102)
+#define SYS_syslog                 (SYS_BASE+103)
+#define SYS_setitimer              (SYS_BASE+104)
+#define SYS_getitimer              (SYS_BASE+105)
+#define SYS_stat                   (SYS_BASE+106)
+#define SYS_lstat                  (SYS_BASE+107)
+#define SYS_fstat                  (SYS_BASE+108)
+/*      SYS_uname                  was       109 */
+/*      SYS_iopl                   was       110 */
+#define SYS_vhangup                (SYS_BASE+111)
+/*      SYS_idle                   was       112 */
+#define SYS_syscall                (SYS_BASE+113)
+#define SYS_wait4                  (SYS_BASE+114)
+#define SYS_swapoff                (SYS_BASE+115)
+#define SYS_sysinfo                (SYS_BASE+116)
+#define SYS_ipc                    (SYS_BASE+117)
+#define SYS_fsync                  (SYS_BASE+118)
+#define SYS_sigreturn              (SYS_BASE+119)
+#define SYS_clone                  (SYS_BASE+120)
+#define SYS_setdomainname          (SYS_BASE+121)
+#define SYS_uname                  (SYS_BASE+122)
+/*      SYS_modify_ldt             was       123 */
+#define SYS_adjtimex               (SYS_BASE+124)
+#define SYS_mprotect               (SYS_BASE+125)
+#define SYS_sigprocmask            (SYS_BASE+126)
+/*      SYS_create_module          was       127 */
+#define SYS_init_module            (SYS_BASE+128)
+#define SYS_delete_module          (SYS_BASE+129)
+/*      SYS_get_kernel_syms        was       130 */
+#define SYS_quotactl               (SYS_BASE+131)
+#define SYS_getpgid                (SYS_BASE+132)
+#define SYS_fchdir                 (SYS_BASE+133)
+#define SYS_bdflush                (SYS_BASE+134)
+#define SYS_sysfs                  (SYS_BASE+135)
+#define SYS_personality            (SYS_BASE+136)
+/*      SYS_afs_syscall            was       137 */
+#define SYS_setfsuid               (SYS_BASE+138)
+#define SYS_setfsgid               (SYS_BASE+139)
+#define SYS__llseek                (SYS_BASE+140)
+#define SYS_getdents               (SYS_BASE+141)
+#define SYS__newselect             (SYS_BASE+142)
+#define SYS_flock                  (SYS_BASE+143)
+#define SYS_msync                  (SYS_BASE+144)
+#define SYS_readv                  (SYS_BASE+145)
+#define SYS_writev                 (SYS_BASE+146)
+#define SYS_getsid                 (SYS_BASE+147)
+#define SYS_fdatasync              (SYS_BASE+148)
+#define SYS__sysctl                (SYS_BASE+149)
+#define SYS_mlock                  (SYS_BASE+150)
+#define SYS_munlock                (SYS_BASE+151)
+#define SYS_mlockall               (SYS_BASE+152)
+#define SYS_munlockall             (SYS_BASE+153)
+#define SYS_sched_setparam         (SYS_BASE+154)
+#define SYS_sched_getparam         (SYS_BASE+155)
+#define SYS_sched_setscheduler     (SYS_BASE+156)
+#define SYS_sched_getscheduler     (SYS_BASE+157)
+#define SYS_sched_yield            (SYS_BASE+158)
+#define SYS_sched_get_priority_max (SYS_BASE+159)
+#define SYS_sched_get_priority_min (SYS_BASE+160)
+#define SYS_sched_rr_get_interval  (SYS_BASE+161)
+#define SYS_nanosleep              (SYS_BASE+162)
+#define SYS_mremap                 (SYS_BASE+163)
+#define SYS_setresuid              (SYS_BASE+164)
+#define SYS_getresuid              (SYS_BASE+165)
+/*      SYS_vm86                   was       166 */
+/*      SYS_query_module           was       167 */
+#define SYS_poll                   (SYS_BASE+168)
+#define SYS_nfsservctl             (SYS_BASE+169)
+#define SYS_setresgid              (SYS_BASE+170)
+#define SYS_getresgid              (SYS_BASE+171)
+#define SYS_prctl                  (SYS_BASE+172)
+#define SYS_rt_sigreturn           (SYS_BASE+173)
+#define SYS_rt_sigaction           (SYS_BASE+174)
+#define SYS_rt_sigprocmask         (SYS_BASE+175)
+#define SYS_rt_sigpending          (SYS_BASE+176)
+#define SYS_rt_sigtimedwait        (SYS_BASE+177)
+#define SYS_rt_sigqueueinfo        (SYS_BASE+178)
+#define SYS_rt_sigsuspend          (SYS_BASE+179)
+#define SYS_pread64                (SYS_BASE+180)
+#define SYS_pwrite64               (SYS_BASE+181)
+#define SYS_chown                  (SYS_BASE+182)
+#define SYS_getcwd                 (SYS_BASE+183)
+#define SYS_capget                 (SYS_BASE+184)
+#define SYS_capset                 (SYS_BASE+185)
+#define SYS_sigaltstack            (SYS_BASE+186)
+#define SYS_sendfile               (SYS_BASE+187)
+/*                                 reserved  188 */
+/*                                 reserved  189 */
+#define SYS_vfork                  (SYS_BASE+190)
+#define SYS_ugetrlimit             (SYS_BASE+191)
+#define SYS_mmap2                  (SYS_BASE+192)
+#define SYS_truncate64             (SYS_BASE+193)
+#define SYS_ftruncate64            (SYS_BASE+194)
+#define SYS_stat64                 (SYS_BASE+195)
+#define SYS_lstat64                (SYS_BASE+196)
+#define SYS_fstat64                (SYS_BASE+197)
+#define SYS_lchown32               (SYS_BASE+198)
+#define SYS_getuid32               (SYS_BASE+199)
+#define SYS_getgid32               (SYS_BASE+200)
+#define SYS_geteuid32              (SYS_BASE+201)
+#define SYS_getegid32              (SYS_BASE+202)
+#define SYS_setreuid32             (SYS_BASE+203)
+#define SYS_setregid32             (SYS_BASE+204)
+#define SYS_getgroups32            (SYS_BASE+205)
+#define SYS_setgroups32            (SYS_BASE+206)
+#define SYS_fchown32               (SYS_BASE+207)
+#define SYS_setresuid32            (SYS_BASE+208)
+#define SYS_getresuid32            (SYS_BASE+209)
+#define SYS_setresgid32            (SYS_BASE+210)
+#define SYS_getresgid32            (SYS_BASE+211)
+#define SYS_chown32                (SYS_BASE+212)
+#define SYS_setuid32               (SYS_BASE+213)
+#define SYS_setgid32               (SYS_BASE+214)
+#define SYS_setfsuid32             (SYS_BASE+215)
+#define SYS_setfsgid32             (SYS_BASE+216)
+#define SYS_getdents64             (SYS_BASE+217)
+#define SYS_pivot_root             (SYS_BASE+218)
+#define SYS_mincore                (SYS_BASE+219)
+#define SYS_madvise                (SYS_BASE+220)
+#define SYS_fcntl64                (SYS_BASE+221)
+/*      SYS_tux                    reserved  222 */
+/*                                 unused    223 */
+#define SYS_gettid                 (SYS_BASE+224)
+#define SYS_readahead              (SYS_BASE+225)
+#define SYS_setxattr               (SYS_BASE+226)
+#define SYS_lsetxattr              (SYS_BASE+227)
+#define SYS_fsetxattr              (SYS_BASE+228)
+#define SYS_getxattr               (SYS_BASE+229)
+#define SYS_lgetxattr              (SYS_BASE+230)
+#define SYS_fgetxattr              (SYS_BASE+231)
+#define SYS_listxattr              (SYS_BASE+232)
+#define SYS_llistxattr             (SYS_BASE+233)
+#define SYS_flistxattr             (SYS_BASE+234)
+#define SYS_removexattr            (SYS_BASE+235)
+#define SYS_lremovexattr           (SYS_BASE+236)
+#define SYS_fremovexattr           (SYS_BASE+237)
+#define SYS_tkill                  (SYS_BASE+238)
+#define SYS_sendfile64             (SYS_BASE+239)
+#define SYS_futex                  (SYS_BASE+240)
+#define SYS_sched_setaffinity      (SYS_BASE+241)
+#define SYS_sched_getaffinity      (SYS_BASE+242)
+#define SYS_io_setup               (SYS_BASE+243)
+#define SYS_io_destroy             (SYS_BASE+244)
+#define SYS_io_getevents           (SYS_BASE+245)
+#define SYS_io_submit              (SYS_BASE+246)
+#define SYS_io_cancel              (SYS_BASE+247)
+#define SYS_exit_group             (SYS_BASE+248)
+#define SYS_lookup_dcookie         (SYS_BASE+249)
+#define SYS_epoll_create           (SYS_BASE+250)
+#define SYS_epoll_ctl              (SYS_BASE+251)
+#define SYS_epoll_wait             (SYS_BASE+252)
+#define SYS_remap_file_pages       (SYS_BASE+253)
+/*      SYS_set_thread_area        reserved  254 */
+/*      SYS_get_thread_area        reserved  255 */
+#define SYS_set_tid_address        (SYS_BASE+256)
+#define SYS_timer_create           (SYS_BASE+257)
+#define SYS_timer_settime          (SYS_BASE+258)
+#define SYS_timer_gettime          (SYS_BASE+259)
+#define SYS_timer_getoverrun       (SYS_BASE+260)
+#define SYS_timer_delete           (SYS_BASE+261)
+#define SYS_clock_settime          (SYS_BASE+262)
+#define SYS_clock_gettime          (SYS_BASE+263)
+#define SYS_clock_getres           (SYS_BASE+264)
+#define SYS_clock_nanosleep        (SYS_BASE+265)
+#define SYS_statfs64               (SYS_BASE+266)
+#define SYS_fstatfs64              (SYS_BASE+267)
+#define SYS_tgkill                 (SYS_BASE+268)
+#define SYS_utimes                 (SYS_BASE+269)
+#define SYS_arm_fadvise64_64       (SYS_BASE+270)
+#define SYS_pciconfig_iobase       (SYS_BASE+271)
+#define SYS_pciconfig_read         (SYS_BASE+272)
+#define SYS_pciconfig_write        (SYS_BASE+273)
+#define SYS_mq_open                (SYS_BASE+274)
+#define SYS_mq_unlink              (SYS_BASE+275)
+#define SYS_mq_timedsend           (SYS_BASE+276)
+#define SYS_mq_timedreceive        (SYS_BASE+277)
+#define SYS_mq_notify              (SYS_BASE+278)
+#define SYS_mq_getsetattr          (SYS_BASE+279)
+#define SYS_waitid                 (SYS_BASE+280)
+
+#define SYS_SOCKET      1
+#define SYS_BIND        2
+#define SYS_CONNECT     3
+#define SYS_LISTEN      4
+#define SYS_ACCEPT      5
+#define SYS_GETSOCKNAME 6
+#define SYS_GETPEERNAME 7
+#define SYS_SOCKETPAIR  8
+#define SYS_SEND        9
+#define SYS_RECV        10
+#define SYS_SENDTO      11
+#define SYS_RECVFROM    12
+#define SYS_SHUTDOWN    13
+#define SYS_SETSOCKOPT  14
+#define SYS_GETSOCKOPT  15
+#define SYS_SENDMSG     16
+#define SYS_RECVMSG     17
+
+#endif /* _LIBGLOSS_ARM_LINUX_UNISTD_H */
--- /dev/null    2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscalls0.S    2006-05-12 17:18:21.000000000 -0600
@@ -0,0 +1,196 @@
+/** Linux system call interface for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include "linux-syscall.h"
+
+#if __thumb__
+# define FUNC(name) .type name, %function; .thumb_func; name:
+# define SET .thumb_set
+#else
+# define FUNC(name) .type name, %function; name:
+# define SET .set
+#endif
+
+#define GLOBAL(name) .global name; FUNC(name)
+#define SIZE(name) .size name, .-name
+
+#if __thumb__
+
+# define SYSCALL0(name) \
+    GLOBAL(_ ## name); \
+    mov r12, r7; \
+    mov r7, #SYS_ ## name; \
+    swi; \
+    mov r7, r12; \
+    b _set_errno; \
+    SIZE(_ ## name)
+
+/* static int _syscall3(int a, int b, int c, int number); */
+FUNC(_syscall3)
+    push { r7 }
+    mov r7, r3
+    swi
+    pop { r7 }
+    b _set_errno
+    SIZE(_syscall3)
+
+# define SYSCALL3(name) \
+    GLOBAL(_ ## name); \
+    mov r3, #SYS_ ## name; \
+    b _syscall3; \
+    SIZE(_ ## name)
+
+# define SYSCALL6(name) \
+    GLOBAL(_ ## name); \
+    push { r4 - r5, r7 }; \
+    ldr r4, [sp, #12]; \
+    ldr r5, [sp, #16]; \
+    mov r7, #SYS_ ## name; \
+    swi; \
+    pop { r4 - r5, r7 }; \
+    b _set_errno; \
+    SIZE(_ ## name)
+
+# define SYSCALL4(name) SYSCALL6(name)
+
+#else /* __thumb__ */
+
+# define SYSCALL4(name) \
+    GLOBAL(_ ## name); \
+    swi #SYS_ ## name; \
+    b _set_errno; \
+    SIZE(_ ## name)
+
+# define SYSCALL6(name) \
+    GLOBAL(_ ## name); \
+    push { r4 - r5 }; \
+    ldr r4, [sp, #8]; \
+    ldr r5, [sp, #12]; \
+    swi #SYS_ ## name; \
+    pop { r4 - r5 }; \
+    b _set_errno; \
+    SIZE(_ ## name)
+
+#define SYSCALL0(name) SYSCALL3(name)
+#define SYSCALL3(name) SYSCALL4(name)
+
+#endif /* __thumb__ */
+
+#define SYSCALL1(name) SYSCALL3(name)
+#define SYSCALL2(name) SYSCALL3(name)
+#define SYSCALL5(name) SYSCALL6(name)
+
+SYSCALL1(alarm)
+SYSCALL1(brk)
+SYSCALL1(chdir)
+SYSCALL2(chmod)
+SYSCALL3(chown)
+SYSCALL1(close)
+SYSCALL1(dup)
+SYSCALL2(dup2)
+SYSCALL3(execve)
+SYSCALL1(exit)
+SYSCALL3(fcntl)
+SYSCALL2(fstat)
+SYSCALL3(getdents)
+SYSCALL0(getpid)
+SYSCALL2(gettimeofday)
+SYSCALL3(ioctl)
+SYSCALL2(kill)
+SYSCALL2(link)
+SYSCALL3(lseek)
+SYSCALL2(lstat)
+SYSCALL2(mkdir)
+SYSCALL3(mknod)
+SYSCALL2(nanosleep)
+SYSCALL3(open)
+SYSCALL3(read)
+SYSCALL3(readlink)
+SYSCALL4(reboot)
+SYSCALL1(rmdir)
+SYSCALL5(select)
+SYSCALL2(socketcall)
+SYSCALL2(stat)
+SYSCALL1(stime)
+SYSCALL2(symlink)
+SYSCALL1(sysinfo)
+SYSCALL1(times)
+SYSCALL2(truncate)
+SYSCALL1(umask)
+SYSCALL1(unlink)
+SYSCALL2(utime)
+SYSCALL0(vfork)
+SYSCALL4(wait4)
+SYSCALL3(write)
+
+#define ALIAS(name) .GLOBAL name; SET name, _ ## name
+
+ALIAS(alarm)
+ALIAS(chdir)
+ALIAS(chmod)
+ALIAS(chown)
+ALIAS(dup)
+ALIAS(dup2)
+ALIAS(getdents)
+ALIAS(ioctl)
+ALIAS(lstat)
+ALIAS(mkdir)
+ALIAS(mknod)
+ALIAS(nanosleep)
+ALIAS(readlink)
+ALIAS(reboot)
+ALIAS(rmdir)
+ALIAS(select)
+ALIAS(stime)
+ALIAS(symlink)
+ALIAS(sysinfo)
+ALIAS(truncate)
+ALIAS(umask)
+ALIAS(utime)
+ALIAS(vfork)
+ALIAS(wait4)
+
+# define SOCKETCALL(name, NAME) \
+    GLOBAL(name); \
+    push { r0 - r3 }; \
+    mov r0, #SYS_ ## NAME; \
+    b _socketcall_tail; \
+    SIZE(name)
+
+FUNC(_socketcall_tail)
+    mov r1, sp
+    push { lr }
+    bl _socketcall
+    pop { r3 }
+    add sp, #16
+    bx r3
+    SIZE(_socketcall_tail)
+
+#define SOCKETCALL2(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL3(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL4(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL5(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL6(name, NAME) SOCKETCALL(name, NAME)
+
+SOCKETCALL3(accept, ACCEPT)
+SOCKETCALL3(bind, BIND)
+SOCKETCALL3(connect, CONNECT)
+SOCKETCALL3(getpeername, GETPEERNAME)
+SOCKETCALL3(getsockname, GETSOCKNAME)
+SOCKETCALL5(getsockopt, GETSOCKOPT)
+SOCKETCALL2(listen, LISTEN)
+SOCKETCALL4(recv, RECV)
+SOCKETCALL6(recvfrom, RECVFROM)
+SOCKETCALL3(recvmsg, RECVMSG)
+SOCKETCALL4(send, SEND)
+SOCKETCALL3(sendmsg, SENDMSG)
+SOCKETCALL6(sendto, SENDTO)
+SOCKETCALL5(setsockopt, SETSOCKOPT)
+SOCKETCALL2(shutdown, SHUTDOWN)
+SOCKETCALL3(socket, SOCKET)
+SOCKETCALL4(socketpair, SOCKETPAIR)
--- /dev/null    2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscalls1.c    2006-05-05 19:56:41.000000000 -0600
@@ -0,0 +1,64 @@
+/** Linux system call interface.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <stdint.h>
+
+extern char _end[];
+static void *curbrk = _end;
+
+extern void *_brk(void *addr);
+
+int brk(void *addr)
+{
+    void *newbrk;
+    if (curbrk == addr)
+        return 0;
+    newbrk = _brk(addr);
+    curbrk = newbrk;
+    if (newbrk < addr) {
+        errno = ENOMEM;
+        return -1;
+    }
+    return 0;
+}
+
+void *_sbrk(intptr_t incr)
+{
+    void *oldbrk = curbrk;
+    if (brk(oldbrk + incr) == -1)
+        return (void *)-1;
+    return oldbrk;
+}
+
+void *sbrk(intptr_t incr) __attribute__((alias("_sbrk")));
+
+int _set_errno(int n)
+{
+    if (n < 0) {
+        errno = -n;
+        return -1;
+    }
+    return n;
+}
+
+#include <sys/wait.h>
+
+struct rusage;
+
+pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
+
+pid_t _wait(int *status)
+{
+    return wait4(-1, status, 0, NULL);
+}
+
+pid_t waitpid(pid_t pid, int *status, int options)
+{
+    return wait4(pid, status, options, NULL);
+}


------------------------------------------------------------------------


2006-05-25 Shaun Jackman <sjackman@gmail.com>

       * arm/Makefile.in: Add Linux syscall interface.
       * arm/linux-crt0.S: New file.
       * arm/linux-syscall.h: New file.
       * arm/linux-syscalls0.S: New file.
       * arm/linux-syscalls1.c: New file.

Index: arm/Makefile.in
===================================================================
RCS file: /cvs/src/src/libgloss/arm/Makefile.in,v
retrieving revision 1.6
diff -u -r1.6 Makefile.in
--- arm/Makefile.in 13 Apr 2005 00:01:40 -0000 1.6
+++ arm/Makefile.in 25 May 2006 19:49:53 -0000
@@ -53,6 +53,12 @@
@BUILD_CRT0_FALSE@CRT0 = @BUILD_CRT0_FALSE@CRT0_INSTALL = +LINUX_CRT0 = linux-crt0.o
+LINUX_BSP = libgloss-linux.a
+LINUX_OBJS = linux-syscalls0.o linux-syscalls1.o
+LINUX_SCRIPTS = linux.specs
+LINUX_INSTALL = install-linux
+
REDBOOT_CRT0 = redboot-crt0.o REDBOOT_OBJS = redboot-syscalls.o
REDBOOT_SCRIPTS = redboot.ld redboot.specs
@@ -87,7 +93,7 @@
# build a test program for each target board. Just trying to get
# it to link is a good test, so we ignore all the errors for now.
#
-all: ${CRT0} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP}
+all: ${CRT0} ${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP}
#
# here's where we build the test programs for each target
@@ -115,6 +121,10 @@
rdimon-libcfunc.o: libcfunc.c
$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+$(LINUX_BSP): $(LINUX_OBJS)
+ ${AR} ${ARFLAGS} $@ $^
+ ${RANLIB} $@
+
$(RDPMON_BSP): $(RDPMON_OBJS)
${AR} ${ARFLAGS} $@ $^
${RANLIB} $@
@@ -130,11 +140,15 @@
rm -f Makefile config.status *~
.PHONY: install info install-info clean-info
-install: ${CRT0_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL} ${PID_INSTALL}
+install: ${CRT0_INSTALL} ${LINUX_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL} ${PID_INSTALL}
install-crt0:
${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x
+install-linux:
+ set -e; for x in ${LINUX_CRT0} ${LINUX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+ set -e; for x in ${LINUX_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+
install-redboot:
set -e; for x in ${REDBOOT_CRT0} ${REDBOOT_OBJS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
set -e; for x in ${REDBOOT_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
--- /dev/null 2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-crt0.S 2006-03-28 16:32:28.000000000 -0700
@@ -0,0 +1,46 @@
+/** Linux startup code for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+.global _start
+.type _start, %function
+_start:
+#if __thumb__
+ /* Switch to Thumb mode. */
+ adr r0, _start_thumb+1
+ bx r0
+.size _start, .-_start
+.global _start_thumb
+.thumb_func
+_start_thumb:
+#endif
+
+#if 0
+ /* Clear the BSS. This task is normally handled by the kernel. */
+ ldr r0, =__bss_start
+ mov r1, #0
+ ldr r2, =_end
+ sub r2, r2, r0
+ bl memset
+#endif
+
+ pop {r0} @ argc
+ mov r1, sp @ argv
+ lsl r2, r0, #2
+ add r2, r1
+ add r2, #4 @ envp
+ ldr r3, =environ
+ str r2, [r3]
+ bl main
+ bl exit
+ b .
+
+#if __thumb__
+.size _start_thumb, .-_start_thumb
+#else
+.size _start, .-_start
+#endif
--- /dev/null 2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscall.h 2006-05-25 13:48:19.000000000 -0600
@@ -0,0 +1,318 @@
+/** Linux system call numbers for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#ifndef _LIBGLOSS_ARM_LINUX_UNISTD_H
+#define _LIBGLOSS_ARM_LINUX_UNISTD_H
+
+#if __thumb__
+# define SYS_BASE 0
+#else
+# define SYS_BASE 0x900000
+#endif
+
+#define SYS_restart_syscall (SYS_BASE+ 0)
+#define SYS_exit (SYS_BASE+ 1)
+#define SYS_fork (SYS_BASE+ 2)
+#define SYS_read (SYS_BASE+ 3)
+#define SYS_write (SYS_BASE+ 4)
+#define SYS_open (SYS_BASE+ 5)
+#define SYS_close (SYS_BASE+ 6)
+/* SYS_waitpid was 7 */
+#define SYS_creat (SYS_BASE+ 8)
+#define SYS_link (SYS_BASE+ 9)
+#define SYS_unlink (SYS_BASE+ 10)
+#define SYS_execve (SYS_BASE+ 11)
+#define SYS_chdir (SYS_BASE+ 12)
+#define SYS_time (SYS_BASE+ 13)
+#define SYS_mknod (SYS_BASE+ 14)
+#define SYS_chmod (SYS_BASE+ 15)
+#define SYS_lchown (SYS_BASE+ 16)
+/* SYS_break was 17 */
+/* SYS_stat was 18 */
+#define SYS_lseek (SYS_BASE+ 19)
+#define SYS_getpid (SYS_BASE+ 20)
+#define SYS_mount (SYS_BASE+ 21)
+#define SYS_umount (SYS_BASE+ 22)
+#define SYS_setuid (SYS_BASE+ 23)
+#define SYS_getuid (SYS_BASE+ 24)
+#define SYS_stime (SYS_BASE+ 25)
+#define SYS_ptrace (SYS_BASE+ 26)
+#define SYS_alarm (SYS_BASE+ 27)
+/* SYS_fstat was 28 */
+#define SYS_pause (SYS_BASE+ 29)
+#define SYS_utime (SYS_BASE+ 30)
+/* SYS_stty was 31 */
+/* SYS_gtty was 32 */
+#define SYS_access (SYS_BASE+ 33)
+#define SYS_nice (SYS_BASE+ 34)
+/* SYS_ftime was 35 */
+#define SYS_sync (SYS_BASE+ 36)
+#define SYS_kill (SYS_BASE+ 37)
+#define SYS_rename (SYS_BASE+ 38)
+#define SYS_mkdir (SYS_BASE+ 39)
+#define SYS_rmdir (SYS_BASE+ 40)
+#define SYS_dup (SYS_BASE+ 41)
+#define SYS_pipe (SYS_BASE+ 42)
+#define SYS_times (SYS_BASE+ 43)
+/* SYS_prof was 44 */
+#define SYS_brk (SYS_BASE+ 45)
+#define SYS_setgid (SYS_BASE+ 46)
+#define SYS_getgid (SYS_BASE+ 47)
+/* SYS_signal was 48 */
+#define SYS_geteuid (SYS_BASE+ 49)
+#define SYS_getegid (SYS_BASE+ 50)
+#define SYS_acct (SYS_BASE+ 51)
+#define SYS_umount2 (SYS_BASE+ 52)
+/* SYS_lock was 53 */
+#define SYS_ioctl (SYS_BASE+ 54)
+#define SYS_fcntl (SYS_BASE+ 55)
+/* SYS_mpx was 56 */
+#define SYS_setpgid (SYS_BASE+ 57)
+/* SYS_ulimit was 58 */
+/* SYS_olduname was 59 */
+#define SYS_umask (SYS_BASE+ 60)
+#define SYS_chroot (SYS_BASE+ 61)
+#define SYS_ustat (SYS_BASE+ 62)
+#define SYS_dup2 (SYS_BASE+ 63)
+#define SYS_getppid (SYS_BASE+ 64)
+#define SYS_getpgrp (SYS_BASE+ 65)
+#define SYS_setsid (SYS_BASE+ 66)
+#define SYS_sigaction (SYS_BASE+ 67)
+/* SYS_sgetmask was 68 */
+/* SYS_ssetmask was 69 */
+#define SYS_setreuid (SYS_BASE+ 70)
+#define SYS_setregid (SYS_BASE+ 71)
+#define SYS_sigsuspend (SYS_BASE+ 72)
+#define SYS_sigpending (SYS_BASE+ 73)
+#define SYS_sethostname (SYS_BASE+ 74)
+#define SYS_setrlimit (SYS_BASE+ 75)
+#define SYS_getrlimit (SYS_BASE+ 76)
+#define SYS_getrusage (SYS_BASE+ 77)
+#define SYS_gettimeofday (SYS_BASE+ 78)
+#define SYS_settimeofday (SYS_BASE+ 79)
+#define SYS_getgroups (SYS_BASE+ 80)
+#define SYS_setgroups (SYS_BASE+ 81)
+#define SYS_select (SYS_BASE+ 82)
+#define SYS_symlink (SYS_BASE+ 83)
+/* SYS_lstat was 84 */
+#define SYS_readlink (SYS_BASE+ 85)
+#define SYS_uselib (SYS_BASE+ 86)
+#define SYS_swapon (SYS_BASE+ 87)
+#define SYS_reboot (SYS_BASE+ 88)
+#define SYS_readdir (SYS_BASE+ 89)
+#define SYS_mmap (SYS_BASE+ 90)
+#define SYS_munmap (SYS_BASE+ 91)
+#define SYS_truncate (SYS_BASE+ 92)
+#define SYS_ftruncate (SYS_BASE+ 93)
+#define SYS_fchmod (SYS_BASE+ 94)
+#define SYS_fchown (SYS_BASE+ 95)
+#define SYS_getpriority (SYS_BASE+ 96)
+#define SYS_setpriority (SYS_BASE+ 97)
+/* SYS_profil was 98 */
+#define SYS_statfs (SYS_BASE+ 99)
+#define SYS_fstatfs (SYS_BASE+100)
+/* SYS_ioperm was 101 */
+#define SYS_socketcall (SYS_BASE+102)
+#define SYS_syslog (SYS_BASE+103)
+#define SYS_setitimer (SYS_BASE+104)
+#define SYS_getitimer (SYS_BASE+105)
+#define SYS_stat (SYS_BASE+106)
+#define SYS_lstat (SYS_BASE+107)
+#define SYS_fstat (SYS_BASE+108)
+/* SYS_uname was 109 */
+/* SYS_iopl was 110 */
+#define SYS_vhangup (SYS_BASE+111)
+/* SYS_idle was 112 */
+#define SYS_syscall (SYS_BASE+113)
+#define SYS_wait4 (SYS_BASE+114)
+#define SYS_swapoff (SYS_BASE+115)
+#define SYS_sysinfo (SYS_BASE+116)
+#define SYS_ipc (SYS_BASE+117)
+#define SYS_fsync (SYS_BASE+118)
+#define SYS_sigreturn (SYS_BASE+119)
+#define SYS_clone (SYS_BASE+120)
+#define SYS_setdomainname (SYS_BASE+121)
+#define SYS_uname (SYS_BASE+122)
+/* SYS_modify_ldt was 123 */
+#define SYS_adjtimex (SYS_BASE+124)
+#define SYS_mprotect (SYS_BASE+125)
+#define SYS_sigprocmask (SYS_BASE+126)
+/* SYS_create_module was 127 */
+#define SYS_init_module (SYS_BASE+128)
+#define SYS_delete_module (SYS_BASE+129)
+/* SYS_get_kernel_syms was 130 */
+#define SYS_quotactl (SYS_BASE+131)
+#define SYS_getpgid (SYS_BASE+132)
+#define SYS_fchdir (SYS_BASE+133)
+#define SYS_bdflush (SYS_BASE+134)
+#define SYS_sysfs (SYS_BASE+135)
+#define SYS_personality (SYS_BASE+136)
+/* SYS_afs_syscall was 137 */
+#define SYS_setfsuid (SYS_BASE+138)
+#define SYS_setfsgid (SYS_BASE+139)
+#define SYS__llseek (SYS_BASE+140)
+#define SYS_getdents (SYS_BASE+141)
+#define SYS__newselect (SYS_BASE+142)
+#define SYS_flock (SYS_BASE+143)
+#define SYS_msync (SYS_BASE+144)
+#define SYS_readv (SYS_BASE+145)
+#define SYS_writev (SYS_BASE+146)
+#define SYS_getsid (SYS_BASE+147)
+#define SYS_fdatasync (SYS_BASE+148)
+#define SYS__sysctl (SYS_BASE+149)
+#define SYS_mlock (SYS_BASE+150)
+#define SYS_munlock (SYS_BASE+151)
+#define SYS_mlockall (SYS_BASE+152)
+#define SYS_munlockall (SYS_BASE+153)
+#define SYS_sched_setparam (SYS_BASE+154)
+#define SYS_sched_getparam (SYS_BASE+155)
+#define SYS_sched_setscheduler (SYS_BASE+156)
+#define SYS_sched_getscheduler (SYS_BASE+157)
+#define SYS_sched_yield (SYS_BASE+158)
+#define SYS_sched_get_priority_max (SYS_BASE+159)
+#define SYS_sched_get_priority_min (SYS_BASE+160)
+#define SYS_sched_rr_get_interval (SYS_BASE+161)
+#define SYS_nanosleep (SYS_BASE+162)
+#define SYS_mremap (SYS_BASE+163)
+#define SYS_setresuid (SYS_BASE+164)
+#define SYS_getresuid (SYS_BASE+165)
+/* SYS_vm86 was 166 */
+/* SYS_query_module was 167 */
+#define SYS_poll (SYS_BASE+168)
+#define SYS_nfsservctl (SYS_BASE+169)
+#define SYS_setresgid (SYS_BASE+170)
+#define SYS_getresgid (SYS_BASE+171)
+#define SYS_prctl (SYS_BASE+172)
+#define SYS_rt_sigreturn (SYS_BASE+173)
+#define SYS_rt_sigaction (SYS_BASE+174)
+#define SYS_rt_sigprocmask (SYS_BASE+175)
+#define SYS_rt_sigpending (SYS_BASE+176)
+#define SYS_rt_sigtimedwait (SYS_BASE+177)
+#define SYS_rt_sigqueueinfo (SYS_BASE+178)
+#define SYS_rt_sigsuspend (SYS_BASE+179)
+#define SYS_pread64 (SYS_BASE+180)
+#define SYS_pwrite64 (SYS_BASE+181)
+#define SYS_chown (SYS_BASE+182)
+#define SYS_getcwd (SYS_BASE+183)
+#define SYS_capget (SYS_BASE+184)
+#define SYS_capset (SYS_BASE+185)
+#define SYS_sigaltstack (SYS_BASE+186)
+#define SYS_sendfile (SYS_BASE+187)
+/* reserved 188 */
+/* reserved 189 */
+#define SYS_vfork (SYS_BASE+190)
+#define SYS_ugetrlimit (SYS_BASE+191)
+#define SYS_mmap2 (SYS_BASE+192)
+#define SYS_truncate64 (SYS_BASE+193)
+#define SYS_ftruncate64 (SYS_BASE+194)
+#define SYS_stat64 (SYS_BASE+195)
+#define SYS_lstat64 (SYS_BASE+196)
+#define SYS_fstat64 (SYS_BASE+197)
+#define SYS_lchown32 (SYS_BASE+198)
+#define SYS_getuid32 (SYS_BASE+199)
+#define SYS_getgid32 (SYS_BASE+200)
+#define SYS_geteuid32 (SYS_BASE+201)
+#define SYS_getegid32 (SYS_BASE+202)
+#define SYS_setreuid32 (SYS_BASE+203)
+#define SYS_setregid32 (SYS_BASE+204)
+#define SYS_getgroups32 (SYS_BASE+205)
+#define SYS_setgroups32 (SYS_BASE+206)
+#define SYS_fchown32 (SYS_BASE+207)
+#define SYS_setresuid32 (SYS_BASE+208)
+#define SYS_getresuid32 (SYS_BASE+209)
+#define SYS_setresgid32 (SYS_BASE+210)
+#define SYS_getresgid32 (SYS_BASE+211)
+#define SYS_chown32 (SYS_BASE+212)
+#define SYS_setuid32 (SYS_BASE+213)
+#define SYS_setgid32 (SYS_BASE+214)
+#define SYS_setfsuid32 (SYS_BASE+215)
+#define SYS_setfsgid32 (SYS_BASE+216)
+#define SYS_getdents64 (SYS_BASE+217)
+#define SYS_pivot_root (SYS_BASE+218)
+#define SYS_mincore (SYS_BASE+219)
+#define SYS_madvise (SYS_BASE+220)
+#define SYS_fcntl64 (SYS_BASE+221)
+/* SYS_tux reserved 222 */
+/* unused 223 */
+#define SYS_gettid (SYS_BASE+224)
+#define SYS_readahead (SYS_BASE+225)
+#define SYS_setxattr (SYS_BASE+226)
+#define SYS_lsetxattr (SYS_BASE+227)
+#define SYS_fsetxattr (SYS_BASE+228)
+#define SYS_getxattr (SYS_BASE+229)
+#define SYS_lgetxattr (SYS_BASE+230)
+#define SYS_fgetxattr (SYS_BASE+231)
+#define SYS_listxattr (SYS_BASE+232)
+#define SYS_llistxattr (SYS_BASE+233)
+#define SYS_flistxattr (SYS_BASE+234)
+#define SYS_removexattr (SYS_BASE+235)
+#define SYS_lremovexattr (SYS_BASE+236)
+#define SYS_fremovexattr (SYS_BASE+237)
+#define SYS_tkill (SYS_BASE+238)
+#define SYS_sendfile64 (SYS_BASE+239)
+#define SYS_futex (SYS_BASE+240)
+#define SYS_sched_setaffinity (SYS_BASE+241)
+#define SYS_sched_getaffinity (SYS_BASE+242)
+#define SYS_io_setup (SYS_BASE+243)
+#define SYS_io_destroy (SYS_BASE+244)
+#define SYS_io_getevents (SYS_BASE+245)
+#define SYS_io_submit (SYS_BASE+246)
+#define SYS_io_cancel (SYS_BASE+247)
+#define SYS_exit_group (SYS_BASE+248)
+#define SYS_lookup_dcookie (SYS_BASE+249)
+#define SYS_epoll_create (SYS_BASE+250)
+#define SYS_epoll_ctl (SYS_BASE+251)
+#define SYS_epoll_wait (SYS_BASE+252)
+#define SYS_remap_file_pages (SYS_BASE+253)
+/* SYS_set_thread_area reserved 254 */
+/* SYS_get_thread_area reserved 255 */
+#define SYS_set_tid_address (SYS_BASE+256)
+#define SYS_timer_create (SYS_BASE+257)
+#define SYS_timer_settime (SYS_BASE+258)
+#define SYS_timer_gettime (SYS_BASE+259)
+#define SYS_timer_getoverrun (SYS_BASE+260)
+#define SYS_timer_delete (SYS_BASE+261)
+#define SYS_clock_settime (SYS_BASE+262)
+#define SYS_clock_gettime (SYS_BASE+263)
+#define SYS_clock_getres (SYS_BASE+264)
+#define SYS_clock_nanosleep (SYS_BASE+265)
+#define SYS_statfs64 (SYS_BASE+266)
+#define SYS_fstatfs64 (SYS_BASE+267)
+#define SYS_tgkill (SYS_BASE+268)
+#define SYS_utimes (SYS_BASE+269)
+#define SYS_arm_fadvise64_64 (SYS_BASE+270)
+#define SYS_pciconfig_iobase (SYS_BASE+271)
+#define SYS_pciconfig_read (SYS_BASE+272)
+#define SYS_pciconfig_write (SYS_BASE+273)
+#define SYS_mq_open (SYS_BASE+274)
+#define SYS_mq_unlink (SYS_BASE+275)
+#define SYS_mq_timedsend (SYS_BASE+276)
+#define SYS_mq_timedreceive (SYS_BASE+277)
+#define SYS_mq_notify (SYS_BASE+278)
+#define SYS_mq_getsetattr (SYS_BASE+279)
+#define SYS_waitid (SYS_BASE+280)
+
+#define SYS_SOCKET 1
+#define SYS_BIND 2
+#define SYS_CONNECT 3
+#define SYS_LISTEN 4
+#define SYS_ACCEPT 5
+#define SYS_GETSOCKNAME 6
+#define SYS_GETPEERNAME 7
+#define SYS_SOCKETPAIR 8
+#define SYS_SEND 9
+#define SYS_RECV 10
+#define SYS_SENDTO 11
+#define SYS_RECVFROM 12
+#define SYS_SHUTDOWN 13
+#define SYS_SETSOCKOPT 14
+#define SYS_GETSOCKOPT 15
+#define SYS_SENDMSG 16
+#define SYS_RECVMSG 17
+
+#endif /* _LIBGLOSS_ARM_LINUX_UNISTD_H */
--- /dev/null 2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscalls0.S 2006-05-12 17:18:21.000000000 -0600
@@ -0,0 +1,196 @@
+/** Linux system call interface for the ARM processor.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include "linux-syscall.h"
+
+#if __thumb__
+# define FUNC(name) .type name, %function; .thumb_func; name:
+# define SET .thumb_set
+#else
+# define FUNC(name) .type name, %function; name:
+# define SET .set
+#endif
+
+#define GLOBAL(name) .global name; FUNC(name)
+#define SIZE(name) .size name, .-name
+
+#if __thumb__
+
+# define SYSCALL0(name) \
+ GLOBAL(_ ## name); \
+ mov r12, r7; \
+ mov r7, #SYS_ ## name; \
+ swi; \
+ mov r7, r12; \
+ b _set_errno; \
+ SIZE(_ ## name)
+
+/* static int _syscall3(int a, int b, int c, int number); */
+FUNC(_syscall3)
+ push { r7 }
+ mov r7, r3
+ swi
+ pop { r7 }
+ b _set_errno
+ SIZE(_syscall3)
+
+# define SYSCALL3(name) \
+ GLOBAL(_ ## name); \
+ mov r3, #SYS_ ## name; \
+ b _syscall3; \
+ SIZE(_ ## name)
+
+# define SYSCALL6(name) \
+ GLOBAL(_ ## name); \
+ push { r4 - r5, r7 }; \
+ ldr r4, [sp, #12]; \
+ ldr r5, [sp, #16]; \
+ mov r7, #SYS_ ## name; \
+ swi; \
+ pop { r4 - r5, r7 }; \
+ b _set_errno; \
+ SIZE(_ ## name)
+
+# define SYSCALL4(name) SYSCALL6(name)
+
+#else /* __thumb__ */
+
+# define SYSCALL4(name) \
+ GLOBAL(_ ## name); \
+ swi #SYS_ ## name; \
+ b _set_errno; \
+ SIZE(_ ## name)
+
+# define SYSCALL6(name) \
+ GLOBAL(_ ## name); \
+ push { r4 - r5 }; \
+ ldr r4, [sp, #8]; \
+ ldr r5, [sp, #12]; \
+ swi #SYS_ ## name; \
+ pop { r4 - r5 }; \
+ b _set_errno; \
+ SIZE(_ ## name)
+
+#define SYSCALL0(name) SYSCALL3(name)
+#define SYSCALL3(name) SYSCALL4(name)
+
+#endif /* __thumb__ */
+
+#define SYSCALL1(name) SYSCALL3(name)
+#define SYSCALL2(name) SYSCALL3(name)
+#define SYSCALL5(name) SYSCALL6(name)
+
+SYSCALL1(alarm)
+SYSCALL1(brk)
+SYSCALL1(chdir)
+SYSCALL2(chmod)
+SYSCALL3(chown)
+SYSCALL1(close)
+SYSCALL1(dup)
+SYSCALL2(dup2)
+SYSCALL3(execve)
+SYSCALL1(exit)
+SYSCALL3(fcntl)
+SYSCALL2(fstat)
+SYSCALL3(getdents)
+SYSCALL0(getpid)
+SYSCALL2(gettimeofday)
+SYSCALL3(ioctl)
+SYSCALL2(kill)
+SYSCALL2(link)
+SYSCALL3(lseek)
+SYSCALL2(lstat)
+SYSCALL2(mkdir)
+SYSCALL3(mknod)
+SYSCALL2(nanosleep)
+SYSCALL3(open)
+SYSCALL3(read)
+SYSCALL3(readlink)
+SYSCALL4(reboot)
+SYSCALL1(rmdir)
+SYSCALL5(select)
+SYSCALL2(socketcall)
+SYSCALL2(stat)
+SYSCALL1(stime)
+SYSCALL2(symlink)
+SYSCALL1(sysinfo)
+SYSCALL1(times)
+SYSCALL2(truncate)
+SYSCALL1(umask)
+SYSCALL1(unlink)
+SYSCALL2(utime)
+SYSCALL0(vfork)
+SYSCALL4(wait4)
+SYSCALL3(write)
+
+#define ALIAS(name) .GLOBAL name; SET name, _ ## name
+
+ALIAS(alarm)
+ALIAS(chdir)
+ALIAS(chmod)
+ALIAS(chown)
+ALIAS(dup)
+ALIAS(dup2)
+ALIAS(getdents)
+ALIAS(ioctl)
+ALIAS(lstat)
+ALIAS(mkdir)
+ALIAS(mknod)
+ALIAS(nanosleep)
+ALIAS(readlink)
+ALIAS(reboot)
+ALIAS(rmdir)
+ALIAS(select)
+ALIAS(stime)
+ALIAS(symlink)
+ALIAS(sysinfo)
+ALIAS(truncate)
+ALIAS(umask)
+ALIAS(utime)
+ALIAS(vfork)
+ALIAS(wait4)
+
+# define SOCKETCALL(name, NAME) \
+ GLOBAL(name); \
+ push { r0 - r3 }; \
+ mov r0, #SYS_ ## NAME; \
+ b _socketcall_tail; \
+ SIZE(name)
+
+FUNC(_socketcall_tail)
+ mov r1, sp
+ push { lr }
+ bl _socketcall
+ pop { r3 }
+ add sp, #16
+ bx r3
+ SIZE(_socketcall_tail)
+
+#define SOCKETCALL2(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL3(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL4(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL5(name, NAME) SOCKETCALL(name, NAME)
+#define SOCKETCALL6(name, NAME) SOCKETCALL(name, NAME)
+
+SOCKETCALL3(accept, ACCEPT)
+SOCKETCALL3(bind, BIND)
+SOCKETCALL3(connect, CONNECT)
+SOCKETCALL3(getpeername, GETPEERNAME)
+SOCKETCALL3(getsockname, GETSOCKNAME)
+SOCKETCALL5(getsockopt, GETSOCKOPT)
+SOCKETCALL2(listen, LISTEN)
+SOCKETCALL4(recv, RECV)
+SOCKETCALL6(recvfrom, RECVFROM)
+SOCKETCALL3(recvmsg, RECVMSG)
+SOCKETCALL4(send, SEND)
+SOCKETCALL3(sendmsg, SENDMSG)
+SOCKETCALL6(sendto, SENDTO)
+SOCKETCALL5(setsockopt, SETSOCKOPT)
+SOCKETCALL2(shutdown, SHUTDOWN)
+SOCKETCALL3(socket, SOCKET)
+SOCKETCALL4(socketpair, SOCKETPAIR)
--- /dev/null 2006-05-23 13:41:40.592434704 -0600
+++ arm/linux-syscalls1.c 2006-05-05 19:56:41.000000000 -0600
@@ -0,0 +1,64 @@
+/** Linux system call interface.
+ * Written by Shaun Jackman <sjackman@gmail.com>.
+ * Copyright 2006 Pathway Connectivity
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <stdint.h>
+
+extern char _end[];
+static void *curbrk = _end;
+
+extern void *_brk(void *addr);
+
+int brk(void *addr)
+{
+ void *newbrk;
+ if (curbrk == addr)
+ return 0;
+ newbrk = _brk(addr);
+ curbrk = newbrk;
+ if (newbrk < addr) {
+ errno = ENOMEM;
+ return -1;
+ }
+ return 0;
+}
+
+void *_sbrk(intptr_t incr)
+{
+ void *oldbrk = curbrk;
+ if (brk(oldbrk + incr) == -1)
+ return (void *)-1;
+ return oldbrk;
+}
+
+void *sbrk(intptr_t incr) __attribute__((alias("_sbrk")));
+
+int _set_errno(int n)
+{
+ if (n < 0) {
+ errno = -n;
+ return -1;
+ }
+ return n;
+}
+
+#include <sys/wait.h>
+
+struct rusage;
+
+pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
+
+pid_t _wait(int *status)
+{
+ return wait4(-1, status, 0, NULL);
+}
+
+pid_t waitpid(pid_t pid, int *status, int options)
+{
+ return wait4(pid, status, options, NULL);
+}


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