source: patches/glibc-20051107-mips_nptl-1.patch@ 69cde8d

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since 69cde8d was 69cde8d, checked in by Jim Gifford <clfs@…>, 19 years ago

Added: All patches needed for the book.

  • Property mode set to 100644
File size: 38.6 KB
  • nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h

    Submitted By: Jim Gifford (patches at jg555 dot com)
    Date: 2005-09-27
    Initial Package Version: 20050919 Snapshot
    Origin: Daniel Jacobwitz
    Upstream Status: Submitted by Origin
    Description: Adds NPTL support for MIPS
     
    diff -Naur glibc-20050919.orig/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h glibc-20050919/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h
    old new  
    3030#define FUTEX_WAKE              1
    3131#define FUTEX_REQUEUE           3
    3232#define FUTEX_CMP_REQUEUE       4
     33#define FUTEX_WAKE_OP           5
     34#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE   ((4 << 24) | 1)
    3335
    3436/* Initializer for compatibility lock.  */
    3537#define LLL_MUTEX_LOCK_INITIALIZER (0)
     
    3941    INTERNAL_SYSCALL_DECL (__err);                                            \
    4042    long int __ret;                                                           \
    4143    __ret = INTERNAL_SYSCALL (futex, __err, 4,                                \
    42                               (futexp), FUTEX_WAIT, (val), 0);                \
     44                              (long) (futexp), FUTEX_WAIT, (val), 0);         \
    4345    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;                 \
    4446  })
    4547
     
    4850    INTERNAL_SYSCALL_DECL (__err);                                            \
    4951    long int __ret;                                                           \
    5052    __ret = INTERNAL_SYSCALL (futex, __err, 4,                                \
    51                               (futexp), FUTEX_WAIT, (val), (timespec));       \
     53                              (long) (futexp), FUTEX_WAIT, (val), (timespec));\
    5254    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;                 \
    5355  })
    5456
     
    5759    INTERNAL_SYSCALL_DECL (__err);                                            \
    5860    long int __ret;                                                           \
    5961    __ret = INTERNAL_SYSCALL (futex, __err, 4,                                \
    60                               (futexp), FUTEX_WAKE, (nr), 0);                 \
     62                              (long) (futexp), FUTEX_WAKE, (nr), 0);          \
    6163    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;                 \
    6264  })
    6365
     
    6769    INTERNAL_SYSCALL_DECL (__err);                                            \
    6870    long int __ret;                                                           \
    6971    __ret = INTERNAL_SYSCALL (futex, __err, 6,                                \
    70                               (futexp), FUTEX_CMP_REQUEUE, (nr_wake),         \
     72                              (long) (futexp), FUTEX_CMP_REQUEUE, (nr_wake),  \
    7173                              (nr_move), (mutex), (val));                     \
    7274    INTERNAL_SYSCALL_ERROR_P (__ret, __err);                                  \
    7375  })
    7476
     77/* Returns non-zero if error happened, zero if success.  */
     78#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \
     79  ({                                                                          \
     80    INTERNAL_SYSCALL_DECL (__err);                                            \
     81    long int __ret;                                                           \
     82                                                                              \
     83    __ret = INTERNAL_SYSCALL (futex, __err, 6,                                \
     84                              (futexp), FUTEX_WAKE_OP, (nr_wake),             \
     85                              (nr_wake2), (futexp2),                          \
     86                              FUTEX_OP_CLEAR_WAKE_IF_GT_ONE);                 \
     87    INTERNAL_SYSCALL_ERROR_P (__ret, __err);                                  \
     88  })
    7589
    7690static inline int __attribute__((always_inline))
    7791__lll_mutex_trylock(int *futex)
  • nptl/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

    diff -Naur glibc-20050919.orig/nptl/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h glibc-20050919/nptl/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
    old new  
     1/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
     2   This file is part of the GNU C Library.
     3
     4   The GNU C Library is free software; you can redistribute it and/or
     5   modify it under the terms of the GNU Lesser General Public
     6   License as published by the Free Software Foundation; either
     7   version 2.1 of the License, or (at your option) any later version.
     8
     9   The GNU C Library is distributed in the hope that it will be useful,
     10   but WITHOUT ANY WARRANTY; without even the implied warranty of
     11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12   Lesser General Public License for more details.
     13
     14   You should have received a copy of the GNU Lesser General Public
     15   License along with the GNU C Library; if not, write to the Free
     16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     17   02111-1307 USA.  */
     18
     19#include <sysdep.h>
     20#include <sysdeps/generic/sysdep.h>
     21#include <tls.h>
     22#ifndef __ASSEMBLER__
     23# include <nptl/pthreadP.h>
     24#endif
     25#include <sys/asm.h>
     26
     27/* Gas will put the initial save of $gp into the CIE, because it appears to
     28   happen before any instructions.  So we use cfi_same_value instead of
     29   cfi_restore.  */
     30
     31#ifdef HAVE_ASM_CFI_DIRECTIVES
     32# define cfi_same_value .cfi_same_value
     33#else
     34# define cfi_same_value
     35#endif
     36
     37#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
     38
     39#ifdef __PIC__
     40# undef PSEUDO
     41# define PSEUDO(name, syscall_name, args)                                     \
     42      .align 2;                                                               \
     43  L(pseudo_start):                                                            \
     44      cfi_startproc;                                                          \
     45      cfi_adjust_cfa_offset (STKSPACE);                                       \
     46      cfi_rel_offset (gp, STKOFF_GP);                                         \
     47  99: PTR_LA t9,__syscall_error;                                              \
     48      /* manual cpreturn */                                                   \
     49      REG_L gp, STKOFF_GP(sp);                                                \
     50      cfi_same_value (gp);                                                    \
     51      RESTORESTK;                                                             \
     52      jr t9;                                                                  \
     53  .type __##syscall_name##_nocancel, @function;                               \
     54  .globl __##syscall_name##_nocancel;                                         \
     55  __##syscall_name##_nocancel:                                                \
     56    SAVESTK;                                                                  \
     57    .cpsetup t9, STKOFF_GP, name;                                             \
     58    cfi_rel_offset (gp, STKOFF_GP);                                           \
     59    li v0, SYS_ify(syscall_name);                                             \
     60    syscall;                                                                  \
     61    bne a3, zero, SYSCALL_ERROR_LABEL;                                        \
     62    /* manual cpreturn */                                                     \
     63    REG_L gp, STKOFF_GP(sp);                                                  \
     64    cfi_same_value (gp);                                                      \
     65    RESTORESTK;                                                               \
     66    ret;                                                                      \
     67  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;            \
     68  ENTRY (name)                                                                \
     69    SAVESTK;                                                                  \
     70    .cpsetup t9, STKOFF_GP, name;                                             \
     71    cfi_rel_offset (gp, STKOFF_GP);                                           \
     72    SINGLE_THREAD_P(v1);                                                      \
     73    bne zero, v1, L(pseudo_cancel);                                           \
     74    .set noreorder;                                                           \
     75    li v0, SYS_ify(syscall_name);                                             \
     76    syscall;                                                                  \
     77    .set reorder;                                                             \
     78    bne a3, zero, SYSCALL_ERROR_LABEL;                                        \
     79    /* manual cpreturn */                                                     \
     80    REG_L gp, STKOFF_GP(sp);                                                  \
     81    cfi_same_value (gp);                                                      \
     82    RESTORESTK;                                                               \
     83    ret;                                                                      \
     84  L(pseudo_cancel):                                                           \
     85    cfi_adjust_cfa_offset (STKSPACE);                                         \
     86    cfi_rel_offset (gp, STKOFF_GP);                                           \
     87    REG_S ra, STKOFF_RA(sp);                                                  \
     88    cfi_rel_offset (ra, STKOFF_RA);                                           \
     89    PUSHARGS_##args;                    /* save syscall args */               \
     90    CENABLE;                                                                  \
     91    REG_S v0, STKOFF_SVMSK(sp);         /* save mask */                       \
     92    POPARGS_##args;                     /* restore syscall args */            \
     93    .set noreorder;                                                           \
     94    li v0, SYS_ify (syscall_name);                                            \
     95    syscall;                                                                  \
     96    .set reorder;                                                             \
     97    REG_S v0, STKOFF_SC_V0(sp);         /* save syscall result */             \
     98    REG_S a3, STKOFF_SC_ERR(sp);        /* save syscall error flag */         \
     99    REG_L a0, STKOFF_SVMSK(sp);         /* pass mask as arg1 */               \
     100    CDISABLE;                                                                 \
     101    REG_L a3, STKOFF_SC_ERR(sp);        /* restore syscall error flag */      \
     102    REG_L ra, STKOFF_RA(sp);            /* restore return address */          \
     103    REG_L v0, STKOFF_SC_V0(sp);         /* restore syscall result */          \
     104    bne a3, zero, SYSCALL_ERROR_LABEL;                                        \
     105    /* manual cpreturn */                                                     \
     106    REG_L gp, STKOFF_GP(sp);                                                  \
     107    cfi_same_value (gp);                                                      \
     108    RESTORESTK;                                                               \
     109  L(pseudo_end):
     110
     111
     112# undef PSEUDO_END
     113# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
     114
     115#endif
     116
     117# define PUSHARGS_0     /* nothing to do */
     118# define PUSHARGS_1     PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);
     119# define PUSHARGS_2     PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);
     120# define PUSHARGS_3     PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);
     121# define PUSHARGS_4     PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);
     122# define PUSHARGS_5     PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);
     123# define PUSHARGS_6     PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);
     124
     125# define POPARGS_0      /* nothing to do */
     126# define POPARGS_1      POPARGS_0 REG_L a0, STKOFF_A0(sp);
     127# define POPARGS_2      POPARGS_1 REG_L a1, STKOFF_A1(sp);
     128# define POPARGS_3      POPARGS_2 REG_L a2, STKOFF_A2(sp);
     129# define POPARGS_4      POPARGS_3 REG_L a3, STKOFF_A3(sp);
     130# define POPARGS_5      POPARGS_4 REG_L a4, STKOFF_A4(sp);
     131# define POPARGS_6      POPARGS_5 REG_L a5, STKOFF_A5(sp);
     132
     133/* Save an even number of slots.  Should be 0 if an even number of slots
     134   are used below, or SZREG if an odd number are used.  */
     135# define STK_PAD        SZREG
     136
     137/* Place values that we are more likely to use later in this sequence, i.e.
     138   closer to the SP at function entry.  If you do that, the are more
     139   likely to already be in your d-cache.  */
     140# define STKOFF_A5      (STK_PAD)
     141# define STKOFF_A4      (STKOFF_A5 + SZREG)
     142# define STKOFF_A3      (STKOFF_A4 + SZREG)
     143# define STKOFF_A2      (STKOFF_A3 + SZREG)     /* MT and more args.  */
     144# define STKOFF_A1      (STKOFF_A2 + SZREG)     /* MT and 2 args.  */
     145# define STKOFF_A0      (STKOFF_A1 + SZREG)     /* MT and 1 arg.  */
     146# define STKOFF_RA      (STKOFF_A0 + SZREG)     /* Used if MT.  */
     147# define STKOFF_SC_V0   (STKOFF_RA + SZREG)     /* Used if MT.  */
     148# define STKOFF_SC_ERR  (STKOFF_SC_V0 + SZREG)  /* Used if MT.  */
     149# define STKOFF_SVMSK   (STKOFF_SC_ERR + SZREG) /* Used if MT.  */
     150# define STKOFF_GP      (STKOFF_SVMSK + SZREG)  /* Always used.  */
     151
     152# define STKSPACE       (STKOFF_GP + SZREG)
     153# define SAVESTK        PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
     154# define RESTORESTK     PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
     155
     156# ifdef IS_IN_libpthread
     157#  define CENABLE       PTR_LA t9, __pthread_enable_asynccancel; jalr t9
     158#  define CDISABLE      PTR_LA t9, __pthread_disable_asynccancel; jalr t9
     159# elif defined IS_IN_librt
     160#  define CENABLE       PTR_LA t9, __librt_enable_asynccancel; jalr t9
     161#  define CDISABLE      PTR_LA t9, __librt_disable_asynccancel; jalr t9
     162# else
     163#  define CENABLE       PTR_LA t9, __libc_enable_asynccancel; jalr t9
     164#  define CDISABLE      PTR_LA t9, __libc_disable_asynccancel; jalr t9
     165# endif
     166
     167# ifndef __ASSEMBLER__
     168#  define SINGLE_THREAD_P                                               \
     169        __builtin_expect (THREAD_GETMEM (THREAD_SELF,                   \
     170                                         header.multiple_threads)       \
     171                          == 0, 1)
     172# else
     173#  define SINGLE_THREAD_P(reg)                                          \
     174        READ_THREAD_POINTER(reg);                                       \
     175        lw reg, MULTIPLE_THREADS_OFFSET(reg)
     176#endif
     177
     178#elif !defined __ASSEMBLER__
     179
     180# define SINGLE_THREAD_P 1
     181# define NO_CANCELLATION 1
     182
     183#endif
  • sysdeps/mips/dl-machine.h

    diff -Naur glibc-20050919.orig/sysdeps/mips/dl-machine.h glibc-20050919/sysdeps/mips/dl-machine.h
    old new  
    266266        " STRINGXP(PTR_ADDU) " $7, $7, " STRINGXP (PTRSIZE) " \n\
    267267        # Make sure the stack pointer is aligned for _dl_init_internal.\n\
    268268        and $2, $29, -2 * " STRINGXP(SZREG) "\n\
    269         " STRINGXP(PTR_S) " $29, -4($2)\n\
     269        " STRINGXP(PTR_S) " $29, -" STRINGXP(SZREG) "($2)\n\
    270270        " STRINGXP(PTR_SUBIU) " $29, $2, 32\n\
    271271        " STRINGXP(SAVE_GP(16)) "\n\
    272272        # Call the function to run the initializers.\n\
    273273        jal _dl_init_internal\n\
    274274        # Restore the stack pointer for _start.\n\
    275         " STRINGXP(PTR_L)  " $29, 28($29)\n\
     275        " STRINGXP(PTR_L)  " $29, 32-" STRINGXP(SZREG) "($29)\n\
    276276        # Pass our finalizer function to the user in $2 as per ELF ABI.\n\
    277277        " STRINGXP(PTR_LA) " $2, _dl_fini\n\
    278278        # Jump to the user entry point.\n\
     
    336336# endif
    337337      {
    338338        struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
    339         Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
    340 
    341         if (sym)
    342           value += sym->st_value;
    343339
    344340        switch (r_type)
    345341          {
    346342          case R_MIPS_TLS_DTPMOD64:
    347343          case R_MIPS_TLS_DTPMOD32:
    348344            if (sym_map)
    349               *(ElfW(Word) *)reloc_addr = sym_map->l_tls_modid;
     345              *(ElfW(Addr) *)reloc_addr = sym_map->l_tls_modid;
    350346            break;
    351347
    352348          case R_MIPS_TLS_DTPREL64:
    353349          case R_MIPS_TLS_DTPREL32:
    354             *(ElfW(Word) *)reloc_addr += TLS_DTPREL_VALUE (sym);
     350            *(ElfW(Addr) *)reloc_addr += TLS_DTPREL_VALUE (sym);
    355351            break;
    356352
    357353          case R_MIPS_TLS_TPREL32:
    358354          case R_MIPS_TLS_TPREL64:
    359355            CHECK_STATIC_TLS (map, sym_map);
    360             *(ElfW(Word) *)reloc_addr += TLS_TPREL_VALUE (sym_map, sym);
     356            *(ElfW(Addr) *)reloc_addr += TLS_TPREL_VALUE (sym_map, sym);
    361357            break;
    362358          }
    363359
  • sysdeps/unix/sysv/linux/mips/bits/socket.h

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/bits/socket.h glibc-20050919/sysdeps/unix/sysv/linux/mips/bits/socket.h
    old new  
    219219    socklen_t msg_namelen;      /* Length of address data.  */
    220220
    221221    struct iovec *msg_iov;      /* Vector of data to send/receive into.  */
    222     int msg_iovlen;             /* Number of elements in the vector.  */
     222    size_t msg_iovlen;          /* Number of elements in the vector.  */
    223223
    224224    void *msg_control;          /* Ancillary data (eg BSD filedesc passing). */
    225     socklen_t msg_controllen;   /* Ancillary data buffer length.  */
     225    size_t msg_controllen;      /* Ancillary data buffer length.  */
    226226
    227227    int msg_flags;              /* Flags on received message.  */
    228228  };
     
    270270
    271271  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
    272272                               + CMSG_ALIGN (__cmsg->cmsg_len));
    273   if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control
    274                                          + __mhdr->msg_controllen)
     273  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
     274                                        + __mhdr->msg_controllen)
    275275      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
    276276          > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
    277277    /* No more entries.  */
     
    284284   <linux/socket.h>.  */
    285285enum
    286286  {
    287     SCM_RIGHTS = 0x01,          /* Transfer file descriptors.  */
     287    SCM_RIGHTS = 0x01           /* Transfer file descriptors.  */
    288288#define SCM_RIGHTS SCM_RIGHTS
    289289#ifdef __USE_BSD
    290     SCM_CREDENTIALS = 0x02,     /* Credentials passing.  */
     290    , SCM_CREDENTIALS = 0x02    /* Credentials passing.  */
    291291# define SCM_CREDENTIALS SCM_CREDENTIALS
    292292#endif
    293     __SCM_CONNECT = 0x03        /* Data array is `struct scm_connect'.  */
    294293  };
    295294
    296295/* User visible structure for SCM_CREDENTIALS message */
  • sysdeps/unix/sysv/linux/mips/mips64/Makefile

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/mips64/Makefile glibc-20050919/sysdeps/unix/sysv/linux/mips/mips64/Makefile
    old new  
     1ifeq ($(subdir),socket)
     2CFLAGS-recv.c += -fexceptions
     3CFLAGS-send.c += -fexceptions
     4endif
     5
     6ifeq ($(subdir),nptl)
     7CFLAGS-recv.c += -fexceptions
     8CFLAGS-send.c += -fexceptions
     9endif
  • sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h glibc-20050919/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
    old new  
    6666#define INTERNAL_SYSCALL_ERRNO(val, err)     (val)
    6767
    6868#undef INTERNAL_SYSCALL
    69 #define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
     69#define INTERNAL_SYSCALL(name, err, nr, args...) \
     70        internal_syscall##nr (, "li\t$2, %2\t\t\t# " #name "\n\t",      \
     71                              "i" (SYS_ify (name)), err, args)
    7072
    71 #define internal_syscall0(name, err, dummy...)                          \
     73#undef INTERNAL_SYSCALL_NCS
     74#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
     75        internal_syscall##nr (= number, , "r" (__v0), err, args)
     76
     77#define internal_syscall0(ncs_init, cs_init, input, err, dummy...)      \
    7278({                                                                      \
    7379        long _sys_result;                                               \
    7480                                                                        \
    7581        {                                                               \
    76         register long __v0 asm("$2");                                   \
    77         register long __a3 asm("$7");                                   \
     82        register long long __v0 asm("$2") ncs_init;                     \
     83        register long long __a3 asm("$7");                              \
    7884        __asm__ volatile (                                              \
    7985        ".set\tnoreorder\n\t"                                           \
    80         "li\t$2, %2\t\t\t# " #name "\n\t"                               \
     86        cs_init                                                         \
    8187        "syscall\n\t"                                                   \
    8288        ".set reorder"                                                  \
    8389        : "=r" (__v0), "=r" (__a3)                                      \
    84         : "i" (SYS_ify(name))                                           \
     90        : input                                                         \
    8591        : __SYSCALL_CLOBBERS);                                          \
    8692        err = __a3;                                                     \
    8793        _sys_result = __v0;                                             \
     
    8995        _sys_result;                                                    \
    9096})
    9197
    92 #define internal_syscall1(name, err, arg1)                              \
     98#define internal_syscall1(ncs_init, cs_init, input, err, arg1)          \
    9399({                                                                      \
    94100        long _sys_result;                                               \
    95101                                                                        \
    96102        {                                                               \
    97         register long long __v0 asm("$2");                              \
     103        register long long __v0 asm("$2") ncs_init;                     \
    98104        register long long __a0 asm("$4") = (long long) arg1;           \
    99105        register long long __a3 asm("$7");                              \
    100106        __asm__ volatile (                                              \
    101107        ".set\tnoreorder\n\t"                                           \
    102         "li\t$2, %3\t\t\t# " #name "\n\t"                               \
     108        cs_init                                                         \
    103109        "syscall\n\t"                                                   \
    104110        ".set reorder"                                                  \
    105111        : "=r" (__v0), "=r" (__a3)                                      \
    106         : "r" (__a0), "i" (SYS_ify(name))                               \
     112        : input, "r" (__a0)                                             \
    107113        : __SYSCALL_CLOBBERS);                                          \
    108114        err = __a3;                                                     \
    109115        _sys_result = __v0;                                             \
     
    111117        _sys_result;                                                    \
    112118})
    113119
    114 #define internal_syscall2(name, err, arg1, arg2)                        \
     120#define internal_syscall2(ncs_init, cs_init, input, err, arg1, arg2)    \
    115121({                                                                      \
    116122        long _sys_result;                                               \
    117123                                                                        \
    118124        {                                                               \
    119         register long long __v0 asm("$2");                              \
     125        register long long __v0 asm("$2") ncs_init;                     \
    120126        register long long __a0 asm("$4") = (long long) arg1;           \
    121127        register long long __a1 asm("$5") = (long long) arg2;           \
    122128        register long long __a3 asm("$7");                              \
    123129        __asm__ volatile (                                              \
    124130        ".set\tnoreorder\n\t"                                           \
    125         "li\t$2, %4\t\t\t# " #name "\n\t"                               \
     131        cs_init                                                         \
    126132        "syscall\n\t"                                                   \
    127133        ".set\treorder"                                                 \
    128134        : "=r" (__v0), "=r" (__a3)                                      \
    129         : "r" (__a0), "r" (__a1), "i" (SYS_ify(name))                   \
     135        : input, "r" (__a0), "r" (__a1)                                 \
    130136        : __SYSCALL_CLOBBERS);                                          \
    131137        err = __a3;                                                     \
    132138        _sys_result = __v0;                                             \
     
    134140        _sys_result;                                                    \
    135141})
    136142
    137 #define internal_syscall3(name, err, arg1, arg2, arg3)                  \
     143#define internal_syscall3(ncs_init, cs_init, input, err, arg1, arg2, arg3) \
    138144({                                                                      \
    139145        long _sys_result;                                               \
    140146                                                                        \
    141147        {                                                               \
    142         register long long __v0 asm("$2");                              \
     148        register long long __v0 asm("$2") ncs_init;                     \
    143149        register long long __a0 asm("$4") = (long long) arg1;           \
    144150        register long long __a1 asm("$5") = (long long) arg2;           \
    145151        register long long __a2 asm("$6") = (long long) arg3;           \
    146152        register long long __a3 asm("$7");                              \
    147153        __asm__ volatile (                                              \
    148154        ".set\tnoreorder\n\t"                                           \
    149         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     155        cs_init                                                         \
    150156        "syscall\n\t"                                                   \
    151157        ".set\treorder"                                                 \
    152158        : "=r" (__v0), "=r" (__a3)                                      \
    153         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))       \
     159        : input, "r" (__a0), "r" (__a1), "r" (__a2)                     \
    154160        : __SYSCALL_CLOBBERS);                                          \
    155161        err = __a3;                                                     \
    156162        _sys_result = __v0;                                             \
     
    158164        _sys_result;                                                    \
    159165})
    160166
    161 #define internal_syscall4(name, err, arg1, arg2, arg3, arg4)            \
     167#define internal_syscall4(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4) \
    162168({                                                                      \
    163169        long _sys_result;                                               \
    164170                                                                        \
    165171        {                                                               \
    166         register long long __v0 asm("$2");                              \
     172        register long long __v0 asm("$2") ncs_init;                     \
    167173        register long long __a0 asm("$4") = (long long) arg1;           \
    168174        register long long __a1 asm("$5") = (long long) arg2;           \
    169175        register long long __a2 asm("$6") = (long long) arg3;           \
    170176        register long long __a3 asm("$7") = (long long) arg4;           \
    171177        __asm__ volatile (                                              \
    172178        ".set\tnoreorder\n\t"                                           \
    173         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     179        cs_init                                                         \
    174180        "syscall\n\t"                                                   \
    175181        ".set\treorder"                                                 \
    176182        : "=r" (__v0), "+r" (__a3)                                      \
    177         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))       \
     183        : input, "r" (__a0), "r" (__a1), "r" (__a2)                     \
    178184        : __SYSCALL_CLOBBERS);                                          \
    179185        err = __a3;                                                     \
    180186        _sys_result = __v0;                                             \
     
    182188        _sys_result;                                                    \
    183189})
    184190
    185 #define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5)      \
     191#define internal_syscall5(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5) \
    186192({                                                                      \
    187193        long _sys_result;                                               \
    188194                                                                        \
    189195        {                                                               \
    190         register long long __v0 asm("$2");                              \
     196        register long long __v0 asm("$2") ncs_init;                     \
    191197        register long long __a0 asm("$4") = (long long) arg1;           \
    192198        register long long __a1 asm("$5") = (long long) arg2;           \
    193199        register long long __a2 asm("$6") = (long long) arg3;           \
     
    195201        register long long __a4 asm("$8") = (long long) arg5;           \
    196202        __asm__ volatile (                                              \
    197203        ".set\tnoreorder\n\t"                                           \
    198         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     204        cs_init                                                         \
    199205        "syscall\n\t"                                                   \
    200206        ".set\treorder"                                                 \
    201207        : "=r" (__v0), "+r" (__a3)                                      \
    202         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),      \
    203           "r" (__a4)                                                    \
     208        : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4)         \
    204209        : __SYSCALL_CLOBBERS);                                          \
    205210        err = __a3;                                                     \
    206211        _sys_result = __v0;                                             \
     
    208213        _sys_result;                                                    \
    209214})
    210215
    211 #define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
     216#define internal_syscall6(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6) \
    212217({                                                                      \
    213218        long _sys_result;                                               \
    214219                                                                        \
    215220        {                                                               \
    216         register long long __v0 asm("$2");                              \
     221        register long long __v0 asm("$2") ncs_init;                     \
    217222        register long long __a0 asm("$4") = (long long) arg1;           \
    218223        register long long __a1 asm("$5") = (long long) arg2;           \
    219224        register long long __a2 asm("$6") = (long long) arg3;           \
     
    222227        register long long __a5 asm("$9") = (long long) arg6;           \
    223228        __asm__ volatile (                                              \
    224229        ".set\tnoreorder\n\t"                                           \
    225         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     230        cs_init                                                         \
    226231        "syscall\n\t"                                                   \
    227232        ".set\treorder"                                                 \
    228233        : "=r" (__v0), "+r" (__a3)                                      \
    229         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),      \
    230           "r" (__a4), "r" (__a5)                                        \
     234        : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4),        \
     235          "r" (__a5)                                                    \
    231236        : __SYSCALL_CLOBBERS);                                          \
    232237        err = __a3;                                                     \
    233238        _sys_result = __v0;                                             \
  • sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h glibc-20050919/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
    old new  
    6666#define INTERNAL_SYSCALL_ERRNO(val, err)     (val)
    6767
    6868#undef INTERNAL_SYSCALL
    69 #define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
     69#define INTERNAL_SYSCALL(name, err, nr, args...) \
     70        internal_syscall##nr (, "li\t$2, %2\t\t\t# " #name "\n\t",      \
     71                              "i" (SYS_ify (name)), err, args)
    7072
    71 #define internal_syscall0(name, err, dummy...)                          \
     73#undef INTERNAL_SYSCALL_NCS
     74#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
     75        internal_syscall##nr (= number, , "r" (__v0), err, args)
     76
     77#define internal_syscall0(ncs_init, cs_init, input, err, dummy...)      \
    7278({                                                                      \
    7379        long _sys_result;                                               \
    7480                                                                        \
    7581        {                                                               \
    76         register long __v0 asm("$2");                                   \
    77         register long __a3 asm("$7");                                   \
     82        register long __v0 asm("$2") ncs_init;                          \
     83        register long __a3 asm("$7");                                   \
    7884        __asm__ volatile (                                              \
    7985        ".set\tnoreorder\n\t"                                           \
    80         "li\t$2, %2\t\t\t# " #name "\n\t"                               \
     86        cs_init                                                         \
    8187        "syscall\n\t"                                                   \
    8288        ".set reorder"                                                  \
    8389        : "=r" (__v0), "=r" (__a3)                                      \
    84         : "i" (SYS_ify(name))                                           \
     90        : input                                                         \
    8591        : __SYSCALL_CLOBBERS);                                          \
    8692        err = __a3;                                                     \
    8793        _sys_result = __v0;                                             \
     
    8995        _sys_result;                                                    \
    9096})
    9197
    92 #define internal_syscall1(name, err, arg1)                              \
     98#define internal_syscall1(ncs_init, cs_init, input, err, arg1)          \
    9399({                                                                      \
    94100        long _sys_result;                                               \
    95101                                                                        \
    96102        {                                                               \
    97         register long __v0 asm("$2");                                   \
     103        register long __v0 asm("$2") ncs_init;                          \
    98104        register long __a0 asm("$4") = (long) arg1;                     \
    99105        register long __a3 asm("$7");                                   \
    100106        __asm__ volatile (                                              \
    101107        ".set\tnoreorder\n\t"                                           \
    102         "li\t$2, %3\t\t\t# " #name "\n\t"                               \
     108        cs_init                                                         \
    103109        "syscall\n\t"                                                   \
    104110        ".set reorder"                                                  \
    105111        : "=r" (__v0), "=r" (__a3)                                      \
    106         : "r" (__a0), "i" (SYS_ify(name))                               \
     112        : input, "r" (__a0)                                             \
    107113        : __SYSCALL_CLOBBERS);                                          \
    108114        err = __a3;                                                     \
    109115        _sys_result = __v0;                                             \
     
    111117        _sys_result;                                                    \
    112118})
    113119
    114 #define internal_syscall2(name, err, arg1, arg2)                        \
     120#define internal_syscall2(ncs_init, cs_init, input, err, arg1, arg2)    \
    115121({                                                                      \
    116122        long _sys_result;                                               \
    117123                                                                        \
    118124        {                                                               \
    119         register long __v0 asm("$2");                                   \
     125        register long __v0 asm("$2") ncs_init;                          \
    120126        register long __a0 asm("$4") = (long) arg1;                     \
    121127        register long __a1 asm("$5") = (long) arg2;                     \
    122128        register long __a3 asm("$7");                                   \
    123129        __asm__ volatile (                                              \
    124130        ".set\tnoreorder\n\t"                                           \
    125         "li\t$2, %4\t\t\t# " #name "\n\t"                               \
     131        cs_init                                                         \
    126132        "syscall\n\t"                                                   \
    127133        ".set\treorder"                                                 \
    128134        : "=r" (__v0), "=r" (__a3)                                      \
    129         : "r" (__a0), "r" (__a1), "i" (SYS_ify(name))                   \
     135        : input, "r" (__a0), "r" (__a1)                                 \
    130136        : __SYSCALL_CLOBBERS);                                          \
    131137        err = __a3;                                                     \
    132138        _sys_result = __v0;                                             \
     
    134140        _sys_result;                                                    \
    135141})
    136142
    137 #define internal_syscall3(name, err, arg1, arg2, arg3)                  \
     143#define internal_syscall3(ncs_init, cs_init, input, err, arg1, arg2, arg3) \
    138144({                                                                      \
    139145        long _sys_result;                                               \
    140146                                                                        \
    141147        {                                                               \
    142         register long __v0 asm("$2");                                   \
     148        register long __v0 asm("$2") ncs_init;                          \
    143149        register long __a0 asm("$4") = (long) arg1;                     \
    144150        register long __a1 asm("$5") = (long) arg2;                     \
    145151        register long __a2 asm("$6") = (long) arg3;                     \
    146152        register long __a3 asm("$7");                                   \
    147153        __asm__ volatile (                                              \
    148154        ".set\tnoreorder\n\t"                                           \
    149         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     155        cs_init                                                         \
    150156        "syscall\n\t"                                                   \
    151157        ".set\treorder"                                                 \
    152158        : "=r" (__v0), "=r" (__a3)                                      \
    153         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))       \
     159        : input, "r" (__a0), "r" (__a1), "r" (__a2)                     \
    154160        : __SYSCALL_CLOBBERS);                                          \
    155161        err = __a3;                                                     \
    156162        _sys_result = __v0;                                             \
     
    158164        _sys_result;                                                    \
    159165})
    160166
    161 #define internal_syscall4(name, err, arg1, arg2, arg3, arg4)            \
     167#define internal_syscall4(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4) \
    162168({                                                                      \
    163169        long _sys_result;                                               \
    164170                                                                        \
    165171        {                                                               \
    166         register long __v0 asm("$2");                                   \
     172        register long __v0 asm("$2") ncs_init;                          \
    167173        register long __a0 asm("$4") = (long) arg1;                     \
    168174        register long __a1 asm("$5") = (long) arg2;                     \
    169175        register long __a2 asm("$6") = (long) arg3;                     \
    170176        register long __a3 asm("$7") = (long) arg4;                     \
    171177        __asm__ volatile (                                              \
    172178        ".set\tnoreorder\n\t"                                           \
    173         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     179        cs_init                                                         \
    174180        "syscall\n\t"                                                   \
    175181        ".set\treorder"                                                 \
    176182        : "=r" (__v0), "+r" (__a3)                                      \
    177         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))       \
     183        : input, "r" (__a0), "r" (__a1), "r" (__a2)                     \
    178184        : __SYSCALL_CLOBBERS);                                          \
    179185        err = __a3;                                                     \
    180186        _sys_result = __v0;                                             \
     
    182188        _sys_result;                                                    \
    183189})
    184190
    185 #define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5)      \
     191#define internal_syscall5(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5) \
    186192({                                                                      \
    187193        long _sys_result;                                               \
    188194                                                                        \
    189195        {                                                               \
    190         register long __v0 asm("$2");                                   \
     196        register long __v0 asm("$2") ncs_init;                          \
    191197        register long __a0 asm("$4") = (long) arg1;                     \
    192198        register long __a1 asm("$5") = (long) arg2;                     \
    193199        register long __a2 asm("$6") = (long) arg3;                     \
     
    195201        register long __a4 asm("$8") = (long) arg5;                     \
    196202        __asm__ volatile (                                              \
    197203        ".set\tnoreorder\n\t"                                           \
    198         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     204        cs_init                                                         \
    199205        "syscall\n\t"                                                   \
    200206        ".set\treorder"                                                 \
    201207        : "=r" (__v0), "+r" (__a3)                                      \
    202         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),      \
    203           "r" (__a4)                                                    \
     208        : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4)         \
    204209        : __SYSCALL_CLOBBERS);                                          \
    205210        err = __a3;                                                     \
    206211        _sys_result = __v0;                                             \
     
    208213        _sys_result;                                                    \
    209214})
    210215
    211 #define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
     216#define internal_syscall6(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6) \
    212217({                                                                      \
    213218        long _sys_result;                                               \
    214219                                                                        \
    215220        {                                                               \
    216         register long __v0 asm("$2");                                   \
     221        register long __v0 asm("$2") ncs_init;                          \
    217222        register long __a0 asm("$4") = (long) arg1;                     \
    218223        register long __a1 asm("$5") = (long) arg2;                     \
    219224        register long __a2 asm("$6") = (long) arg3;                     \
     
    222227        register long __a5 asm("$9") = (long) arg6;                     \
    223228        __asm__ volatile (                                              \
    224229        ".set\tnoreorder\n\t"                                           \
    225         "li\t$2, %5\t\t\t# " #name "\n\t"                               \
     230        cs_init                                                         \
    226231        "syscall\n\t"                                                   \
    227232        ".set\treorder"                                                 \
    228233        : "=r" (__v0), "+r" (__a3)                                      \
    229         : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),      \
    230           "r" (__a4), "r" (__a5)                                        \
     234        : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4),        \
     235          "r" (__a5)                                                    \
    231236        : __SYSCALL_CLOBBERS);                                          \
    232237        err = __a3;                                                     \
    233238        _sys_result = __v0;                                             \
  • sysdeps/unix/sysv/linux/mips/mips64/syscalls.list

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list glibc-20050919/sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
    old new  
    11# File name     Caller  Syscall name    Args    Strong name     Weak names
    22
    3 lseek           -       lseek           i:iii   __libc_lseek    __lseek lseek __llseek llseek __libc_lseek64 __lseek64 lseek64
    4 
    5 # proper socket implementations:
    6 recvfrom        -       recvfrom        i:ibniBN __libc_recvfrom __recvfrom recvfrom
    7 sendto          -       sendto          i:ibnibn __libc_sendto  __sendto sendto
     3lseek           -       lseek           Ci:iii  __libc_lseek    __lseek lseek __llseek llseek __libc_lseek64 __lseek64 lseek64
    84
    95# semaphore and shm system calls
    106msgctl          -       msgctl          i:iip   __msgctl        msgctl
    117msgget          -       msgget          i:ii    __msgget        msgget
    12 msgrcv          -       msgrcv          i:ibnii __msgrcv        msgrcv
    13 msgsnd          -       msgsnd          i:ibni  __msgsnd        msgsnd
     8msgrcv          -       msgrcv          Ci:ibnii __msgrcv       msgrcv
     9msgsnd          -       msgsnd          Ci:ibni __msgsnd        msgsnd
    1410shmat           -       shmat           i:ipi   __shmat         shmat
    1511shmctl          -       shmctl          i:iip   __shmctl        shmctl
    1612shmdt           -       shmdt           i:s     __shmdt         shmdt
  • sysdeps/unix/sysv/linux/mips/ptrace.c

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/ptrace.c glibc-20050919/sysdeps/unix/sysv/linux/mips/ptrace.c
    old new  
    1 /* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004
    2         Free Software Foundation, Inc.
    3    This file is part of the GNU C Library.
    4 
    5    The GNU C Library is free software; you can redistribute it and/or
    6    modify it under the terms of the GNU Lesser General Public
    7    License as published by the Free Software Foundation; either
    8    version 2.1 of the License, or (at your option) any later version.
    9 
    10    The GNU C Library is distributed in the hope that it will be useful,
    11    but WITHOUT ANY WARRANTY; without even the implied warranty of
    12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13    Lesser General Public License for more details.
    14 
    15    You should have received a copy of the GNU Lesser General Public
    16    License along with the GNU C Library; if not, write to the Free
    17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    18    02111-1307 USA.  */
    19 
    20 #include <errno.h>
    21 #include <sgidefs.h>
    22 #include <sys/types.h>
    23 #include <sys/ptrace.h>
    24 #include <sys/user.h>
    25 #include <stdarg.h>
    26 
    27 #include <sysdep.h>
    28 #include <sys/syscall.h>
    29 #include <bp-checks.h>
    30 #include <sgidefs.h>
    31 
    32 #if _MIPS_SIM == _ABIN32
    33 __extension__ typedef long long int reg_type;
    34 #else
    35 typedef long int reg_type;
    36 #endif
    37 
    38 reg_type
    39 ptrace (enum __ptrace_request request, ...)
    40 {
    41   reg_type res, ret;
    42   va_list ap;
    43   pid_t pid;
    44   void *addr;
    45   reg_type data;
    46 
    47   va_start (ap, request);
    48   pid = va_arg (ap, pid_t);
    49   addr = va_arg (ap, void *);
    50   data = va_arg (ap, reg_type);
    51   va_end (ap);
    52 
    53   if (request > 0 && request < 4)
    54     data = &ret;
    55 
    56 #if __BOUNDED_POINTERS__
    57   switch (request)
    58     {
    59     case PTRACE_PEEKTEXT:
    60     case PTRACE_PEEKDATA:
    61     case PTRACE_PEEKUSER:
    62     case PTRACE_POKETEXT:
    63     case PTRACE_POKEDATA:
    64     case PTRACE_POKEUSER:
    65       (void) CHECK_1 ((int *) addr);
    66       (void) CHECK_1 ((int *) data);
    67       break;
    68 
    69     case PTRACE_GETREGS:
    70     case PTRACE_SETREGS:
    71       /* We don't know the size of data, so the best we can do is ensure
    72          that `data' is valid for at least one word.  */
    73       (void) CHECK_1 ((int *) data);
    74       break;
    75 
    76     case PTRACE_GETFPREGS:
    77     case PTRACE_SETFPREGS:
    78       /* We don't know the size of data, so the best we can do is ensure
    79          that `data' is valid for at least one word.  */
    80       (void) CHECK_1 ((int *) data);
    81       break;
    82 
    83     case PTRACE_GETFPXREGS:
    84     case PTRACE_SETFPXREGS:
    85       /* We don't know the size of data, so the best we can do is ensure
    86          that `data' is valid for at least one word.  */
    87       (void) CHECK_1 ((int *) data);
    88       break;
    89 
    90     case PTRACE_TRACEME:
    91     case PTRACE_CONT:
    92     case PTRACE_KILL:
    93     case PTRACE_SINGLESTEP:
    94     case PTRACE_ATTACH:
    95     case PTRACE_DETACH:
    96     case PTRACE_SYSCALL:
    97       /* Neither `data' nor `addr' needs any checks.  */
    98       break;
    99     };
    100 #endif
    101 
    102   res = INLINE_SYSCALL (ptrace, 4, request, pid,
    103                         __ptrvalue (addr), __ptrvalue (data));
    104   if (res >= 0 && request > 0 && request < 4)
    105     {
    106       __set_errno (0);
    107       return ret;
    108     }
    109 
    110   return res;
    111 }
  • sysdeps/unix/sysv/linux/mips/sys/ptrace.h

    diff -Naur glibc-20050919.orig/sysdeps/unix/sysv/linux/mips/sys/ptrace.h glibc-20050919/sysdeps/unix/sysv/linux/mips/sys/ptrace.h
    old new  
    1 /* `ptrace' debugger support interface.  Linux version.
    2    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004
    3         Free Software Foundation, Inc.
    4    This file is part of the GNU C Library.
    5 
    6    The GNU C Library is free software; you can redistribute it and/or
    7    modify it under the terms of the GNU Lesser General Public
    8    License as published by the Free Software Foundation; either
    9    version 2.1 of the License, or (at your option) any later version.
    10 
    11    The GNU C Library is distributed in the hope that it will be useful,
    12    but WITHOUT ANY WARRANTY; without even the implied warranty of
    13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    14    Lesser General Public License for more details.
    15 
    16    You should have received a copy of the GNU Lesser General Public
    17    License along with the GNU C Library; if not, write to the Free
    18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    19    02111-1307 USA.  */
    20 
    21 #ifndef _SYS_PTRACE_H
    22 #define _SYS_PTRACE_H   1
    23 
    24 #include <features.h>
    25 #include <sgidefs.h>
    26 
    27 __BEGIN_DECLS
    28 
    29 /* Type of the REQUEST argument to `ptrace.'  */
    30 enum __ptrace_request
    31 {
    32   /* Indicate that the process making this request should be traced.
    33      All signals received by this process can be intercepted by its
    34      parent, and its parent can use the other `ptrace' requests.  */
    35   PTRACE_TRACEME = 0,
    36 #define PT_TRACE_ME PTRACE_TRACEME
    37 
    38   /* Return the word in the process's text space at address ADDR.  */
    39   PTRACE_PEEKTEXT = 1,
    40 #define PT_READ_I PTRACE_PEEKTEXT
    41 
    42   /* Return the word in the process's data space at address ADDR.  */
    43   PTRACE_PEEKDATA = 2,
    44 #define PT_READ_D PTRACE_PEEKDATA
    45 
    46   /* Return the word in the process's user area at offset ADDR.  */
    47   PTRACE_PEEKUSER = 3,
    48 #define PT_READ_U PTRACE_PEEKUSER
    49 
    50   /* Write the word DATA into the process's text space at address ADDR.  */
    51   PTRACE_POKETEXT = 4,
    52 #define PT_WRITE_I PTRACE_POKETEXT
    53 
    54   /* Write the word DATA into the process's data space at address ADDR.  */
    55   PTRACE_POKEDATA = 5,
    56 #define PT_WRITE_D PTRACE_POKEDATA
    57 
    58   /* Write the word DATA into the process's user area at offset ADDR.  */
    59   PTRACE_POKEUSER = 6,
    60 #define PT_WRITE_U PTRACE_POKEUSER
    61 
    62   /* Continue the process.  */
    63   PTRACE_CONT = 7,
    64 #define PT_CONTINUE PTRACE_CONT
    65 
    66   /* Kill the process.  */
    67   PTRACE_KILL = 8,
    68 #define PT_KILL PTRACE_KILL
    69 
    70   /* Single step the process.
    71      This is not supported on all machines.  */
    72   PTRACE_SINGLESTEP = 9,
    73 #define PT_STEP PTRACE_SINGLESTEP
    74 
    75   /* Get all general purpose registers used by a processes.
    76      This is not supported on all machines.  */
    77    PTRACE_GETREGS = 12,
    78 #define PT_GETREGS PTRACE_GETREGS
    79 
    80   /* Set all general purpose registers used by a processes.
    81      This is not supported on all machines.  */
    82    PTRACE_SETREGS = 13,
    83 #define PT_SETREGS PTRACE_SETREGS
    84 
    85   /* Get all floating point registers used by a processes.
    86      This is not supported on all machines.  */
    87    PTRACE_GETFPREGS = 14,
    88 #define PT_GETFPREGS PTRACE_GETFPREGS
    89 
    90   /* Set all floating point registers used by a processes.
    91      This is not supported on all machines.  */
    92    PTRACE_SETFPREGS = 15,
    93 #define PT_SETFPREGS PTRACE_SETFPREGS
    94 
    95   /* Attach to a process that is already running. */
    96   PTRACE_ATTACH = 16,
    97 #define PT_ATTACH PTRACE_ATTACH
    98 
    99   /* Detach from a process attached to with PTRACE_ATTACH.  */
    100   PTRACE_DETACH = 17,
    101 #define PT_DETACH PTRACE_DETACH
    102 
    103   /* Get all extended floating point registers used by a processes.
    104      This is not supported on all machines.  */
    105    PTRACE_GETFPXREGS = 18,
    106 #define PT_GETFPXREGS PTRACE_GETFPXREGS
    107 
    108   /* Set all extended floating point registers used by a processes.
    109      This is not supported on all machines.  */
    110    PTRACE_SETFPXREGS = 19,
    111 #define PT_SETFPXREGS PTRACE_SETFPXREGS
    112 
    113   /* Continue and stop at the next (return from) syscall.  */
    114   PTRACE_SYSCALL = 24
    115 #define PT_SYSCALL PTRACE_SYSCALL
    116 };
    117 
    118 /* Perform process tracing functions.  REQUEST is one of the values
    119    above, and determines the action to be taken.
    120    For all requests except PTRACE_TRACEME, PID specifies the process to be
    121    traced.
    122 
    123    PID and the other arguments described above for the various requests should
    124    appear (those that are used for the particular request) as:
    125      pid_t PID, void *ADDR, int DATA, void *ADDR2
    126    after REQUEST.  */
    127 #if _MIPS_SIM == _ABIN32
    128 __extension__ extern long long int ptrace
    129   (enum __ptrace_request __request, ...) __THROW;
    130 #else
    131 extern long int ptrace (enum __ptrace_request __request, ...) __THROW;
    132 #endif
    133 
    134 __END_DECLS
    135 
    136 #endif /* _SYS_PTRACE_H */
Note: See TracBrowser for help on using the repository browser.