|
@@ -61,13 +61,29 @@ ENTRY(fsys_getpid)
|
|
|
.prologue
|
|
|
.altrp b6
|
|
|
.body
|
|
|
+ add r17=IA64_TASK_GROUP_LEADER_OFFSET,r16
|
|
|
+ ;;
|
|
|
+ ld8 r17=[r17] // r17 = current->group_leader
|
|
|
add r9=TI_FLAGS+IA64_TASK_SIZE,r16
|
|
|
;;
|
|
|
ld4 r9=[r9]
|
|
|
- add r8=IA64_TASK_TGID_OFFSET,r16
|
|
|
+ add r17=IA64_TASK_TGIDLINK_OFFSET,r17
|
|
|
;;
|
|
|
and r9=TIF_ALLWORK_MASK,r9
|
|
|
- ld4 r8=[r8] // r8 = current->tgid
|
|
|
+ ld8 r17=[r17] // r17 = current->group_leader->pids[PIDTYPE_PID].pid
|
|
|
+ ;;
|
|
|
+ add r8=IA64_PID_LEVEL_OFFSET,r17
|
|
|
+ ;;
|
|
|
+ ld4 r8=[r8] // r8 = pid->level
|
|
|
+ add r17=IA64_PID_UPID_OFFSET,r17 // r17 = &pid->numbers[0]
|
|
|
+ ;;
|
|
|
+ shl r8=r8,IA64_UPID_SHIFT
|
|
|
+ ;;
|
|
|
+ add r17=r17,r8 // r17 = &pid->numbers[pid->level]
|
|
|
+ ;;
|
|
|
+ ld4 r8=[r17] // r8 = pid->numbers[pid->level].nr
|
|
|
+ ;;
|
|
|
+ mov r17=0
|
|
|
;;
|
|
|
cmp.ne p8,p0=0,r9
|
|
|
(p8) br.spnt.many fsys_fallback_syscall
|
|
@@ -126,15 +142,25 @@ ENTRY(fsys_set_tid_address)
|
|
|
.altrp b6
|
|
|
.body
|
|
|
add r9=TI_FLAGS+IA64_TASK_SIZE,r16
|
|
|
+ add r17=IA64_TASK_TGIDLINK_OFFSET,r16
|
|
|
;;
|
|
|
ld4 r9=[r9]
|
|
|
tnat.z p6,p7=r32 // check argument register for being NaT
|
|
|
+ ld8 r17=[r17] // r17 = current->pids[PIDTYPE_PID].pid
|
|
|
;;
|
|
|
and r9=TIF_ALLWORK_MASK,r9
|
|
|
- add r8=IA64_TASK_PID_OFFSET,r16
|
|
|
+ add r8=IA64_PID_LEVEL_OFFSET,r17
|
|
|
add r18=IA64_TASK_CLEAR_CHILD_TID_OFFSET,r16
|
|
|
;;
|
|
|
- ld4 r8=[r8]
|
|
|
+ ld4 r8=[r8] // r8 = pid->level
|
|
|
+ add r17=IA64_PID_UPID_OFFSET,r17 // r17 = &pid->numbers[0]
|
|
|
+ ;;
|
|
|
+ shl r8=r8,IA64_UPID_SHIFT
|
|
|
+ ;;
|
|
|
+ add r17=r17,r8 // r17 = &pid->numbers[pid->level]
|
|
|
+ ;;
|
|
|
+ ld4 r8=[r17] // r8 = pid->numbers[pid->level].nr
|
|
|
+ ;;
|
|
|
cmp.ne p8,p0=0,r9
|
|
|
mov r17=-1
|
|
|
;;
|