source:
patches/glibc-20051107-mips_nptl-1.patch@
b237cbc
Last change on this file since b237cbc was 69cde8d, checked in by , 19 years ago | |
---|---|
|
|
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 30 30 #define FUTEX_WAKE 1 31 31 #define FUTEX_REQUEUE 3 32 32 #define FUTEX_CMP_REQUEUE 4 33 #define FUTEX_WAKE_OP 5 34 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) 33 35 34 36 /* Initializer for compatibility lock. */ 35 37 #define LLL_MUTEX_LOCK_INITIALIZER (0) … … 39 41 INTERNAL_SYSCALL_DECL (__err); \ 40 42 long int __ret; \ 41 43 __ret = INTERNAL_SYSCALL (futex, __err, 4, \ 42 ( futexp), FUTEX_WAIT, (val), 0);\44 (long) (futexp), FUTEX_WAIT, (val), 0); \ 43 45 INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ 44 46 }) 45 47 … … 48 50 INTERNAL_SYSCALL_DECL (__err); \ 49 51 long int __ret; \ 50 52 __ret = INTERNAL_SYSCALL (futex, __err, 4, \ 51 ( futexp), FUTEX_WAIT, (val), (timespec));\53 (long) (futexp), FUTEX_WAIT, (val), (timespec));\ 52 54 INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ 53 55 }) 54 56 … … 57 59 INTERNAL_SYSCALL_DECL (__err); \ 58 60 long int __ret; \ 59 61 __ret = INTERNAL_SYSCALL (futex, __err, 4, \ 60 ( futexp), FUTEX_WAKE, (nr), 0);\62 (long) (futexp), FUTEX_WAKE, (nr), 0); \ 61 63 INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ 62 64 }) 63 65 … … 67 69 INTERNAL_SYSCALL_DECL (__err); \ 68 70 long int __ret; \ 69 71 __ret = INTERNAL_SYSCALL (futex, __err, 6, \ 70 ( futexp), FUTEX_CMP_REQUEUE, (nr_wake),\72 (long) (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ 71 73 (nr_move), (mutex), (val)); \ 72 74 INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ 73 75 }) 74 76 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 }) 75 89 76 90 static inline int __attribute__((always_inline)) 77 91 __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 266 266 " STRINGXP(PTR_ADDU) " $7, $7, " STRINGXP (PTRSIZE) " \n\ 267 267 # Make sure the stack pointer is aligned for _dl_init_internal.\n\ 268 268 and $2, $29, -2 * " STRINGXP(SZREG) "\n\ 269 " STRINGXP(PTR_S) " $29, - 4($2)\n\269 " STRINGXP(PTR_S) " $29, -" STRINGXP(SZREG) "($2)\n\ 270 270 " STRINGXP(PTR_SUBIU) " $29, $2, 32\n\ 271 271 " STRINGXP(SAVE_GP(16)) "\n\ 272 272 # Call the function to run the initializers.\n\ 273 273 jal _dl_init_internal\n\ 274 274 # 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\ 276 276 # Pass our finalizer function to the user in $2 as per ELF ABI.\n\ 277 277 " STRINGXP(PTR_LA) " $2, _dl_fini\n\ 278 278 # Jump to the user entry point.\n\ … … 336 336 # endif 337 337 { 338 338 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;343 339 344 340 switch (r_type) 345 341 { 346 342 case R_MIPS_TLS_DTPMOD64: 347 343 case R_MIPS_TLS_DTPMOD32: 348 344 if (sym_map) 349 *(ElfW( Word) *)reloc_addr = sym_map->l_tls_modid;345 *(ElfW(Addr) *)reloc_addr = sym_map->l_tls_modid; 350 346 break; 351 347 352 348 case R_MIPS_TLS_DTPREL64: 353 349 case R_MIPS_TLS_DTPREL32: 354 *(ElfW( Word) *)reloc_addr += TLS_DTPREL_VALUE (sym);350 *(ElfW(Addr) *)reloc_addr += TLS_DTPREL_VALUE (sym); 355 351 break; 356 352 357 353 case R_MIPS_TLS_TPREL32: 358 354 case R_MIPS_TLS_TPREL64: 359 355 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); 361 357 break; 362 358 } 363 359 -
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 219 219 socklen_t msg_namelen; /* Length of address data. */ 220 220 221 221 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. */ 223 223 224 224 void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ 225 s ocklen_t msg_controllen; /* Ancillary data buffer length. */225 size_t msg_controllen; /* Ancillary data buffer length. */ 226 226 227 227 int msg_flags; /* Flags on received message. */ 228 228 }; … … 270 270 271 271 __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg 272 272 + CMSG_ALIGN (__cmsg->cmsg_len)); 273 if ((unsigned char *) (__cmsg + 1) > =((unsigned char *) __mhdr->msg_control274 273 if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control 274 + __mhdr->msg_controllen) 275 275 || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) 276 276 > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) 277 277 /* No more entries. */ … … 284 284 <linux/socket.h>. */ 285 285 enum 286 286 { 287 SCM_RIGHTS = 0x01 ,/* Transfer file descriptors. */287 SCM_RIGHTS = 0x01 /* Transfer file descriptors. */ 288 288 #define SCM_RIGHTS SCM_RIGHTS 289 289 #ifdef __USE_BSD 290 SCM_CREDENTIALS = 0x02,/* Credentials passing. */290 , SCM_CREDENTIALS = 0x02 /* Credentials passing. */ 291 291 # define SCM_CREDENTIALS SCM_CREDENTIALS 292 292 #endif 293 __SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */294 293 }; 295 294 296 295 /* 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 1 ifeq ($(subdir),socket) 2 CFLAGS-recv.c += -fexceptions 3 CFLAGS-send.c += -fexceptions 4 endif 5 6 ifeq ($(subdir),nptl) 7 CFLAGS-recv.c += -fexceptions 8 CFLAGS-send.c += -fexceptions 9 endif -
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 66 66 #define INTERNAL_SYSCALL_ERRNO(val, err) (val) 67 67 68 68 #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) 70 72 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...) \ 72 78 ({ \ 73 79 long _sys_result; \ 74 80 \ 75 81 { \ 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"); \ 78 84 __asm__ volatile ( \ 79 85 ".set\tnoreorder\n\t" \ 80 "li\t$2, %2\t\t\t# " #name "\n\t"\86 cs_init \ 81 87 "syscall\n\t" \ 82 88 ".set reorder" \ 83 89 : "=r" (__v0), "=r" (__a3) \ 84 : "i" (SYS_ify(name))\90 : input \ 85 91 : __SYSCALL_CLOBBERS); \ 86 92 err = __a3; \ 87 93 _sys_result = __v0; \ … … 89 95 _sys_result; \ 90 96 }) 91 97 92 #define internal_syscall1(n ame, err, arg1)\98 #define internal_syscall1(ncs_init, cs_init, input, err, arg1) \ 93 99 ({ \ 94 100 long _sys_result; \ 95 101 \ 96 102 { \ 97 register long long __v0 asm("$2") ;\103 register long long __v0 asm("$2") ncs_init; \ 98 104 register long long __a0 asm("$4") = (long long) arg1; \ 99 105 register long long __a3 asm("$7"); \ 100 106 __asm__ volatile ( \ 101 107 ".set\tnoreorder\n\t" \ 102 "li\t$2, %3\t\t\t# " #name "\n\t"\108 cs_init \ 103 109 "syscall\n\t" \ 104 110 ".set reorder" \ 105 111 : "=r" (__v0), "=r" (__a3) \ 106 : "r" (__a0), "i" (SYS_ify(name))\112 : input, "r" (__a0) \ 107 113 : __SYSCALL_CLOBBERS); \ 108 114 err = __a3; \ 109 115 _sys_result = __v0; \ … … 111 117 _sys_result; \ 112 118 }) 113 119 114 #define internal_syscall2(n ame, err, arg1, arg2)\120 #define internal_syscall2(ncs_init, cs_init, input, err, arg1, arg2) \ 115 121 ({ \ 116 122 long _sys_result; \ 117 123 \ 118 124 { \ 119 register long long __v0 asm("$2") ;\125 register long long __v0 asm("$2") ncs_init; \ 120 126 register long long __a0 asm("$4") = (long long) arg1; \ 121 127 register long long __a1 asm("$5") = (long long) arg2; \ 122 128 register long long __a3 asm("$7"); \ 123 129 __asm__ volatile ( \ 124 130 ".set\tnoreorder\n\t" \ 125 "li\t$2, %4\t\t\t# " #name "\n\t"\131 cs_init \ 126 132 "syscall\n\t" \ 127 133 ".set\treorder" \ 128 134 : "=r" (__v0), "=r" (__a3) \ 129 : "r" (__a0), "r" (__a1), "i" (SYS_ify(name))\135 : input, "r" (__a0), "r" (__a1) \ 130 136 : __SYSCALL_CLOBBERS); \ 131 137 err = __a3; \ 132 138 _sys_result = __v0; \ … … 134 140 _sys_result; \ 135 141 }) 136 142 137 #define internal_syscall3(n ame, err, arg1, arg2, arg3)\143 #define internal_syscall3(ncs_init, cs_init, input, err, arg1, arg2, arg3) \ 138 144 ({ \ 139 145 long _sys_result; \ 140 146 \ 141 147 { \ 142 register long long __v0 asm("$2") ;\148 register long long __v0 asm("$2") ncs_init; \ 143 149 register long long __a0 asm("$4") = (long long) arg1; \ 144 150 register long long __a1 asm("$5") = (long long) arg2; \ 145 151 register long long __a2 asm("$6") = (long long) arg3; \ 146 152 register long long __a3 asm("$7"); \ 147 153 __asm__ volatile ( \ 148 154 ".set\tnoreorder\n\t" \ 149 "li\t$2, %5\t\t\t# " #name "\n\t"\155 cs_init \ 150 156 "syscall\n\t" \ 151 157 ".set\treorder" \ 152 158 : "=r" (__v0), "=r" (__a3) \ 153 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))\159 : input, "r" (__a0), "r" (__a1), "r" (__a2) \ 154 160 : __SYSCALL_CLOBBERS); \ 155 161 err = __a3; \ 156 162 _sys_result = __v0; \ … … 158 164 _sys_result; \ 159 165 }) 160 166 161 #define internal_syscall4(n ame, err, arg1, arg2, arg3, arg4)\167 #define internal_syscall4(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4) \ 162 168 ({ \ 163 169 long _sys_result; \ 164 170 \ 165 171 { \ 166 register long long __v0 asm("$2") ;\172 register long long __v0 asm("$2") ncs_init; \ 167 173 register long long __a0 asm("$4") = (long long) arg1; \ 168 174 register long long __a1 asm("$5") = (long long) arg2; \ 169 175 register long long __a2 asm("$6") = (long long) arg3; \ 170 176 register long long __a3 asm("$7") = (long long) arg4; \ 171 177 __asm__ volatile ( \ 172 178 ".set\tnoreorder\n\t" \ 173 "li\t$2, %5\t\t\t# " #name "\n\t"\179 cs_init \ 174 180 "syscall\n\t" \ 175 181 ".set\treorder" \ 176 182 : "=r" (__v0), "+r" (__a3) \ 177 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))\183 : input, "r" (__a0), "r" (__a1), "r" (__a2) \ 178 184 : __SYSCALL_CLOBBERS); \ 179 185 err = __a3; \ 180 186 _sys_result = __v0; \ … … 182 188 _sys_result; \ 183 189 }) 184 190 185 #define internal_syscall5(n ame, err, arg1, arg2, arg3, arg4, arg5)\191 #define internal_syscall5(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5) \ 186 192 ({ \ 187 193 long _sys_result; \ 188 194 \ 189 195 { \ 190 register long long __v0 asm("$2") ;\196 register long long __v0 asm("$2") ncs_init; \ 191 197 register long long __a0 asm("$4") = (long long) arg1; \ 192 198 register long long __a1 asm("$5") = (long long) arg2; \ 193 199 register long long __a2 asm("$6") = (long long) arg3; \ … … 195 201 register long long __a4 asm("$8") = (long long) arg5; \ 196 202 __asm__ volatile ( \ 197 203 ".set\tnoreorder\n\t" \ 198 "li\t$2, %5\t\t\t# " #name "\n\t"\204 cs_init \ 199 205 "syscall\n\t" \ 200 206 ".set\treorder" \ 201 207 : "=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) \ 204 209 : __SYSCALL_CLOBBERS); \ 205 210 err = __a3; \ 206 211 _sys_result = __v0; \ … … 208 213 _sys_result; \ 209 214 }) 210 215 211 #define internal_syscall6(n ame, err, arg1, arg2, arg3, arg4, arg5, arg6)\216 #define internal_syscall6(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6) \ 212 217 ({ \ 213 218 long _sys_result; \ 214 219 \ 215 220 { \ 216 register long long __v0 asm("$2") ;\221 register long long __v0 asm("$2") ncs_init; \ 217 222 register long long __a0 asm("$4") = (long long) arg1; \ 218 223 register long long __a1 asm("$5") = (long long) arg2; \ 219 224 register long long __a2 asm("$6") = (long long) arg3; \ … … 222 227 register long long __a5 asm("$9") = (long long) arg6; \ 223 228 __asm__ volatile ( \ 224 229 ".set\tnoreorder\n\t" \ 225 "li\t$2, %5\t\t\t# " #name "\n\t"\230 cs_init \ 226 231 "syscall\n\t" \ 227 232 ".set\treorder" \ 228 233 : "=r" (__v0), "+r" (__a3) \ 229 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),\230 "r" (__a 4), "r" (__a5)\234 : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ 235 "r" (__a5) \ 231 236 : __SYSCALL_CLOBBERS); \ 232 237 err = __a3; \ 233 238 _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 66 66 #define INTERNAL_SYSCALL_ERRNO(val, err) (val) 67 67 68 68 #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) 70 72 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...) \ 72 78 ({ \ 73 79 long _sys_result; \ 74 80 \ 75 81 { \ 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"); \ 78 84 __asm__ volatile ( \ 79 85 ".set\tnoreorder\n\t" \ 80 "li\t$2, %2\t\t\t# " #name "\n\t"\86 cs_init \ 81 87 "syscall\n\t" \ 82 88 ".set reorder" \ 83 89 : "=r" (__v0), "=r" (__a3) \ 84 : "i" (SYS_ify(name))\90 : input \ 85 91 : __SYSCALL_CLOBBERS); \ 86 92 err = __a3; \ 87 93 _sys_result = __v0; \ … … 89 95 _sys_result; \ 90 96 }) 91 97 92 #define internal_syscall1(n ame, err, arg1)\98 #define internal_syscall1(ncs_init, cs_init, input, err, arg1) \ 93 99 ({ \ 94 100 long _sys_result; \ 95 101 \ 96 102 { \ 97 register long __v0 asm("$2") ;\103 register long __v0 asm("$2") ncs_init; \ 98 104 register long __a0 asm("$4") = (long) arg1; \ 99 105 register long __a3 asm("$7"); \ 100 106 __asm__ volatile ( \ 101 107 ".set\tnoreorder\n\t" \ 102 "li\t$2, %3\t\t\t# " #name "\n\t"\108 cs_init \ 103 109 "syscall\n\t" \ 104 110 ".set reorder" \ 105 111 : "=r" (__v0), "=r" (__a3) \ 106 : "r" (__a0), "i" (SYS_ify(name))\112 : input, "r" (__a0) \ 107 113 : __SYSCALL_CLOBBERS); \ 108 114 err = __a3; \ 109 115 _sys_result = __v0; \ … … 111 117 _sys_result; \ 112 118 }) 113 119 114 #define internal_syscall2(n ame, err, arg1, arg2)\120 #define internal_syscall2(ncs_init, cs_init, input, err, arg1, arg2) \ 115 121 ({ \ 116 122 long _sys_result; \ 117 123 \ 118 124 { \ 119 register long __v0 asm("$2") ;\125 register long __v0 asm("$2") ncs_init; \ 120 126 register long __a0 asm("$4") = (long) arg1; \ 121 127 register long __a1 asm("$5") = (long) arg2; \ 122 128 register long __a3 asm("$7"); \ 123 129 __asm__ volatile ( \ 124 130 ".set\tnoreorder\n\t" \ 125 "li\t$2, %4\t\t\t# " #name "\n\t"\131 cs_init \ 126 132 "syscall\n\t" \ 127 133 ".set\treorder" \ 128 134 : "=r" (__v0), "=r" (__a3) \ 129 : "r" (__a0), "r" (__a1), "i" (SYS_ify(name))\135 : input, "r" (__a0), "r" (__a1) \ 130 136 : __SYSCALL_CLOBBERS); \ 131 137 err = __a3; \ 132 138 _sys_result = __v0; \ … … 134 140 _sys_result; \ 135 141 }) 136 142 137 #define internal_syscall3(n ame, err, arg1, arg2, arg3)\143 #define internal_syscall3(ncs_init, cs_init, input, err, arg1, arg2, arg3) \ 138 144 ({ \ 139 145 long _sys_result; \ 140 146 \ 141 147 { \ 142 register long __v0 asm("$2") ;\148 register long __v0 asm("$2") ncs_init; \ 143 149 register long __a0 asm("$4") = (long) arg1; \ 144 150 register long __a1 asm("$5") = (long) arg2; \ 145 151 register long __a2 asm("$6") = (long) arg3; \ 146 152 register long __a3 asm("$7"); \ 147 153 __asm__ volatile ( \ 148 154 ".set\tnoreorder\n\t" \ 149 "li\t$2, %5\t\t\t# " #name "\n\t"\155 cs_init \ 150 156 "syscall\n\t" \ 151 157 ".set\treorder" \ 152 158 : "=r" (__v0), "=r" (__a3) \ 153 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))\159 : input, "r" (__a0), "r" (__a1), "r" (__a2) \ 154 160 : __SYSCALL_CLOBBERS); \ 155 161 err = __a3; \ 156 162 _sys_result = __v0; \ … … 158 164 _sys_result; \ 159 165 }) 160 166 161 #define internal_syscall4(n ame, err, arg1, arg2, arg3, arg4)\167 #define internal_syscall4(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4) \ 162 168 ({ \ 163 169 long _sys_result; \ 164 170 \ 165 171 { \ 166 register long __v0 asm("$2") ;\172 register long __v0 asm("$2") ncs_init; \ 167 173 register long __a0 asm("$4") = (long) arg1; \ 168 174 register long __a1 asm("$5") = (long) arg2; \ 169 175 register long __a2 asm("$6") = (long) arg3; \ 170 176 register long __a3 asm("$7") = (long) arg4; \ 171 177 __asm__ volatile ( \ 172 178 ".set\tnoreorder\n\t" \ 173 "li\t$2, %5\t\t\t# " #name "\n\t"\179 cs_init \ 174 180 "syscall\n\t" \ 175 181 ".set\treorder" \ 176 182 : "=r" (__v0), "+r" (__a3) \ 177 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name))\183 : input, "r" (__a0), "r" (__a1), "r" (__a2) \ 178 184 : __SYSCALL_CLOBBERS); \ 179 185 err = __a3; \ 180 186 _sys_result = __v0; \ … … 182 188 _sys_result; \ 183 189 }) 184 190 185 #define internal_syscall5(n ame, err, arg1, arg2, arg3, arg4, arg5)\191 #define internal_syscall5(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5) \ 186 192 ({ \ 187 193 long _sys_result; \ 188 194 \ 189 195 { \ 190 register long __v0 asm("$2") ;\196 register long __v0 asm("$2") ncs_init; \ 191 197 register long __a0 asm("$4") = (long) arg1; \ 192 198 register long __a1 asm("$5") = (long) arg2; \ 193 199 register long __a2 asm("$6") = (long) arg3; \ … … 195 201 register long __a4 asm("$8") = (long) arg5; \ 196 202 __asm__ volatile ( \ 197 203 ".set\tnoreorder\n\t" \ 198 "li\t$2, %5\t\t\t# " #name "\n\t"\204 cs_init \ 199 205 "syscall\n\t" \ 200 206 ".set\treorder" \ 201 207 : "=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) \ 204 209 : __SYSCALL_CLOBBERS); \ 205 210 err = __a3; \ 206 211 _sys_result = __v0; \ … … 208 213 _sys_result; \ 209 214 }) 210 215 211 #define internal_syscall6(n ame, err, arg1, arg2, arg3, arg4, arg5, arg6)\216 #define internal_syscall6(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6) \ 212 217 ({ \ 213 218 long _sys_result; \ 214 219 \ 215 220 { \ 216 register long __v0 asm("$2") ;\221 register long __v0 asm("$2") ncs_init; \ 217 222 register long __a0 asm("$4") = (long) arg1; \ 218 223 register long __a1 asm("$5") = (long) arg2; \ 219 224 register long __a2 asm("$6") = (long) arg3; \ … … 222 227 register long __a5 asm("$9") = (long) arg6; \ 223 228 __asm__ volatile ( \ 224 229 ".set\tnoreorder\n\t" \ 225 "li\t$2, %5\t\t\t# " #name "\n\t"\230 cs_init \ 226 231 "syscall\n\t" \ 227 232 ".set\treorder" \ 228 233 : "=r" (__v0), "+r" (__a3) \ 229 : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)),\230 "r" (__a 4), "r" (__a5)\234 : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ 235 "r" (__a5) \ 231 236 : __SYSCALL_CLOBBERS); \ 232 237 err = __a3; \ 233 238 _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 1 1 # File name Caller Syscall name Args Strong name Weak names 2 2 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 3 lseek - lseek Ci:iii __libc_lseek __lseek lseek __llseek llseek __libc_lseek64 __lseek64 lseek64 8 4 9 5 # semaphore and shm system calls 10 6 msgctl - msgctl i:iip __msgctl msgctl 11 7 msgget - msgget i:ii __msgget msgget 12 msgrcv - msgrcv i:ibnii__msgrcv msgrcv13 msgsnd - msgsnd i:ibni __msgsnd msgsnd8 msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv 9 msgsnd - msgsnd Ci:ibni __msgsnd msgsnd 14 10 shmat - shmat i:ipi __shmat shmat 15 11 shmctl - shmctl i:iip __shmctl shmctl 16 12 shmdt - 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, 20042 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/or6 modify it under the terms of the GNU Lesser General Public7 License as published by the Free Software Foundation; either8 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 of12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU13 Lesser General Public License for more details.14 15 You should have received a copy of the GNU Lesser General Public16 License along with the GNU C Library; if not, write to the Free17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA18 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 == _ABIN3233 __extension__ typedef long long int reg_type;34 #else35 typedef long int reg_type;36 #endif37 38 reg_type39 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 ensure72 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 ensure79 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 ensure86 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 #endif101 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, 20043 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/or7 modify it under the terms of the GNU Lesser General Public8 License as published by the Free Software Foundation; either9 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 of13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU14 Lesser General Public License for more details.15 16 You should have received a copy of the GNU Lesser General Public17 License along with the GNU C Library; if not, write to the Free18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA19 02111-1307 USA. */20 21 #ifndef _SYS_PTRACE_H22 #define _SYS_PTRACE_H 123 24 #include <features.h>25 #include <sgidefs.h>26 27 __BEGIN_DECLS28 29 /* Type of the REQUEST argument to `ptrace.' */30 enum __ptrace_request31 {32 /* Indicate that the process making this request should be traced.33 All signals received by this process can be intercepted by its34 parent, and its parent can use the other `ptrace' requests. */35 PTRACE_TRACEME = 0,36 #define PT_TRACE_ME PTRACE_TRACEME37 38 /* Return the word in the process's text space at address ADDR. */39 PTRACE_PEEKTEXT = 1,40 #define PT_READ_I PTRACE_PEEKTEXT41 42 /* Return the word in the process's data space at address ADDR. */43 PTRACE_PEEKDATA = 2,44 #define PT_READ_D PTRACE_PEEKDATA45 46 /* Return the word in the process's user area at offset ADDR. */47 PTRACE_PEEKUSER = 3,48 #define PT_READ_U PTRACE_PEEKUSER49 50 /* Write the word DATA into the process's text space at address ADDR. */51 PTRACE_POKETEXT = 4,52 #define PT_WRITE_I PTRACE_POKETEXT53 54 /* Write the word DATA into the process's data space at address ADDR. */55 PTRACE_POKEDATA = 5,56 #define PT_WRITE_D PTRACE_POKEDATA57 58 /* Write the word DATA into the process's user area at offset ADDR. */59 PTRACE_POKEUSER = 6,60 #define PT_WRITE_U PTRACE_POKEUSER61 62 /* Continue the process. */63 PTRACE_CONT = 7,64 #define PT_CONTINUE PTRACE_CONT65 66 /* Kill the process. */67 PTRACE_KILL = 8,68 #define PT_KILL PTRACE_KILL69 70 /* Single step the process.71 This is not supported on all machines. */72 PTRACE_SINGLESTEP = 9,73 #define PT_STEP PTRACE_SINGLESTEP74 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_GETREGS79 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_SETREGS84 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_GETFPREGS89 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_SETFPREGS94 95 /* Attach to a process that is already running. */96 PTRACE_ATTACH = 16,97 #define PT_ATTACH PTRACE_ATTACH98 99 /* Detach from a process attached to with PTRACE_ATTACH. */100 PTRACE_DETACH = 17,101 #define PT_DETACH PTRACE_DETACH102 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_GETFPXREGS107 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_SETFPXREGS112 113 /* Continue and stop at the next (return from) syscall. */114 PTRACE_SYSCALL = 24115 #define PT_SYSCALL PTRACE_SYSCALL116 };117 118 /* Perform process tracing functions. REQUEST is one of the values119 above, and determines the action to be taken.120 For all requests except PTRACE_TRACEME, PID specifies the process to be121 traced.122 123 PID and the other arguments described above for the various requests should124 appear (those that are used for the particular request) as:125 pid_t PID, void *ADDR, int DATA, void *ADDR2126 after REQUEST. */127 #if _MIPS_SIM == _ABIN32128 __extension__ extern long long int ptrace129 (enum __ptrace_request __request, ...) __THROW;130 #else131 extern long int ptrace (enum __ptrace_request __request, ...) __THROW;132 #endif133 134 __END_DECLS135 136 #endif /* _SYS_PTRACE_H */
Note:
See TracBrowser
for help on using the repository browser.