Basic System Problem Analysis - August 2003
76
Case Study: Hang Memory Dump continued
$152 ($86) nmdat > pm_semaphores
ADDRESS OF SEMAPHORE WAITED ON: $b.88ae19b0
$154 ($86) nmdat > rm_semaphore b.88ae19b0
List of pins waiting on semaphore at $b.88ae19b0
$60 $6e $76 $7e $86 $8e $92 $96 $9a $9e $a2 $a6 $aa $ae
Pin $35 has an exclusive lock on shareable semaphore at
$b.88ae19b0
RECORD
SEM_INFO_WORD :
SEM_STATE : 2
SEM_LOCK : 1
SEM_SPEC : 4
SEM_CLASS : 39
SEM_OWNER : 35
SEM_OWNER_COUNT : 1
SEM_WAIT_COUNT : e
SEM_HEAD_WAITER : d3818280
SEM_TAIL_WAITER : d382ba80
END
The “SEM_HEAD_WAITER” and “SEM_TAIL_WAITER” fields are actually PIB
pointers formatted using the type PIB_TYPE.
The RM_SEMPHORE macro is a lot easier as it displays the list of pins that are currently
blocked waiting for this semaphore.
If you had wanted to manually get the address of the semaphore then you would do it this
way:
$166 ($35) nmdat > lev 4
$167 ($35) nmdat > dv psp-28,2
VIRT $480.41853b88 $ 0000000b 88ae18d0
The semaphore address is passed, as a long pointer to SEM_BLOCK so it will be found
at PSP-28 and PSP-24.
This is another of those “how can I know this without the source code” problems. So that
is why I am sharing it here J