Page 3 of 4

Re: the understanding about the 'line'

PostPosted: Thu Oct 31, 2013 11:27 am
by bobguo
This is some dump under RMODE ANY:
COMPLETION CODE      SYSTEM = 0C4      REASON CODE = 00000010           
                                                                       
  PSW AT ENTRY TO ABEND   078C0000  00DD2EAC  ILC  04  INTC  0010       
PSW ADDRESS 00DD2EAC AT TIME OF ERROR DOES NOT POINT TO AN ACTIVE MODULE
...
IEA995I SYMPTOM DUMP OUTPUT  333                           
SYSTEM COMPLETION CODE=0C4  REASON CODE=00000010           
 TIME=10.03.02  SEQ=06443  CPU=0000  ASID=0017             
 PSW AT TIME OF ERROR  078C0000   00DD2EAC  ILC 4  INTC 10
   NO ACTIVE MODULE FOUND                                 
   NAME=UNKNOWN                                           
   DATA AT PSW  00DD2EA6 - 1B224111  0000BF27  10014770   
   GR 0: FD000008   1: 00600E9C                           
      2: 00000000   3: 00DD24CA                           
      4: 008EA188   5: 008FCD08                           
      6: 92600E9C   7: 00F75000                           
      8: 00000000   9: 80FFC89C                           
      A: 008FCDC8   B: 008EA188                           
      C: 92600E8E   D: 12600FB4                           
      E: 90DD2510   F: 008EA188                           
 END OF SYMPTOM DUMP


first of all, i'm sorry for more questions about it.
1. when the abend happened, this program should run with rmode=31, but why AMODE bit in the PSW is 0?
2. my source code uses R12 as base register, why 'C: 92600E8E' right now? i thought it should be 'C: 12600E8E'
3. in general, when 'PSW ADDRESS 00DD2EAC AT TIME OF ERROR DOES NOT POINT TO AN ACTIVE MODULE' appeared, i can NOT find anything useful from dump, can you share some experiences about it?
thanks.

Bob

Re: the understanding about the 'line'

PostPosted: Thu Oct 31, 2013 3:03 pm
by steve-myers
bobguo wrote:This is some dump under RMODE ANY:
COMPLETION CODE      SYSTEM = 0C4      REASON CODE = 00000010           
                                                                       
  PSW AT ENTRY TO ABEND   078C0000  00DD2EAC  ILC  04  INTC  0010       
PSW ADDRESS 00DD2EAC AT TIME OF ERROR DOES NOT POINT TO AN ACTIVE MODULE
...
IEA995I SYMPTOM DUMP OUTPUT  333                           
SYSTEM COMPLETION CODE=0C4  REASON CODE=00000010           
 TIME=10.03.02  SEQ=06443  CPU=0000  ASID=0017             
 PSW AT TIME OF ERROR  078C0000   00DD2EAC  ILC 4  INTC 10
   NO ACTIVE MODULE FOUND                                 
   NAME=UNKNOWN                                           
   DATA AT PSW  00DD2EA6 - 1B224111  0000BF27  10014770   
   GR 0: FD000008   1: 00600E9C                           
      2: 00000000   3: 00DD24CA                           
      4: 008EA188   5: 008FCD08                           
      6: 92600E9C   7: 00F75000                           
      8: 00000000   9: 80FFC89C                           
      A: 008FCDC8   B: 008EA188                           
      C: 92600E8E   D: 12600FB4                           
      E: 90DD2510   F: 008EA188                           
 END OF SYMPTOM DUMP


first of all, i'm sorry for more questions about it.
1. when the abend happened, this program should run with rmode=31, but why AMODE bit in the PSW is 0?
2. my source code uses R12 as base register, why 'C: 92600E8E' right now? i thought it should be 'C: 12600E8E'
3. in general, when 'PSW ADDRESS 00DD2EAC AT TIME OF ERROR DOES NOT POINT TO AN ACTIVE MODULE' appeared, i can NOT find anything useful from dump, can you share some experiences about it?
thanks.

Bob
  1. If "should run" and "is running" are different, it is the job of the analyst to deduce the reason.
  2. It is the job of the analyst to deduce what is going on.
  3. The DATA AT PSW is sometimes useful. In this case we see

    SR 2,2
    LA 1,0(,1)
    ICM 2,B'0111',0(1)
    BNE ???

    Now you are probably wondering how I deduced this. After a while an analyst will memorize some of the more common op-codes. It took me a little before I recalled BF, and 1B bothered me a little, but 41 and 47 are so common I didn't have to think about them. The 7 condition mask in 4770 is also very common.

    The LA is dangerous since it is AMODE dependent. This used to be common in AMODE 24 code, but it is dangerous. Only the first two bytes of the BNE are in the Symptom dump, but even if they were there the last 2 bytes of the BNE would not be very useful.

    Since INTC is not 04, the error was detected by the paging hardware rather than a storage key issue, so the ICM is the failing instruction. Had INTC been 04, the LA would have (in theory, since LA does not access storage) been the failing instruction.

    ICM is a single address instruction; its base register is 1, which was compromised by the LA instruction.
This is about all we will get out of the Symptom dump. Obviously you need a more complete dump.

Re: the understanding about the 'line'

