[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference hydra::axp-developer

Title:Alpha Developer Support
Notice:[email protected], 800-332-4786
Moderator:HYDRA::SYSTEM
Created:Mon Jun 06 1994
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:3722
Total number of notes:11359

3123.0. "Paston Chase Ltd - Point 18755" by KZIN::ASAP () Mon Feb 03 1997 06:36

    Company Name :  Paston Chase Ltd - Point 18755
    Contact Name :  
    Phone        :  44 1603502061
    Fax          :  44 1603502072
    Email        :  [email protected]
    Date/Time in :   3-FEB-1997 11:36:10
    Entered by   :  Nick Hudson
    SPE center   :  REO

    Category     :  vms
    OS Version   :  6.2
    System H/W   :  


    Brief Description of Problem:
    -----------------------------

From:	ESSB::ESSB::MRGATE::"ILO::ESSC::bsanting"  3-FEB-1997 10:38:18.06
To:	RDGENG::ASAP
CC:	
Subj:	18755 Paston Chase Ltd

From:	NAME: ESCTECH@ILO        
	TEL: (822-)6704        
	ADDR: ILO                <bsanting@ESSC@ILO>
To:	ASAP@RDGENG@MRGATE


Hello - 

POINT Log Number	18755


ASAP No: A60265
Paston Chase Ltd
Phone 44 1603502061
FAX 44 1603502072
EMAIL: [email protected]

Problem Statement		


Alpha AXP, OpenVMS 6.2, and the 'C' compiler.

The following section of code is within a routine that executes in kernel mode.
{
..
PCB *server_pcb;
MUTEX *io_database_mutex;
..
    server_pcb = CTL$GL_PCB;
    io_database_mutex = SCH_STD$IOLOCKW(server_pcb);
..
}
I'm certain that its the SCH_STD$IOLOCKW that is causing a crash.

The program produces a log file which I've copied verbatim below in case there
is anything useful there, ie the process PCB (which is found earlier in the 
program also using CTL$G_PCB) :-
Sat Feb  1 15:54:39, IRIS Server Initialized, Version 4.0-0
Sat Feb  1 15:54:40, Server_init, pages locked 00002000 to 00005FFF
Sat Feb  1 15:54:40, Server_init, Server process PCB = 80D76140
Sat Feb  1 15:54:40, Server_init, Common code address 80E00440
Sat Feb  1 15:54:40, Server_init, notify_creator
Sat Feb  1 15:54:40, Server_init, Server process PCB = 80D76140
Sat Feb  1 15:54:40, Server_init, Completed
Sat Feb  1 15:54:46, Record, Common file processing
Sat Feb  1 15:54:46, Record, DVH 00076000, DVR 00076078


Anal/system clue results show:

Crashdump Summary Information:
------------------------------
Crash Time:         1-FEB-1997 15:54:46.75
Bugcheck Type:     INVEXCEPTN, Exception while above ASTDEL
Node:              GREEN   (Standalone)
CPU Type:          DEC 3000 Model 300
VMS Version:       V6.2
Current Process:   IRIS Server
Current Image:     GREEN$DKA100:[SYS0.SYSCOMMON.][SYSEXE]IRIS_SERVER.EXE;6
Failing PC:        FFFFFFFF 8001D388
Failing PS:        00000000 00000803
Module:            SYSTEM_PRIMITIVES_MIN
Offset:            00009388

Boot Time:          1-FEB-1997 14:00:28.00
System Uptime:               0 01:54:18.75
Crash/Primary CPU: 00/00
Pagesize:          8 KByte (8192 bytes)
Physical Memory:   32 MByte (4096 PFNs)
Dumpfile Pagelets: 65536 blocks
Dump Flags:        olddump,writecomp,errlogcomp

Crashdump Summary Information:
------------------------------
EXE$GL_FLAGS:      poolpging,init,bugdump

Stack Pointers:
KSP = 00000000 7FF91C28   ESP = 00000000 7FF96000   SSP = 00000000 7FF9E000
USP = 00000000 7EF739C0

General Registers:
R0  = 40000000 00000000   R1  = 00000000 00000000   R2  = FFFFFFFF FFFFFFFD
R3  = FFFFFFFF 80C32840   R4  = 00000000 7FF91C80   R5  = 00000000 7FF91DE8
R6  = 00000000 7FF91E40   R7  = 00000000 00000803   R8  = 00000000 00000000
R9  = FFFFFFFF 821B32C8   R10 = 00000000 7FFBF800   R11 = 00000000 7FF781A2
R12 = 00000000 00000000   R13 = FFFFFFFF 80C25570   R14 = 00000000 00000000
R15 = 00000000 009AF3E0   R16 = 00000000 000001CC   R17 = 00000000 7FF91C80
R18 = 00000000 7FF91E40   R19 = 47FF041F 47FF041F   R20 = 00000000 00000004
R21 = 80D6012C 00000000   R22 = FFFFFFFF 80C04AB0   R23 = 00000000 00016000
R24 = FFFFFFFF 80D60000   AI  = 00000000 00000001   RA  = FFFFFFFF 8001CE94
PV  = FFFFFFFF 80C25570   R28 = 00000000 00008010   FP  = 00000000 7FF91EB0
PC  = FFFFFFFF 80044CBC   PS  = 28000000 00000800

Exception Frame:
R2  = 00000000 00006020   R3  = 00000000 00076000   R4  = 00000000 00000000
R5  = 00000000 00000090   R6  = 00000000 0001E510   R7  = 00000000 7FF91FC0
PC  = FFFFFFFF 8001D388   PS  = 00000000 00000803

Signal Array:
Arg Count    = 00000005
Condition    = 0000000C
Argument #2  = 00000000
Argument #3  = 00000008
Argument #4  = 8001D388
Argument #5  = 00000803

Mechanism Array:
Arguments    = 0000002B                  Establisher FP = 00000000 7FF91EB0
Flags        = 00000000                  Exception FP   = 00000000 7FF91E40
Depth        = FFFFFFFD                  Signal Array   = 00000000 7FF91DE8
R0  = FFFFFFFF 80C04AB0   R1  = 00000000 00008010   R16 = 00000000 00000001
R17 = 0000FE00 00007400   R18 = 00000000 00016084   R19 = 47FF041F 47FF041F
R20 = 00000000 00000004   R21 = 80D6012C 00000000   R22 = FFFFFFFF 80C04AB0
R23 = 00000000 00016000   R24 = FFFFFFFF 80D60000   R25 = 00000000 00000001
R26 = FFFFFFFF 8001CE94   R27 = FFFFFFFF 80C25570   R28 = 00000000 00008010

System Registers:
Page Table Base Register (PTBR)                           00000000 00000E70
Processor Base Register (PRBR)                            FFFFFFFF 80D2A000
Privileged Context Block Base (PCBB)                      00000000 00758080
System Control Block Base (SCBB)                          00000000 000001A9
Software Interrupt Summary Register (SISR)                00000000 00000000
Address Space Number (ASN)                                00000000 0000000D
AST Summary / AST Enable (ASTSR_ASTEN)                    00000000 0000000F
Floating-Point Enable (FEN)                               00000000 00000001
Interrupt Priority Level (IPL)                            00000000 00000008
Machine Check Error Summary (MCES)                        00000000 00000000
Virtual Page Table Base Register (VPTB)                   00000002 00000000

Failing Instruction:
SCH_STD$LOCKR_QUAD_C+000F8:     LDL             R27,#X0008(R4)

Instruction Stream (last 20 instructions):
SCH_STD$LOCKR_QUAD_C+000A8:     STL             R27,(SP)
SCH_STD$LOCKR_QUAD_C+000AC:     SUBQ            SP,#X0C,SP
SCH_STD$LOCKR_QUAD_C+000B0:     BIS             R31,#X03,R25
SCH_STD$LOCKR_QUAD_C+000B4:     LDL             R18,#X000C(SP)
SCH_STD$LOCKR_QUAD_C+000B8:     LDA             R27,#X03A0(R13)
SCH_STD$LOCKR_QUAD_C+000BC:     BSR             R26,#XFFFD48
SCH_STD$LOCKR_QUAD_C+000C0:     ADDQ            SP,#X10,SP
SCH_STD$LOCKR_QUAD_C+000C4:     LDQ             R28,(SP)
SCH_STD$LOCKR_QUAD_C+000C8:     LDQ             R0,#X0008(SP)
SCH_STD$LOCKR_QUAD_C+000CC:     LDQ             R1,#X0010(SP)
SCH_STD$LOCKR_QUAD_C+000D0:     LDQ             R13,#X0018(SP)
SCH_STD$LOCKR_QUAD_C+000D4:     ADDQ            SP,#X20,SP
SCH_STD$LOCKR_QUAD_C+000D8:     RET             R31,(R28)
SCH_STD$LOCKR_QUAD_C+000DC:     BIS             R31,R31,R31
SCH_STD$LOCKR_QUAD_C+000E0:     SUBQ            SP,#X20,SP
SCH_STD$LOCKR_QUAD_C+000E4:     STQ             R26,(SP)
SCH_STD$LOCKR_QUAD_C+000E8:     STQ             R0,#X0008(SP)
SCH_STD$LOCKR_QUAD_C+000EC:     STQ             R1,#X0010(SP)
SCH_STD$LOCKR_QUAD_C+000F0:     STQ             R13,#X0018(SP)
SCH_STD$LOCKR_QUAD_C+000F4:     BIS             R31,R27,R13
SCH_STD$LOCKR_QUAD_C+000F8:     LDL             R27,#X0008(R4)
SCH_STD$LOCKR_QUAD_C+000FC:     EXTBL           R27,#X02,R27
SCH_STD$LOCKR_QUAD_C+00100:     SUBQ            R27,#X0C,R17
SCH_STD$LOCKR_QUAD_C+00104:     BNE             R17,#X000020
SCH_STD$LOCKR_QUAD_C+00108:     LDL             R25,#X00E4(R4)

Thanks,

Ben


		   QED Qualitas Est Demonstrandum
		   ==============================
Ben Santing, Technical Consultant		Phone:  DTN 822 4330
European Customer Service Centre		Phone:  DTN 822 4269
Digital Equipment International B.V.		FAX:    DTN 822 4445

	     In replying, please use [email protected]


T.RTitleUserPersonal
Name
DateLines
3123.1KZIN::HUDSONThat&#039;s what I thinkMon Feb 03 1997 11:0348
From:	DEC:.REO.REOVTX::HUDSON       "[email protected] - UK Software
Partner Engineering 830-4121"  3-FEB-1997 16:02:32.72
To:	nm%vbormc::"[email protected]"
CC:	HUDSON
Subj:	RE:  18755 Paston Chase Ltd, system bugcheck

Hello,

Thanks for your question on the INVEXCEPTN bugcheck.

The instruction that appears to have failed is:

SCH_STD$LOCKR_QUAD_C+000F8:     LDL             R27,#X0008(R4)

Which is part of the MACRO-64 generated for the source line:

	CMPB	#DYN$C_PCB,PCB$B_TYPE(R4)	; CHECK FOR PCB

The INVEXCEPTN is an access violation (from the signal array):

Arg Count    = 00000005		- 5 args
Condition    = 0000000C		- arg #1, 0xC == "access violation"
Argument #2  = 00000000		- arg #2, 0
Argument #3  = 00000008		- arg #3, failing v/a
Argument #4  = 8001D388		- arg #4, failing pc
Argument #5  = 00000803		- arg #5, failing psl

The "LDL" instruction is attempting to read a location which is offset 8 bytes
from R4 (PCB$B_TYPE == 8).  From the Exception frame, the contents of R4 at the
time of the crash was 0.  This all fits with the accvio - i.e. attempting to
read address 8, which is an invalid address, while in kernel mode will cause a
bugcheck.

So the code is expecting that R4 will contain a PCB.  In the start of the code
for "SCH_STD$IOLOCKW", the first thing it does is to :

	MOVL	ARG$_PCB(AP),R4		; GET PCB INPUT

So it looks like R4 should be OK, assuming that the PCB was passed as an
argument.

From this, I can only conclude that when you're calling SCH_STD$IOLOCKW, you're
passing zero as a PCB address.

Regards

Nick Hudson
Digital Software Partner Engineering
3123.2KZIN::HUDSONThat&#039;s what I thinkMon Feb 10 1997 10:2938
From:	VBORMC::"[email protected]" "MAIL-11 Daemon" 10-FEB-1997 10:48:51.47
To:	[email protected]
CC:	[email protected]
Subj:	RE: FWD: Returned mail: Cannot send message for 5 days

Nick,

Declan Lennon had already forwarded me a copy, but thanks all the same.

I'm still struggling with this.  I have proved that the cmkrnl call and the 
sch_std$iolockw call work fine by writing a bit of 'Noddy' code.  However, 
there must be something in the real code that is causing a problem because it 
still crashes if I call it where I want to call it.  I'm in the process of 
'rolling forward' the call to try to isolate the problem.

Regards
Graham Mann
Paston Chase

% ====== Internet headers and postmarks (see DECWRL::GATEWAY.DOC) ======
% Received: from mail.vbo.dec.com (mail.vbo.dec.com [16.36.208.34]) by
vbormc.vbo.dec.com (8.7.3/8.7) with ESMTP id LAA07804 for
<[email protected]>; Mon, 10 Feb 1997 11:45:29 +0100
% Received: from server21.digital.fr (server21.digital.fr [193.56.15.21]) by
mail.vbo.dec.com (8.7.3/8.7) with ESMTP id LAA23849 for
<[email protected]>; Mon, 10 Feb 1997 11:50:15 +0100 (MET)
% Received: from GREEN.paston.co.uk (green.paston.co.uk [194.129.188.9]) by
server21.digital.fr (8.7.5/8.7) with SMTP id LAA20399 for
<[email protected]>; Mon, 10 Feb 1997 11:52:20 +0100 (MET)
% Received: by green.paston.co.uk (MX V4.1 AXP) id 1; Mon, 10 Feb 1997 10:48:27
ES
% Date: Mon, 10 Feb 1997 10:48:26 EST
% From: Graham Mann <[email protected]>
% Reply-To: [email protected]
% To: [email protected]
% CC: [email protected]
% Message-ID: <[email protected]>
% Subject: RE: FWD: Returned mail: Cannot send message for 5 days
3123.3KZIN::HUDSONThat&#039;s what I thinkTue Feb 11 1997 04:4245
From:	VBORMC::"[email protected]" "MAIL-11 Daemon" 11-FEB-1997 09:38:16.36
To:	[email protected]
CC:	[email protected]
Subj:	SCH$IOLOCK Crash

Nick,

I may have found the issue, and it agrees with your assesment, and the crash 
dump.
I've used the following which crashes in some procedures but not in others!

extern PCB *CTL$GL_PCB;				/* Own PCB address */

    server_pcb = CTL$GL_PCB;
    io_database_mutex = SCH_STD$IOLOCKW(server_pcb);
    SCH_STD$IOUNLOCK(server_pcb);

'server_pcb' does not always get the PCB value, it is sometimes set to zero.

The routine that fails has previously been locked into memory, does this 
explain it?
A work around appears to be to explicitly pass the PCB value to the proceedure.

Graham Mann
Paston Chase

% ====== Internet headers and postmarks (see DECWRL::GATEWAY.DOC) ======
% Received: from mail.vbo.dec.com (mail.vbo.dec.com [16.36.208.34]) by
vbormc.vbo.dec.com (8.7.3/8.7) with ESMTP id KAA09040 for
<[email protected]>; Tue, 11 Feb 1997 10:34:37 +0100
% Received: from server21.digital.fr (server21.digital.fr [193.56.15.21]) by
mail.vbo.dec.com (8.7.3/8.7) with ESMTP id KAA26382 for
<[email protected]>; Tue, 11 Feb 1997 10:39:22 +0100 (MET)
% Received: from GREEN.paston.co.uk (green.paston.co.uk [194.129.188.9]) by
server21.digital.fr (8.7.5/8.7) with SMTP id KAA29970 for
<[email protected]>; Tue, 11 Feb 1997 10:41:31 +0100 (MET)
% Received: by green.paston.co.uk (MX V4.1 AXP) id 1; Tue, 11 Feb 1997 09:37:55
ES
% Date: Tue, 11 Feb 1997 09:37:54 EST
% From: Graham Mann <[email protected]>
% Reply-To: [email protected]
% To: [email protected]
% CC: [email protected]
% Message-ID: <[email protected]>
% Subject: SCH$IOLOCK Crash
3123.4KZIN::HUDSONThat&#039;s what I thinkTue Feb 11 1997 05:0740
From:	DEC:.REO.REOVTX::HUDSON       "[email protected] - UK Software
Partner Engineering 830-4121" 11-FEB-1997 10:07:03.21
To:	nm%VBORMC::"[email protected]"
CC:	HUDSON
Subj:	RE: SCH$IOLOCK Crash

Hello Graham


>extern PCB *CTL$GL_PCB;				/* Own PCB address */
>
>    server_pcb = CTL$GL_PCB;
>    io_database_mutex = SCH_STD$IOLOCKW(server_pcb);
>    SCH_STD$IOUNLOCK(server_pcb);
>
>'server_pcb' does not always get the PCB value, it is sometimes set to zero.


The only reason I could think that "CTL$GL_PCB" might not be valid is if the
code thread concerned happens to be in interrupt mode at the time it reads that
location.  All the CTL$... symbols point at P1-space; P1-space is process
specific, and is only valid when you're running in process context.  From my
research, everyone seems to say that using CTL$GL_PCB is a valid way to obtain
your own PCB address; I can't see mention of anyone saying stuff like "be
careful because..."

>The routine that fails has previously been locked into memory, does this 
>explain it?

Only if it's been locked into memory because it's going to be called on the
interrupt stack.

>A work around appears to be to explicitly pass the PCB value to the proceedure.

If this is feasible, and you know you have a decent PCB value, then this sounds
a good idea.

Does this help?

Nick
3123.5KZIN::HUDSONThat&#039;s what I thinkTue Feb 11 1997 06:0634
From:	VBORMC::"[email protected]" "MAIL-11 Daemon" 11-FEB-1997 10:42:02.08
To:	[email protected]
CC:	[email protected]
Subj:	RE: SCH$IOLOCK Crash

Nick,

Yup I believe that it does, as long as I have a work around.
You can close this one.

Thanks again for your help.

Graham Mann
Paston Chase

% ====== Internet headers and postmarks (see DECWRL::GATEWAY.DOC) ======
% Received: from mail.vbo.dec.com (mail.vbo.dec.com [16.36.208.34]) by
vbormc.vbo.dec.com (8.7.3/8.7) with ESMTP id LAA12652 for
<[email protected]>; Tue, 11 Feb 1997 11:38:57 +0100
% Received: from server21.digital.fr (server21.digital.fr [193.56.15.21]) by
mail.vbo.dec.com (8.7.3/8.7) with ESMTP id LAA27619 for
<[email protected]>; Tue, 11 Feb 1997 11:43:43 +0100 (MET)
% Received: from GREEN.paston.co.uk (green.paston.co.uk [194.129.188.9]) by
server21.digital.fr (8.7.5/8.7) with SMTP id LAA26360 for
<[email protected]>; Tue, 11 Feb 1997 11:45:51 +0100 (MET)
% Received: by green.paston.co.uk (MX V4.1 AXP) id 1; Tue, 11 Feb 1997 10:42:15
ES
% Date: Tue, 11 Feb 1997 10:42:15 EST
% From: Graham Mann <[email protected]>
% Reply-To: [email protected]
% To: [email protected]
% CC: [email protected]
% Message-ID: <[email protected]>
% Subject: RE: SCH$IOLOCK Crash