the understanding about the 'line'



High Level Assembler(HLASM) for MVS & VM & VSE

Re: the understanding about the 'line'

Postby bobguo » Thu Oct 31, 2013 11:27 am

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
bobguo
 
Posts: 76
Joined: Thu Apr 26, 2012 11:18 am
Location: shanghai
Has thanked: 22 times
Been thanked: 0 time

Re: Re: the understanding about the 'line'

 

Re: the understanding about the 'line'

Postby steve-myers » Thu Oct 31, 2013 3:03 pm

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.
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

Re: the understanding about the 'line'

Postby steve-myers » Fri Nov 01, 2013 1:50 am

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.

These users thanked the author steve-myers for the post:
bobguo (Fri Nov 01, 2013 11:21 am)
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

Re: the understanding about the 'line'

Postby steve-myers » Fri Nov 01, 2013 3:17 am

  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?

These users thanked the author steve-myers for the post:
bobguo (Fri Nov 01, 2013 11:17 am)
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

Re: the understanding about the 'line'

Postby bobguo » Fri Nov 01, 2013 11:34 am

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!
bobguo
 
Posts: 76
Joined: Thu Apr 26, 2012 11:18 am
Location: shanghai
Has thanked: 22 times
Been thanked: 0 time

Re: the understanding about the 'line'

Postby bobguo » Fri Nov 01, 2013 11:45 am

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!
bobguo
 
Posts: 76
Joined: Thu Apr 26, 2012 11:18 am
Location: shanghai
Has thanked: 22 times
Been thanked: 0 time

Re: the understanding about the 'line'

Postby steve-myers » Fri Nov 01, 2013 7:39 pm

Find interruption code (INTC) and instruction length code (ILC). Principles of Operation is a good place to start.
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

Re: the understanding about the 'line'

Postby steve-myers » Sat Nov 02, 2013 8:08 am

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
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

Re: the understanding about the 'line'

Postby bobguo » Mon Nov 04, 2013 11:44 am

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
bobguo
 
Posts: 76
Joined: Thu Apr 26, 2012 11:18 am
Location: shanghai
Has thanked: 22 times
Been thanked: 0 time

Re: the understanding about the 'line'

Postby steve-myers » Mon Nov 04, 2013 3:48 pm

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.
steve-myers
Global moderator
 
Posts: 1885
Joined: Thu Jun 03, 2010 6:21 pm
Has thanked: 4 times
Been thanked: 197 times

PreviousNext

Return to Assembler

 


  • Related topics
    Replies
    Views
    Last post