PostPosted: Fri Nov 01, 2013 1:50 am
by steve-myers
Going back to your question 2. Go to the description of BASR in Principles of Operation. I am confident you will discover the reason the high order bit is on in register 12. This is a fact of life; the analyst must get used to it.

Re: the understanding about the 'line'

PostPosted: Fri Nov 01, 2013 3:17 am
by steve-myers
  1. You have been told repeatedly that any DCB you are going to use must be below the 16 meg line.
  2. When you linked the module you received a message like this: IEW2635I 4B34 THREE BYTE ADCON IN SECTION xxxxxx AT OFFSET xxxxxxxx IN CLASS B_TEXT WITH RMODE=ANY CANNOT BE RELOCATED. It seems to me the load module should be marked not executable, but it isn't. This message should also say DO NOT ATTEMPT TO EXECUTE THIS LOAD MODULE!
  3. Your save area setup does not match any example you have been given. Why?

Re: the understanding about the 'line'

PostPosted: Fri Nov 01, 2013 11:34 am
by bobguo
You have been told repeatedly that any DCB you are going to use must be below the 16 meg line.

yes, i know DCB must be below the line.
This dump was triggered by design. My purpose is that if someday i hit some problems like this again, what i should do. and right now i got it:
When you linked the module you received a message like this: IEW2635I 4B34 THREE BYTE ADCON IN SECTION xxxxxx AT OFFSET xxxxxxxx IN CLASS B_TEXT WITH RMODE=ANY CANNOT BE RELOCATED. It seems to me the load module should be marked not executable, but it isn't. This message should also say DO NOT ATTEMPT TO EXECUTE THIS LOAD MODULE!

Re: the understanding about the 'line'

PostPosted: Fri Nov 01, 2013 11:45 am
by bobguo
In fact, now i am very interested in what you said,
Since INTC is not 04, the error was detected by the paging hardware rather than a storage key issue, so the ICM is the failing instruction. Had INTC been 04, the LA would have (in theory, since LA does not access storage) been the failing instruction.

ICM is a single address instruction; its base register is 1, which was compromised by the LA instruction.

Could you please explain it in detail? Web link or book is all appreciate!

Re: the understanding about the 'line'

PostPosted: Fri Nov 01, 2013 7:39 pm
by steve-myers
Find interruption code (INTC) and instruction length code (ILC). Principles of Operation is a good place to start.

Re: the understanding about the 'line'

PostPosted: Sat Nov 02, 2013 8:08 am
by steve-myers
After some thought and experimentation; I think the ABEND is in OPEN, not your program. A more complete system dump would be required to verify this theory, but that's the working idea. In any event, a complete dump is too large to post here.

The experimentation I did was to determine what the Binder and program fetch do with 3-byte address constants when the module is above the 16-meg line. It appears the Binder and program fetch store the low order 24 bits of the correct address in the address constant.

There are several reasons to support the idea the failure is in OPEN.
  • Just the fact the system is in AMODE 24.
  • An analysis of the PSW clearly shows supervisor state rather than problem state. The first two bytes are X'078C'. The 07 is the interrupt mask, which is usually 7. 8 is the protect key; it's 8 because OPEN presumably is getting data from user storage. Almost all user programs run in key 8. C is miscellaneous flags. One of the flags - which is not on - is for problem state. I use this so infrequently I had to look it up! If you were in problem state the C would be D.
What I think is happening is OPEN is trying to load the DCB address from the OPEN parameter list and getting lost because the address is no good because it's not complete

Re: the understanding about the 'line'

PostPosted: Mon Nov 04, 2013 11:44 am
by bobguo
As i understood, RMODE is enough to tell computer where it should be resided, below the line or above? I can not think up the purpose of AMODE.

AMODE is a hint to the Assembler and Linkage Editor to tell the OS to EXECUTE the program in 24/31/64 bit.
RMODE is a hint to the Assembler and Linkage Editor to tell the OS to LOAD the program below 16M or 2G, if needed.

For example,

AMODE 24
RMODE 24

or

AMODE 31
RMODE 24

What's the difference between them? Can AMODE tell computer some information more?


Sincerely,
Bob

Re: the understanding about the 'line'

PostPosted: Mon Nov 04, 2013 3:48 pm
by steve-myers
AMODE is addressing mode; an AMODE 31 program can look at data anywhere in virtual storage.

RMODE is residence mode. For a program or load module RMODE specifies where in storage the system can load a program. Obviously there are incompatibilities: RMODE 31 and AMODE 24 won't work. In practice, in fact, there is no RMODE 31 in a load module; RMODE 31 is always translated to RMODE ANY.

I have to admit I was terribly confused by this for quite a long time, in part because there was a restriction about running the GET/PUT/READ/WRITE/CHECK macros in AMODE 31. Thinking about it I wonder if the restriction referred to arbitrarily making pre MVS/XA load modules AMODE 31 without rebuilding them using the MVS/XA versions of the macros. Originally the macros used -

L 15,48(1)
BALR 14,15 or BAL 14,offset(15)

The L has been replaced by

SLR 15,15
ICM 15,7,49(1)

I wonder if there was some problem making the modules the macros call AMODE 31 compatible, or if the issue was the macro expansion.

Many of my recent programs are AMODE 31, RMODE 24, mostly to ensure the DCBs are below the line.