Discussion:
[hercules-os380] MVS/380 2.0 - the next generation
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
With the TRKCALC intercept in place, I now
have all the technology I need for a MVS/380 2.0
that I am happy with. The required source code
is all in CVS, so if you're impatient, or I'm dead,
just mosey on down to http://mvs380.sourceforge.net
and grab the random bits of code you need,
like mvs380ss.jcl and svc120b.jcl and iewfetch.asm
and iefactrt.asm and various others.

I'm not going to build it immediately because
I'm waiting to see how REVIEW pans out, and
also Gerhard is still busy making enhancements
to MVSSUPA, so I will wait until he stops.

But I never want to retreat from the position
we are in right now.

First of all, let me tell you who is going to
win Miss America - it's the first person to
produce an ANY/ANY module. Even
experts who have worked on MVS for
decades have never even heard of this,
and even the Loch Ness Monster is
more believable. Even when I point them
to the IBM documentation (see below),
they just assume that someone must
have bumped IBM when they were
writing the manual.

When I was at school, someone came
in with a sick note "from their mother"
which said "John was not at school
today because I was sick", and when
the teacher challenged him as to why
his mother would say "I" instead of "he",
he countered with "someone must have
bumped her arm when she was writing it".
If that isn't worth 10 points for effort, I
don't know what is.

Anyway, from memory, back in the 1980s
with the IBM C/370 compiler, I believe I
first saw modules marked ANY/ANY
instead of 31/ANY, and I wasn't really
sure what the difference was. I started
on mainframes with MVS/XA so I have
always had AM31 available until I started
porting GCC to MVS 3.8j.

Then one day while working on PDOS/390
I was shocked when I accidentally ran an
AM24/RM24 module on PDOS/390 (which
always assumes modules are AM31/RMANY)
and it actually worked instead of abending.

I had in fact for many years resisted adding
system dependencies in my code, ie
checking CVTxxx and doing one thing for
MVS/XA and above and something else
for below. Or a separate module for I/O
routines which would be dynamically
loaded BTL so that the rest of the app
could be ATL. I wanted to keep the design
simple and I'd rather produce a MVS 3.8j
module and a z/OS module and an
MVS/380 module.

I was fairly content with producing AM24
modules and relying on upward compatibility
to ensure that module still worked on z/OS.
So yes, I had one module to cover all, but
it was certainly sad seeing "24" for modules
destined for z/OS. Not that utilities like
copyfile and hexdump require more than
16 MiB of memory, but still, it was sad.

But when my AM24 module was successfully
running as AM31 (ie the exact same module),
I realized that I had in my hands *at least*
an AMODE ANY, RMODE 24 application.
Which is pretty bloody fantastic already.
All my due diligence of keeping the code
simple for as long as possible had paid off.
The S/370 build, which, obviously, did no
BSMs, was also capable of running AM31
on z/OS, since as of late MVS/ESA, all the
I/O routines were bimodal.

But given that I had previously ensured
that I also had an S/390 build, which
produced a 31/ANY load module for z/OS,
I wondered whether I was now in a
position to use the S/390 target (which
also does no BSMs, obviously) and have
it run on MVS 3.8j. And I was elated to
see that I could indeed do that. That
means I only need a single physical
load module to cover *both* MVS 3.8j
and z/OS *perfectly* (ignoring AM64,
anyway). With zero kludging whatsoever.
I don't need to test the CVT or have
dynamic loading.

If you inspect the actual assembler code
that goes into one of my modules, it is
very very simple (well, if you ignore the
massive features added by Gerhard).
It is plain old S/370 code. Just doing
OPENs and stuff like that. No dynamic
testing for 24 vs 31. Just plain old
OPEN that you would see in any old
MVS 3.8j program. Even getting memory
it uses a plain old GETMAIN RU which
defaults to LOC=RES, just like you would
see on any old MVS 3.8j program. The
module becomes 31/ATL capable just
because of the fortuitous fact that LOC=RES
actually gets ATL memory if your module
is marked RMODE ANY. ie it looks like luck.
ie if an MVS 3.8j programmer had simply
written code a certain way in 1980, before
OS/390 existed, and then woke up one
day during the OS/390 era and decided to
mark the module 31/ANY, saying "I wonder
what will happen?", it would have magically
worked.

Well, almost, anyway. In 1980 he would have
also had to say "I like to see clean registers
in all my dumps" and have changed the
various IBM macros (READ/NOTE/etc) so
that they used ICM '0111' instead of "L"
when loading a 24-bit address.

That's magic. If that doesn't win Miss
America, nothing will.

This magical ability to use "PDS" and just
magically convert a module from 24/24
to 31/ANY is what is actually an ANY/ANY
module. For 34 years, IBM has been
documenting *in their z/OS manuals* how
a program can still run on MVS/370. That's
right. Even though MVS/370 stopped being
supported decades ago, IBM has still been
documenting how to get your modules to
run cleanly on MVS 3.8j and z/OS at the
same time. In the hope that one day,
someone would actually produce an
ANY/ANY module. Presumably some time
after someone captured and slaughtered
the Loch Ness Monster once and for all.

While something trivial like IEFBR14
could have been marked ANY/ANY at
any point since MVS/XA was released,
any remotely normal utility that opens
a file could not be marked this way,
because the IBM routines were only
made bimodal in late MVS/ESA. Before
then programmers were expected to
compensate for this shortcoming
themselves, by doing their own BSM
before doing a READ. I don't know why
IBM couldn't have just put the BSM
into their own routines instead of
expecting every programmer to do
that themselves, but nevermind, by
late MVS/ESA they were finally doing
it sensibly. I don't know when the macros
were cleaned up, perhaps earlier than
the I/O routines themselves. And of
course, by that time, MVS 3.8j was no
longer being used, nor did it even run
on the same hardware that MVS/XA
and above ran on.

Let me quote from the z/OS manual
referenced below, as you won't believe
me unless you see it for yourself:

"Execute entirely in 24-bit addressing mode on an MVS/370 system"

That's right. Even in z/OS manuals, IBM
is *still* documenting what an ultimate
load module actually looks like.

Theoretically people may be accidentally
creating ANY/ANY load modules on z/OS
to this day. If for whatever reason they
have been using "GETMAIN R" instead
of LOC=BELOW, they are in fact meeting
MVS 3.8j specifications to get BTL memory.
And if they have been using
GETMAIN RU with no LOC= parameter
to get their ATL memory, on the assumption
that they will be marking the load module
RMODE ANY so it will work out fine, then
once again they are not exceeding the
MVS 3.8j documentation, and have every
right to expect their load module to work
on MVS 3.8j - *officially*. It is true that
MVS 3.8j fortuitously allows and ignores
extra undocumented options, but anyone
working from the documentation without
access to the old hardware that could
have run MVS 3.8j wouldn't know that,
and it's breaking the rules even if it does
happen to allow it.

There is one more practical exception.
For a module to work ATL on z/OS,
it is still necessary for the EOF routine
to reside and be executed in AM24
BTL. But rather than having a dynamically
loaded module to do this, it is far
neater, in my opinion, to simply
allocate some BTL storage and copy
the EOF code from ATL to BTL.

And an extension of that, the DCB
OPEN exit also needs to able to
handle being invoked as AM24,
and thus that needs to be copied
BTL, or more practically it needs to
have a stub copied BTL which does
a BSM to switch into AM31 so that
it can then run your ATL code. BUT
this complication only needs to be
executed if you find (e.g. by inspecting
R15 or doing a LA) that your module
resides ATL. So although the BSM
needs to *assemble* and exist *in
your load module*, it will never
actually be executed on MVS 3.8j.

And thus a practical ANY/ANY was born.

I have been able to build ANY/ANY modules
for a year or two now, but I haven't yet
released a new version of GCCMVS/PDPCLIB
that will do this, because I was holding out
for a bit more technology.

Even though ANY/ANY modules are beautiful
enough to win Miss America, they won't
actually run as AM31 on either MVS/XA or
MVS/380 1.x, because in both cases the
OS I/O routines are not bimodal. To me, the
solution to that problem is to simply mark
modules 24/24 and let them run as AM24
on both MVS/XA and MVS/380 1.x, and if
you don't like that, upgrade to either OS/390
or above or MVS/380 2.0 or above.

But of course, that means I need to produce
an MVS/380 2.0 that is capable of running
an unkludged 31-bit z/OS load module.
Note that if a z/OS programmer inspects
the internal technical details of one of my
ANY/ANY modules, I want him to come
away agreeing that it is totally clean and
a definite candidate for Miss America.
What that means is I don't want the *load
module* to be kludged. I don't mind if
the load module has some severe
limitations (or doesn't run at all in fact)
on MVS/380, so long as z/OS and
MVS 3.8j are totally clean from a
technical inspection point of view.

If anyone has any complaints about
the module's performance on MVS/380
(any version) I expect them to just
mark the module 24/24 and they are
no worse off than they were with
MVS 3.8j.

But if you have some *select
applications* that are currently
ANY/ANY load modules, and you
can't afford z/OS, and you are willing
to put up with a bit of foul odor, then
let's talk.

I am one of those people and my
application is GCC.

It is true that I have the ability to
build a S/380 version of GCC that will
work on both MVS/XA and all versions
of MVS/380, but I'd prefer to just ship
a single GCC module, and work around
any restrictions that may appear.

One such restriction is that the I/O
routines in beta MVS/380 2.0 have
not been updated to support tapes,
so if you wish to run GCC as 31-bit
on MVS/380 2.0 you must give GCC
a disk file, not a tape file. Again, if
you don't like that, feel free to mark
GCC as AM24 and it will happily
read your tape file, but your tape
file must contain a small program,
because a large program will run
out of memory when run AM24.

That's fine. I can live with that. My
important compiles all compile from
disk datasets, so I will copy any programs
on tape onto disk before trying to compile
them. No problem. And of course, people
using bootleg z/OS have no problem with
this either. So a single load module is
all I need. And although I intend to *build*
copyfile and hexdump etc etc as ANY/ANY
modules so that they look totally beautiful
on both MVS 3.8j and z/OS, I may well
choose to mark them all as 24/24 on
MVS/380 2.0, so that e.g. copyfile can
operate on a tape, which is something
that I actually want.

Of course, in the future, e.g. MVS/380 2.1,
someone may contribute code to allow
the tape routines to be bimodal. Ideally
they would achieve this by taking the
available assembler code and then
doing disassemblies to update the
source code, prior to adding a BSM at
entry and exit. But if people (like me
sometimes) are too lazy to do
disassemblies and would like to just
chance their arm at using the old source
code we have available, and hope that
it is good enough, that's fine too. Let's
talk. Send me the new code, and if it
doesn't stop me from rebuilding GCC,
then that's probably fine for MVS/380 2.1.

Anyway, for an ANY/ANY module like
GCC to actually work on MVS/380 2.0
in any fashion at all, it needed a couple
of things that were available in MVS/XA,
but not in MVS/380 1.x.

1. The OS to respect the AMODE 31 bit
in the load module.

2. Don't attempt to allocate a huge amount
of memory as a heap, only allocate what
you actually need. ie multiple ATL GETMAINs.

Number 1 was achieved a year ago or
something, but it has been done in an
extremely crude manner which I hope
someone will fix in due course.

Number 2 was done in the last couple
of weeks by Gerhard.

For practical use, there was also one
other thing I wanted - ATL memory to
be cleaned up automatically when a
step ends, in case of either an abend
or a memory leak. I would really hate
it if I run a program once and it finishes
successfully, but run it again and it
complains about "out of memory error".
I expect the OS to clean this up
automatically, and if we don't have that
technology, then I prefer an alternative
solution which is to use a huge heap
(60 MB) and a crude SVC 120 that
just returns a fixed address all the time,
that gives the illusion that the OS is
cleaning up memory automatically. I
have been running with that illusion
for about a decade, but also in the
last couple of weeks Gerhard provided
the automatic cleanup solution I needed,
ie an update to IEFACTRT.

So now beta MVS/380 2.0 has everything
I need. I am happy to throw MVS/380 1.x
in the dustbin of history, along with MVS/XA,
and stick with running beautiful ANY/ANY
modules. I don't mind if MVS/380 2.0 is
not beautiful, but I do very much are about
my load modules.

Note that because all of my C programs
are built with PDPCLIB, in particular
MVSSUPA, which is the only place
that there is an interface to the operating
system, they are all basically identical.
Either everything works, or everything
fails. Since I'm only after ANY/ANY to
work, I have everything I need already.

Next we can begin negotiations for
*other* programs, like REVED, which
are more "icing on the cake" to me at
this point. REVED needs to run as
RMODE 24. In order to support that,
I actually need a new API in SVC120B
that allows me to say "this address
space has started running RM24
programs as AM31, which means all
future requests for LOC=RES memory
should come from BTL storage, and
if any app wants ATL storage they need
an explicit LOC=ANY on their GETMAIN
request". I would then need to call that
API from IEWFETCH. We don't have
that technology yet, but I can live
without it.

SVC120B is the name of the new SVC 120
intercept btw, but it also has the TRKCALC
intercept in it. BTW, with the working
TRKCALC, I have now recovered from
all the MVSSUPA changes that were
made in response to Peppe's change
requests.

Anyway, many of you are probably
totally confused about this RM24/ANY
issue. This is because of the crude
implementation. Because we do not
yet have the technology to load a
module ATL, and nor does the current
beta MVS/380 2.0 even have the
ability to dump ATL memory, so you
are half running blind if your AM31
app abends (yet another restriction
you must live with for now), I expect
to get ATL memory for LOC=RES
requests even for modules that are
physically BTL. This does not break
any rules. The GCC module is marked
RMODE ANY, and indeed, it does
LOC=RES requests and indeed it
gets ATL memory returned. Everything
is working perfectly fine from the
perspective of the programmer/user.

Note that this implementation differs
from z/OS, because z/OS has the
ability to actually physically load
modules ATL, and thus they can
simply look at the current PSW and
if the PSW shows an ATL address,
then only then will LOC=RES give an
ATL address. But this difference in
implementation is something internal
to both operating systems and no-one
else's business.

However, that means that I have to
document that AM31/RM24 programs
like REVED are not supported.

BUT, they might work anyway! Because
the problem only arises when you do a
LOC=RES memory request expecting
to get BTL memory. But if you do an
explicit LOC=BELOW, you will in fact
get BTL memory. I was under the
impression that REVED and REVIEW
never do LOC=RES calls, so it should
still run fine. But for some reason
REVED (but not REVIEW) is abending
when LOC=RES returns ATL memory.

To switch off this LOC=RES gets ATL
memory behavior, you just need to
reverse out this change:

http://mvs380.cvs.sourceforge.net/viewvc/mvs380/mvs380/source/misc/svc120b.jcl?r1=1.31&r2=1.32

That way REVED (with my zap), will
start working again.

GCC will still work too, so long as you
only compile small programs.

So with current technology, this is the
choice you need to make. You either
run GCC with ATL memory or you run
REVED with ATL memory.

Note that even with LOC=RES getting
BTL storage, REVED works, but after
successfully saving the data, it abends.
I haven't produced a dump for that yet,
as it may be fixed by the macro changes.

So that's where we stand today. From
my point of view, it's Nirvana. Because
the actual work I wish to do is to both
build and run GCC using ATL memory
to produce beautiful ANY/ANY modules,
of which GCC is one such module. Yes,
I could do exactly that on a bootleg z/OS
too, but I prefer to do it on the non-bootleg
MVS/380 2.0,

Other people may wish to edit large
files (more than 16 MiB) using reved.
That is now possible too, if they don't
mind ignoring the abend on exit. And
MVS/380 2.0 isn't finalized yet, so at
this point it is not clear how many of
those restrictions mentioned above
can be lifted before the new release.

BFN. Paul.




https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieaa600/iea3a6_AMODE_and_RMODE_combinations_at_execution_time.htm

3.
The attributes AMODE ANY/RMODE ANY take on a special meaning when used together. (This meaning might seem to disagree with the meaning of either taken alone.) A module with the AMODE ANY/RMODE ANY attributes will execute on either an MVS/370 or a system that uses 31-bit addressing if the module is designed to:
Use no facilities that are unique.
Execute entirely in 31-bit addressing mode on a system that uses 31-bit addressing and return control to its caller in 31-bit addressing mode. (The AMODE could be different from invocation to invocation.)
Execute entirely in 24-bit addressing mode on an MVS/370 system.
The linkage editor and loader accept this combination from the object module or load module but not from the PARM field of the linkage editor EXEC statement or the linkage editor MODE control statement. The linkage editor converts AMODE ANY/RMODE ANY to AMODE 31/RMODE ANY.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
But I never want to retreat from the position
we are in right now.
And the mvssupa as it currently stands will
presumably require updates to PDOS/3x0
too. It is my intention that mvssupa,
MVS/380 2.x and PDOS/3x0 should all
mature in tandem, such that at all times,
an ANY/ANY module can be produced
and run sufficiently well on all supported
environments, not just z/OS.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Note that without the ANY/ANY concept,
I would have instead needed to produce
2 versions of everything I produce. One
24/24 for MVS 3.8j and one 31/ANY for
z/OS.

That was in fact what I originally expected
to have to do for eternity.

Except that since most of my products
don't actually need more than 16 MiB
of memory I was just going to produce
a 24/24 version.

Not sure how good that would be for
products like diff. Perhaps they run
out of memory if diffing two 20 MB
files. No idea. Don't really care.
ANY/ANY totally bins the 24/24
version that I would have otherwise
considered producing for the benefit
of hobbyists running MVS 3.8j.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
There's no such thing as ANY/ANY because you can't have AMODE 24 RMODE 31.

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
There's no such thing as ANY/ANY because
you can't have AMODE 24 RMODE 31.
See what I mean? Even when I provide a
link to an IBM manual that documents
the meaning of ANY/ANY (hint, it's NOT
what you wrote above), people keep
insisting that someone must have bumped
IBM's hand while they were writing the
manual because ANY/ANY is patentably
impossible, and there's more chance of
the Loch Ness Monster being real.

And how many decades have you been
using MVS and never heard of the
ANY/ANY concept?

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
From your very own link:

"This combination is invalid because an AMODE 24 module cannot reside above
16 megabytes."

Nobody bumped IBM's hand.

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
There's no such thing as ANY/ANY because
you can't have AMODE 24 RMODE 31.
See what I mean? Even when I provide a
link to an IBM manual that documents
the meaning of ANY/ANY (hint, it's NOT
what you wrote above), people keep
"This combination is invalid because an AMODE 24 module cannot reside above 16 megabytes."
That is note 1 which is in reference to an attempt
to have AM24 and RMANY, which IBM documents
(correctly) as invalid. That has nothing at all to do
with note 3 which is in reference to combine
AMANY and RMANY, which is valid and more
complicated than the others.
Nobody bumped IBM's hand.
So when IBM said that ANY/ANY is valid,
with a meaning different from the one you
gave, they did that deliberately, not because
someone bumped their hand?
OK Ill play along. You say you have a load
module marked any/any. What does AMBLIST say?
No, that's what the load module *technically is*,
and you can put that in all your assembler code,
ie AMODE ANY + RMODE ANY as assembler
instructions, and it accepts that fine. I'm not
sure what happens after that though. IBM
further says something along the lines of
"You can also give that combination as linkage
editor commands", which I'm guessing
means you can place some sort of command
in the same place you type "INCLUDE SYSLIB(XXX)".

Here's the wording they use:

"The linkage editor and loader accept this combination from the object module or load module"

I don't know what that technically means - "from
the load module".


But as IBM noted in note 3:

The linkage editor converts AMODE ANY/RMODE ANY to AMODE 31/RMODE ANY

They don't explain why they do that, but
that's what they do. Maybe it's because
everyone's brains would otherwise freeze
if they saw ANY/ANY, and it is harmless
to mark it 31/ANY because the flags will
be ignored on MVS 3.8j anyway so there's
no harm.


Regardless, no matter what IBM is up to,
the *concept* exists of a module that works
on *both* MVS 3.8j *and* z/OS. What else
can you possibly call it? A 24/24&31/ANY
module? Yes, that would work if you had
enough bits available to note down more
than 1 AM/RM combination that this
module was capable of. But instead they
chose to use ANY/ANY, for a module that
can run as both AM24 and AM31 depending
on the environment and both BTL and ATL
depending on the environment. That is
*exactly* what the modules I am now
producing are capable of. THAT is Nirvana.
If you can't stand to call it ANY/ANY, that's
fine. Call it Nirvana. This is the ultimate
expression of a load module using 32-bit
registers. One single load module that
works perfectly and unkludged on both
MVS 3.8j and z/OS. The Holy Grail if
you will.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
"the *concept* exists of a module that works
on *both* MVS 3.8j *and* z/OS."

Of course it does. That just means it runs 24/24. It's called upwards
compatibility.

It's the reason that COBOL business programs written in the '60s and '70s
by the IRS can still be run today to process federal income tax returns
from the american people.


"But instead they
chose to use ANY/ANY, for a module that
can run as both AM24 and AM31"

Once again, what happens if you say ANY/ANY?

"The linkage editor converts AMODE ANY/RMODE ANY to AMODE 31/RMODE ANY"

See ... the system will not let you have ANY/ANY. IBM is even telling you
that. If you try, you end up with AM31.

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
the *concept* exists of a module that works
on *both* MVS 3.8j *and* z/OS.
Of course it does. That just means it runs 24/24.
It's called upwards compatibility.
No, ANY/ANY is much more than that.
It runs 31/ATL on z/OS, not 24/24.
Post by Joe Monk ***@gmail.com [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
But instead they
chose to use ANY/ANY, for a module that
can run as both AM24 and AM31
Once again, what happens if you say ANY/ANY?
Where? The assembler accepts it
fine, and it runs as AM31 and ATL
on z/OS.
Post by Joe Monk ***@gmail.com [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
The linkage editor converts AMODE ANY/RMODE ANY
to AMODE 31/RMODE ANY"
See ... the system will not let you have ANY/ANY.
SOME places don't accept it, specifically
the linkage editor *PARM*, but not other
places in the linkage editor. But other
places, like the assembler, accept it fine.

And REGARDLESS of WHERE it is
accepted the CONCEPT exists of an
ANY/ANY module, and I haven't heard
you give better terminology to describe
a module that works on MVS 3.8j AND
on z/OS (31-bit ATL). IBM chose to
use ANY/ANY to describe this, and I
am happy with their choice of terminology.
You are free to come up with your own
name, e.g. Nirvana.
Post by Joe Monk ***@gmail.com [hercules-os380]
IBM is even telling you that. If you try, you end up with AM31.
Of course, because that is where an ANY/ANY
module will end up running on z/OS. It will end
up as AM31 and ATL. That is exactly what an
ANY/ANY module means, when running on
z/OS. When running on MVS 3.8j it is instead
24/24.

What is so hard to understand about that, and
if you object to IBM's terminology, please
provide an alternate terminology. Note that
a module that works fine as 24/24 is NOT
technically 31/ANY, even if it is marked as
such. Because it is NOT required to be run
in AM31, as you will find out if you take
one of my ANY/ANY modules to MVS 3.8j
and try running it. You will find it works
JUST FINE in AM24. So even if I (or IBM)
happens to mark the physical module as
AM31, it is in fact ANY/ANY as per IBM
documentation. It matches IBM documentation
where IBM talks about executing on BOTH
MVS/370 and z/OS. They didn't document
MVS/370 just for fun, and it's very different
from 31/ANY which is separately documented
and is a different concept.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Of course it does. That just means it runs 24/24. It's called upwards compatibility.
It's the reason that COBOL business
programs written in the '60s and '70s
by the IRS can still be run today to
process federal income tax returns
from the american people.
And if they had had a little bit of foresight,
maybe those exact same load modules
could have been running 31/ATL on z/OS
now that the extra memory has been
made available. That would alleviate any
problems with a shrinking BTL memory
space, and also more memory potentially
being required to support the growing
American population.

Did you ever wonder why those modules
can't be marked 31/ANY on z/OS and be
run unchanged using ATL memory? Did
you ever wonder what would ideally have
been done if you could go back in time
with what we know now?

The fact that we are supporting MVS 3.8j
now, for unpredicted reasons, is
essentially us going back in time, and at
least getting PDPCLIB right, with what
we now know.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
BTW... in MVS 3.8J there is no such thing as AMODE/RMODE. That is a concept
that came about with MVS/XA.

Your consistent talk about AMODE/RMODE ignores this basic fact.

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
BTW... in MVS 3.8J there is no such thing
as AMODE/RMODE. That is a concept that
came about with MVS/XA.
Your consistent talk about AMODE/RMODE
ignores this basic fact.
So someone bumped IBM when they were
writing the manual about MVS/370 with respect
to AMODE and RMODE?

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
Here's the linker manual for all flavors of OS/VS (including VS2 3.7, aka
MVS). Please find and cite the reference to AMODE/RMODE.

http://www.bitsavers.org/pdf/ibm/370/OS_VS/GC26-3813-5_OS_VS_Linkage_Editor_and_Loader_Aug78.pdf

In addition, here is the assembler programmer's guide. Please find and cite
the reference to AMODE/RMODE.

http://www.bitsavers.org/pdf/ibm/370/OS_VS/GC33-4021-4_OS_VS_Assembler_Programmers_Guide_Sep82.pdf

By contrast, here is the MVS/370 linker guide. You can find references to
AMODE/RMODE on pages 18 and 43.

http://www.bitsavers.org/pdf/ibm/370/MVS/GC26-4061-1_MVS_370_Linkage_Editor_Users_Guide_Dec85.pdf

So now hopefully you understand the reference to MVS/370 in the links you
are quoting from z/OS. MVS/370 is NOT MVS 3.8J. They are two separate
things.

Joe
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
BTW... in MVS 3.8J there is no such thing
as AMODE/RMODE. That is a concept that
came about with MVS/XA.
Your consistent talk about AMODE/RMODE
ignores this basic fact.
So someone bumped IBM when they were
writing the manual about MVS/370 with respect
to AMODE and RMODE?
BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Here's the linker manual for all flavors
of OS/VS (including VS2 3.7, aka MVS).
Please find and cite the reference to AMODE/RMODE.
I didn't claim that there was a reference
to AMODE/RMODE in those manuals.
The concept still exists though. It is
24/24. It just wasn't mentioned because
there was no choice.
Post by Joe Monk ***@gmail.com [hercules-os380]
In addition, here is the assembler
programmer's guide. Please find and
cite the reference to AMODE/RMODE.
Same deal as above. It was defaulting
to 24/24 with no way to override that.
Post by Joe Monk ***@gmail.com [hercules-os380]
By contrast, here is the MVS/370 linker guide.
Thanks. On page 82 they have the syntax
I was after previously. ie in the same place
that you would have INCLUDE SYSLIB(XXX)
you can put:

MODE AMODE(ANY),RMODE(ANY)

maybe not in MVS/370, but the z/OS manual
suggests that it works there, even if it does
end up converting it to AM31 when marking
the load module (maybe - I'm pretty sure
I have seen NCALs marked ANY/ANY before
on MVS/XA).

It would be good if our AM31 version of
IEWL could cope with the above syntax
to be compatible with z/OS.
Post by Joe Monk ***@gmail.com [hercules-os380]
So now hopefully you understand the
reference to MVS/370 in the links you
are quoting from z/OS. MVS/370 is
NOT MVS 3.8J. They are two separate things.
I thought MVS/370 was a rebadging of
the MVS 3.8j-like systems?

Regardless, even if what you say is true,
we should still be talking about how to
make our load modules work GREAT
on MVS/370 (which we supposedly
don't have) as well as GREAT on z/OS, and
THEN that allows us to run the MVS/370
modules on MVS 3.8j and they still work GREAT.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
So now hopefully you understand the
reference to MVS/370 in the links you
are quoting from z/OS. MVS/370 is
NOT MVS 3.8J. They are two separate things.
I thought MVS/370 was a rebadging of
the MVS 3.8j-like systems?
https://en.wikipedia.org/wiki/MVS#MVS.2F370

"MVS/370 is a generic term for all versions of the MVS operating system prior to MVS/XA"


BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
"MVS/370 is a generic term for all versions of the MVS operating system
prior to MVS/XA"

If you want to start calling it that, then fine... Let's not say 3.8J
anymore.

Joe
Post by ***@yahoo.com.au [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
So now hopefully you understand the
reference to MVS/370 in the links you
are quoting from z/OS. MVS/370 is
NOT MVS 3.8J. They are two separate things.
I thought MVS/370 was a rebadging of
the MVS 3.8j-like systems?
https://en.wikipedia.org/wiki/MVS#MVS.2F370
"MVS/370 is a generic term for all versions of the MVS operating system prior to MVS/XA"
BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
MVS/370 is a generic term for all versions of
the MVS operating system prior to MVS/XA
If you want to start calling it that, then fine...
Let's not say 3.8J anymore.
3.8j is a specific version of MVS/370, and we
are heavily invested in that specific version
because we don't have later versions, and
no-one much is interested in earlier versions,
even if they have them. So it makes sense
to continue to talk about the specific version
that we use derivatives of.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
Well, IBM 370 machines also ran OS/360 21.8. Are we going to call that
MVS/370 also, if by definition MVS/370 includes all flavors of OS that ran
on 370 machines?

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Well, IBM 370 machines also ran OS/360
21.8. Are we going to call that MVS/370
also, if by definition MVS/370 includes all
flavors of OS that ran on 370 machines?
The definition in Wikipedia, which I agree
with, is all flavors of *MVS*, not *OS* that
ran on 370 machines.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
See ... OS/VS2 and MVS are the SAME thing! So if you say MVS/370, youre
reaching all the way back to OS/VS2.

So if you say we're going to exclude *OS* then you're excluding OS/VS2 MVS.
MVS is just slang for OS/VS2, like MVT is slang for OS/VS1, or OS/360 21.8
genned in MVT mode.

Joe
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
Well, IBM 370 machines also ran OS/360
21.8. Are we going to call that MVS/370
also, if by definition MVS/370 includes all
flavors of OS that ran on 370 machines?
The definition in Wikipedia, which I agree
with, is all flavors of *MVS*, not *OS* that
ran on 370 machines.
BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
See ... OS/VS2 and MVS are the SAME thing!
Sure! OS/VS2, *NOT* OS/360 or any other
flavor of OS like MVT.
Post by Joe Monk ***@gmail.com [hercules-os380]
So if you say MVS/370, youre reaching all the way back to OS/VS2.
Yes, that's right. AND NO FURTHER.
Post by Joe Monk ***@gmail.com [hercules-os380]
So if you say we're going to exclude *OS*
then you're excluding OS/VS2 MVS.
No, I'm only excluding OS versions that
are NOT MVS.
Post by Joe Monk ***@gmail.com [hercules-os380]
MVS is just slang for OS/VS2,
Not so much slang as IBM rebranding.
Post by Joe Monk ***@gmail.com [hercules-os380]
like MVT is slang for OS/VS1, or OS/360
21.8 genned in MVT mode.
Sure.

BFN. Paul.
Greg Price greg.price@optusnet.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
OS/VS2 and MVS are the SAME thing!
Mostly, but OS/VS2 Release 1 was not MVS - it became known as SVS after
MVS appeared.  This was before my time but is what numerous folks attest to.
Post by Joe Monk ***@gmail.com [hercules-os380]
So if you say MVS/370, youre reaching all the way back to OS/VS2.
Yes, back to that epoch...
Post by Joe Monk ***@gmail.com [hercules-os380]
So if you say we're going to exclude *OS* then you're excluding OS/VS2
MVS. MVS is just slang for  OS/VS2, like MVT is slang for OS/VS1, or
OS/360 21.8 genned in MVT mode.
Well, when I say OS in the mainframe context (not speaking for others) I
mean to differentiate it from VM and DOS (or "dinky OS") and other such
operating system families.  I consider MVS to part of the OS family of
operating systems.

When I say "MVS" I mean those IBM operating systems in the OS family
which have multiple address spaces.  This does not include any of the
OS/360 variants.  This does not include OS/VS1.  This does not include
SVS which was the first release of OS/VS2.

While OS/VS2 had a particular product identifier or PID (5734-VS2 IIRC)
later versions of MVS were shipped as different products with different
PIDs.

And I think we can all agree that MVT and OS/VS1 are two different
operating systems (but both are within the "OS family").

MVT is a variant of OS/360 - the most advanced variant - which replaced
partitions with regions and introduced TSO.  OS/360 does not use DAT and
so does not have virtual storage.  While OS/360 can run on System/370
hardware, MVS would not run on System/360 hardware in a fit.

VS1 is like MFT but introduces virtual storage so you can pretend to
have 16MB bolted on to you computer even when you really have much less,
thanks to the magic of paging.  MFT and VS1 do not have TSO.

SVS is like MVT but introduces virtual storage so you can pretend to
have 16MB bolted on to you computer even when you really have much less,
thanks to the magic of paging.  MVT and SVS and MVS can have TSO.

Because of the limited storage size available under MVT (OS/360 uses
real storage only, so it's whatever you paid for) and SVS (24-bit
address gives you 16MB) you generally could not dedicate virtual storage
address to each TSO user like you can under MVS.  So you would define
one or more TSO regions.  Perhaps these regions were of different sizes,
and folks only logged on to a big region if they needed that much
storage for their workload.

Only 1 TSO user at most per TSO region would be resident at any 1 time. 
When the TSO session entered a wait state, the user would be swapped or
"rolled" out, and the next user who had hit <enter> could then be
swapped or "rolled" in and be dispatched.

MVS did away with shared regions because every user could get their own
address space, raising TSO sessions to have equal status with started
tasks and batch jobs from the BCP p-o-v.

It was the general view of the user community that SVS was a dog. They
buggered up the access method I/O channel program handling and every I/O
incurred multiple times the overhead that it should have. This was fixed
in MVS and so MVS I/O ran as fast as it did under MVT, for practical
purposes.

Again, this was all before my time.  Thankfully I really only ever had
to deal with MVS (except for a VS1 system used to facilitate MVS<->VM
spooling (NJE) and VTAM comms) so if I got any details wrong then please
correct me.

Some ISVs used to market TSO replacements for application types which
housed multiple sessions in a single address space.  This was to
conserve resources because TSO was considered to be a heavy resource
user.  So to postpone a multi-million dollar upgrade, some shops used
these products instead.

Cheers,
Greg
Gerhard Postpischil gerhardp@charter.net [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
When I say "MVS" I mean those IBM operating systems in the OS family
which have multiple address spaces.  This does not include any of the
OS/360 variants.  This does not include OS/VS1.  This does not include
SVS which was the first release of OS/VS2.
While OS/VS2 had a particular product identifier or PID (5734-VS2 IIRC)
later versions of MVS were shipped as different products with different
PIDs.
We went from MVT on a 360/165 to SVS on a faster machine. Most pf our
customers used Wylbur, and nobody complained about slowdowns. They may
have been measurable, but they didn't seem to affect anyone. I never
ran MVS - we jumped directly to MVS/SP.


Gerhard Postpischil
Bradford, VT

---
This email has been checked for viruses by AVG.
http://www.avg.com
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
"The definition in Wikipedia, which I agree
with, is all flavors of *MVS*, not *OS* that
ran on 370 machines."

So then we're excluding OS/VS2 3.8J?

Joe
Post by ***@yahoo.com.au [hercules-os380]
Post by Joe Monk ***@gmail.com [hercules-os380]
Well, IBM 370 machines also ran OS/360
21.8. Are we going to call that MVS/370
also, if by definition MVS/370 includes all
flavors of OS that ran on 370 machines?
The definition in Wikipedia, which I agree
with, is all flavors of *MVS*, not *OS* that
ran on 370 machines.
BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
The definition in Wikipedia, which I agree
with, is all flavors of *MVS*, not *OS* that
ran on 370 machines."
So then we're excluding OS/VS2 3.8J?
Not at all. Because that is exactly what
IBM rebranded as MVS. They didn't
rebrand MVT as MVS. They didn't rebrand
MFT as MVS. They purely rebranded OS/VS2
as MVS, so that's the limit to how far back
we need to go when considering what
"MVS/370" is.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
OK Ill play along. You say you have a load module marked any/any. What does
AMBLIST say?

Joe
...
Greg Price greg.price@optusnet.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
First of all, let me tell you who is going to
win Miss America - it's the first person to
produce an ANY/ANY module. Even
experts who have worked on MVS for
decades have never even heard of this,
and even the Loch Ness Monster is
more believable. Even when I point them
to the IBM documentation (see below),
they just assume that someone must
have bumped IBM when they were
writing the manual.
Yes, I was not conscious of this attribute combination, but there it
is.  It has certainly been around for many years, but I don't know if it
has "always" existed since MVS/XA first appeared or whether it was
introduced later.

So, from reading the excerpt from the manual, it seems that source code like
MYPGM CSECT
MYPGM AMODE ANY
MYPGM RMODE ANY
is valid and would produce the the expected settings in the object deck
and in the CESD entry of the load module and the directory entry of the
load module.  That is, the Program Binder is happy enough to preserve
these settings when such object decks and load modules are input to the
Binder and will write them to the output load module.

But trying to get the Binder to force this setting combination by use of
program parameter settings or control statements will not be accepted.

AMODEANY can be used for programs which function correctly whether given
control in AM24 or AM31.
AMODE31 programs require AM31 on entry, which is where the z/OS version
of REVIEW is.

REVIEW also requires RMODE24, which makes things easier (for me).

The things it makes easier that come to mind pertain to DCB processing
(DCB exit list can be pre-coded, DCB exits do not have to be copied and
relocated BTL, no DCBE required to specify SYNAD and EODAD routines) and
TPUT (can TPUT constant text from the program without having to relocate
the text BTL).

There may well be other gotchas which I am not aware of because I never
tried it.  Perhaps TSO parsing is another?

Although I was trying to get an AMODEANY vibe going when I removed the
BASSM and BSM instructions from REVIEW, my penchant for chasing control
blocks (some of which ATL) precludes the use of that attribute under
z/OS.  The MVS/370 version of REVIEW is closer to being ANY/24 than the
z/OS version when running on z/OS, I think.

When the data set to be browsed by REVIEW is called 'ACTIVE' (must make
that work from RFE option 1 as well one day) virtual storage rather than
a data set is browsed.  Should I try to allow it to browse ATL storage?

Currently you can scroll up or down and issue FIND commands etc.  A FIND
ALL command will search the entire address space (16MB for 370, 2GB for
z).  Of course, some of the address space does not exist or its storage
is fetch protected.  Attempting to access such storage causes an S0C4
abend which is trapped by an ESTAE, allowing REVIEW to proceed to the
next page.  If the PIC is x'10' (decimal 16) then REVIEW proceeds
directly to the next segment (64KB for 370, 1MB for z).

Under OS/380, would an attempt to access ATL storage which has not been
GETMAINed abend?
If so, with PIC 4?
What's the PIC if trying to access storage which does not exist? (ie.
address higher than installed storage?)

BTW, while "MVS/370" probably means MVS 3.8 for practical purposes these
days, I'd say it covers from OS/VS2 Release 2 (the first MVS release I
believe) to MVS/SP 1.3.4 (was that the last? was that a JES release on
top of 1.3.3 BCP?).

Cheers,
Greg
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Yes, I was not conscious of this attribute combination, but there it
is. It has certainly been around for many years, but I don't know if it
has "always" existed since MVS/XA first appeared or whether it was
introduced later.
Yes, that's possible. It didn't mention
ANY/ANY as legal in the MVS/370
manual.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
So, from reading the excerpt from the manual, it seems that source code like
MYPGM CSECT
MYPGM AMODE ANY
MYPGM RMODE ANY
is valid
Yes, the S390 version of PDPCLIB has always
used that. But I don't know much about what
happens after.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
and would produce the the expected settings in the object deck
and in the CESD entry of the load module and the directory entry of the
load module. That is, the Program Binder is happy enough to preserve
these settings when such object decks and load modules are input to the
Binder and will write them to the output load module.
I think so, if you do it that way.

Unfortunately I'm only armed with IEWL
on MVS/380 2.0, so I am forced to use
AMODE 31, RMODE ANY to get my
module to look nice on z/OS.

Although I guess I could use "PDS" to
force the issue.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
But trying to get the Binder to force this setting combination by use of
program parameter settings or control statements will not be accepted.
I think control statements will work.
ie I expect:

MODE AMODE(ANY),RMODE(ANY)

to work. That's my reading of the IBM documentation.

Although my reading says that at some point
or other the ANY/ANY will be converted into
31/ANY by something.

But as I've mentioned, I'm pretty sure I've
seen NCALs marked ANY/ANY, and I don't
see how you can mark an NCAL as
ANY/ANY but not a proper load module.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
AMODEANY can be used for programs which function correctly whether given
control in AM24 or AM31.
I'm not sure how lenient that setting is.
I think if your program abends on z/OS
if entry is in AM24, that is OK. ie it's only
MVS/370 that is expected to cope with
being called in AM24.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
REVIEW also requires RMODE24, which makes things easier (for me).
Sure.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
The MVS/370 version of REVIEW is closer to being ANY/24 than the
z/OS version when running on z/OS, I think.
Ok.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
When the data set to be browsed by REVIEW is called 'ACTIVE' (must make
that work from RFE option 1 as well one day) virtual storage rather than
a data set is browsed. Should I try to allow it to browse ATL storage?
Why do you need to "allow" it? If you're running
AM31 (which I am - ie I run review successfully
on beta MVS/380 2.0 in AM31), shouldn't it
happen automatically?

Regardless, I just tried:

READY
review active
DATA SET HERC01.ACTIVE NOT IN CATALOG
READY
...
Ok, I'm not sure how well things like ESTAE
work on beta MVS/380 2.0.

Here is how ATL memory is currently being
checked, with SPIE ...

http://mvs380.cvs.sourceforge.net/viewvc/mvs380/mvs380/source/misc/svc120b.jcl?view=markup

(I know nothing about SPIE, that's Gerhard's code)
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Under OS/380, would an attempt to access ATL storage which has not been
GETMAINed abend?
No, all ATL storage is available to everyone
automatically at the moment, even without
a GETMAIN. So long as they switch to AM31
of course.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
If so, with PIC 4?
What's the PIC if trying to access storage which does not exist? (ie.
address higher than installed storage?)
I'm not very familiar with that. I think it is S0C4 though.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
BTW, while "MVS/370" probably means MVS 3.8 for practical purposes these
days, I'd say it covers from OS/VS2 Release 2 (the first MVS release I
believe) to MVS/SP 1.3.4 (was that the last? was that a JES release on
top of 1.3.3 BCP?).
The Wikipedia article says:

https://en.wikipedia.org/wiki/MVS#cite_note-6
OS/VS2 Release 2 through 3.8, MVS/SE and MVS/SP Version 1


So are you planning on commenting on
revdump6 and also rebuilding with the
modified macros for me to retest? I'd
really like to ship MVS/380 2.0 with a
working unzapped reved. I had hoped
that GCC and REVED would be the
flagship products. But I've also started
sniffing around about RPF370 and
KICKS.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Post by Greg Price ***@optusnet.com.au [hercules-os380]
When the data set to be browsed by REVIEW is called 'ACTIVE' (must make
that work from RFE option 1 as well one day) virtual storage rather than
a data set is browsed. Should I try to allow it to browse ATL storage?
Why do you need to "allow" it? If you're running
AM31 (which I am - ie I run review successfully
on beta MVS/380 2.0 in AM31), shouldn't it
happen automatically?
Thinking about it some more - I don't see
how you can know when to stop searching
because the address is wrapping unless
you detect what AMODE you are running
in and set a boundary depending on the
result.

BFN. Paul.
Greg Price greg.price@optusnet.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
review active
DATA SET HERC01.ACTIVE NOT IN CATALOG
Try putting quotes around the dsname.
I did not want to stop users who had a personal data set called ACTIVE
from browsing it.

I have just finished getting the adjusted macros ready for use.
(FREEMAIN, IKJRLSA, NOTE, POINT)

BTW, in response to an earlier comment, the IKJRLSA call was in Bill's
original REVIEW way before I started playing with it.  It's function is
to free the storage acquired by TSO parsing.

I did look at revdump6 but was unable to "solve" it.  A PSW of
078D2000 8E0C1BE6
would indicate that the instruction causing the S0C4 was ATL and so it
was not in the dump.

Gee, it'll be good when you get real VSM and RTM etc. support for ATL...
:)

Cheers,
Greg
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Try putting quotes around the dsname.
Cool. That works.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
BTW, in response to an earlier comment, the IKJRLSA call was in Bill's
original REVIEW way before I started playing with it. It's function is
to free the storage acquired by TSO parsing.
Ok, I'm surprised that this didn't bite
you when you ran the MVS 3.8j module
on z/OS.

BTW, you mentioned earlier about RMANY
requiring you to copy code BTL. Actually
you only need to copy a stub BTL, that
does a BSM and then executes the ATL
code. You only need to put the stub in
when you note via R15 or whatever that
your code is located ATL.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
I did look at revdump6 but was unable to "solve" it. A PSW of
078D2000 8E0C1BE6
would indicate that the instruction causing the S0C4 was ATL and so it
was not in the dump.
That is a wild PSW. The modules that are
executed are all BTL, and so should be in
the dump. If you can't solve it, I'll see if I
can figure it out with a trace.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Gee, it'll be good when you get real VSM and
RTM etc. support for ATL... :)
:-)

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
I did look at revdump6 but was unable to "solve" it. A PSW of
078D2000 8E0C1BE6
would indicate that the instruction causing the S0C4 was ATL and so it
was not in the dump.
That is a wild PSW. The modules that are
executed are all BTL, and so should be in
the dump. If you can't solve it, I'll see if I
can figure it out with a trace.
I've produced a trace, but I can't make
heads or tails out of it, and I can't match
the addresses up with the listing. Here it is:

https://groups.yahoo.com/neo/groups/hercules-os380/files/revdump6-trace.zip

Note that I don't have a proper listing myself,
I've got a bodgy listing from IFOX00.

Could you please provide an accurate listing?

Note that I'm not sure how much the trace
can be trusted. I think there might be too
much data and Hercules is dropping some
of the trace data.

E.g. why is there a 2-second delay here:

22:49:33 CR08=00000000 CR09=00000000 CR10=00000000 CR11=00000000
22:49:33 CR12=00000000 CR13=00000000 CR14=EFC00000 CR15=00FE51B8
22:49:35 PSW=071C2000 000C0A76 0000000000000000 INST=5860B150 L 6,336(0,11) load
22:49:35 V:00000000000B5150:K:1E=00B66B80 00A6C5E8 00B65FC8 800B5438 ..,..wEY..^H....

Note that the trace data was appearing on
the hercules log long after reved had abended.

I also don't know if reved has an abend handler
that is interfering with things.

But it's all a moot point when I can't find so
many instructions in the bodgy listing I have.
I searched for like 5 different instructions
and didn't find the hex codes in my listing.

I'll see if I can think of another way of
swatting this bug.

BFN. Paul.
Joe Monk joemonk64@gmail.com [hercules-os380]
7 years ago
Permalink
Your trace command that you entered was bc150 - f9000. So you are tracing
instructions in the real (to hercules) addresses below 1MB.

The program you were executing probably never even passed thru those
addresses especially if it was run under TSO, which is why nothing was
matching up.

It would be better to get yourself logged on, set a breakpoint on a known
instruction from the assembler listing you have, figure out where you are
loaded, then turn on your instruction trace.

Joe
...
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Joe Monk ***@gmail.com [hercules-os380]
Your trace command that you entered was
bc150 - f9000. So you are tracing instructions
in the real (to hercules) addresses below 1MB.
No, it is virtual storage addresses, and it works
fine so long as I don't produce too much data.
Post by Joe Monk ***@gmail.com [hercules-os380]
The program you were executing probably never
even passed thru those addresses especially
if it was run under TSO,
It does.
Post by Joe Monk ***@gmail.com [hercules-os380]
which is why nothing was matching up.
I think the root cause of that is more likely
to be my lousy listing, given that I have a
huge number of assembly errors.
Post by Joe Monk ***@gmail.com [hercules-os380]
It would be better to get yourself logged on,
set a breakpoint on a known instruction from
the assembler listing you have, figure out
where you are loaded, then turn on your
instruction trace.
Remember that I'm trying to debug
code I'm not familiar with, so all this
"known instruction" is quite difficult.

It's much better if the trace just tells
me exactly where to look. Or the
dump does. A large trace worked
previously on a different bug and
allowed me to develop my zap.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
I did look at revdump6 but was unable to "solve" it. A PSW of
078D2000 8E0C1BE6
Ok, I had an idea. If we ignore the high
byte, we get C1BE6 which is a reasonable
address within REVED, in particular it is
this code:

17707 ************************************************************
17708 * *
17709 * SYNAD EXIT *
17710 * *
17711 ************************************************************

17713 * THIS ROUTINE IS ENTERED DURING THE 'CHECK' MACRO
17714 * IF AN I/O ERROR OCCURS.

005BBA 17716 DYNSYNAD DS 0H
17717 SYNADAF ACSMETH=BSAM
005BBA 41F0 F000 00000 17718+ LA 15,0(0,15) ZERO HIGH ORDER BYTE 15138 31200016
005BBE 0700 17719+ CNOP 0,4 15138 32000016
005BC0 56F0 31C8 05BC8 17720+ O 15,*+8 SET ACCESS METHOD IN REG. 15 33000013
005BC4 47F0 31CC 05BCC 17721+ BC 15,*+8 BRANCH AROUND LIST 34000013
005BC8 02 17722+ DC AL1(2) ACCESS METHOD CODE 35000013


But I'm wondering whether the root problem
is this routine getting invoked in the first
place. ie "CHECK" detecting an I/O error.

I checked the "CHECK" expansion, and
it seems reasonable. ie there's no unclean
address being used.

16904 CHECK DYNDECBW
00529A 4110 9880 00880 16905+ LA 1,DYNDECBW LOAD PARAMETER REG 1 01900002
00529E 58E0 1008 00008 16906+ L 14,8(0,1) PICK UP DCB ADDR
0052A2 1BFF 16907+ SR 15,15
0052A4 BFF7 E035 00035 16908+ ICM 15,B'0111',52+1(14) LOAD CHECK ROUTINE ADDR
0052A8 05EF 16909+ BALR 14,15 LINK TO CHECK ROUTINE


I think the problem might actually be in
MVS code itself, calling the DCB SYNAD
routine with an unclean address. And
this might be very difficult.

I would hope that we can bypass this
problem instead by just not having an
I/O error in the first place, so the routine
doesn't get called. If a genuine I/O
error causes a S0C4 abend, so be it.
I just want REVED to work during
normal operation.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
I did look at revdump6 but was unable to "solve" it. A PSW of
078D2000 8E0C1BE6
I had another thought.

I was under the impression that within
REVIEW, all GETMAINs had an explicity
LOC=BELOW or LOC=ANY instead of
defaulting to LOC=RES.

But I did a grep of the source code and
found things like this:

revsubs.asm: GETMAIN RC,LV=(0),LOC=(24,64)
revsubs.asm: GETMAIN RC,LV=(0) GET THE JQE BLOCK STORAGE
revsubs.asm: GETMAIN RC,LV=(0) GET THE SPOOL READ BUFFER
revsubs.asm: GETMAIN RC,LV=(0) GET THE SPOOL READ BUFFER
revsubs.asm: GETMAIN RC,LV=(0) ACQUIRE STORAGE FOR THE ELEMENT
revsubs.asm: GETMAIN RC,LV=(R6) GET STORAGE FOR ELEMENT


So there will indeed be places that are
suddenly getting ATL addresses and
this is the first time the review code is
being exposed to such addresses.

Yes, I realize that technically it is MVS/380
that is at fault for providing ATL addresses
for a LOC=RES call that was made by an
RMODE 24 program, but it would be nice
if REVIEW was robust enough to handle
that regardless. I had thought it already
was. And I note that the "review" command
as opposed to "reved" does in fact run
fine even with LOC=RES getting unexpected
ATL addresses.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
I was under the impression that within
REVIEW, all GETMAINs had an explicity
LOC=BELOW or LOC=ANY instead of
defaulting to LOC=RES.
In REVED, which is what I'm interested
in at the moment, there is just one that
looks suspicious:

GETMAIN RC,LV=(0) GET STORAGE FOR PROFILE

line 1967.

And "profile" is something that is mentioned
in the stack trace:

UNKNOWN WAS ENTERED VIA CALL AT EP REVPROF

SA 0FE7A8 WD1 00000000 HSA 000F99A8 LSA 000FB798 RET 800EB38C EPA 000F88B8 R0 00001400
R1 00000000 R2 00002FB0 R3 01001810 R4 00000014 R5 00002FB0 R6 00000014
R7 800EB328 R8 00A69DE0 R9 000F99A8 R10 000EB178 R11 000E9CF8 R12 000FE7A8


Maybe a read is being done into that
memory address and of course READ
can't handle an ATL address.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
GETMAIN RC,LV=(0) GET STORAGE FOR PROFILE
line 1967.
And "profile" is something that is mentioned
Yep, that looks like a sensible explanation.
After that code above we see ...

B EDPROFRD AREA READY TO LOAD PROFILE DATA
...
EDPROFRD MVI 0(R1),C' ' BLANK FIRST TWO LINES
...
L R15,EDPROFAD POINT TO PROFILE MANAGER
BASR R14,R15 WRITE PROFILE


EDPROFAD DC A(REVPROF) PROFILE MEMBER I/O ROUTINE


REVPROF CSECT
...
* READ PROFILE MEMBER
...
READ DYNDECBW,SF,(R4),(R6),'S',MF=E
CHECK DYNDECBW WAIT FOR THE READ


If the GETMAIN size is made into an
identifiable size, I have the ability in
the SVC 120 intercept to redirect
GETMAINs for a particular size to
the normal IBM code to get BTL
storage, if that would help prove
that this is the problematic code.

Greg, please let me know what
direction you would like to take
on this.

Thanks. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
If the GETMAIN size is made into an
identifiable size, I have the ability in
the SVC 120 intercept to redirect
GETMAINs for a particular size to
the normal IBM code to get BTL
storage, if that would help prove
that this is the problematic code.
No need for that. Since I think I know
where the problematic code is now, I
can put on a trace that doesn't exceed
Hercules limitations.

So I put on this trace:

t+ f88a0-f8d40

and the last instruction in the trace
matches the CHECK macro which
explains everything.

So here is the last code that is run:

03CAEE 5860 D05C 0005C 25463 PROFINLP L R6,PROFIOBF+4 POINT TO THE PROFILE READ BUFFER
25464 READ DYNDECBW,SF,(R4),(R6),'S',MF=E
03CAF2 4110 9880 00880 25465+ LA 1,DYNDECBW LOAD DECB ADDRESS
03CAF6 9280 1005 00005 25466+ MVI 5(1),X'80' SET TYPE FIELD
03CAFA 5041 0008 00008 25467+ ST R4,8(1,0) STORE DCB ADDRESS
03CAFE 5061 000C 0000C 25468+ ST R6,12(1,0) STORE AREA ADDRESS
03CB02 9280 1004 00004 25469+ MVI 4(1),X'80' SET TYPE FIELD
03CB06 58E1 0008 00008 25470+ L 14,8(1,0) LOAD DCB ADDRESS
03CB0A 1BFF 25471+ SR 15,15
03CB0C BFF7 E031 00031 25472+ ICM 15,B'0111',48+1(14) LOAD RDWR ROUTINE ADDR
^LREVIEW R E V P R O F PAGE 1648


LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT ASM 0201 10.05 10/06/17

03CB10 05EF 25473+ BALR 14,15 LINK TO RDWR ROUTINE
25474 CHECK DYNDECBW WAIT FOR THE READ
03CB12 4110 9880 00880 25475+ LA 1,DYNDECBW LOAD PARAMETER REG 1 01900002
03CB16 58E0 1008 00008 25476+ L 14,8(0,1) PICK UP DCB ADDR
03CB1A 1BFF 25477+ SR 15,15
03CB1C BFF7 E035 00035 25478+ ICM 15,B'0111',52+1(14) LOAD CHECK ROUTINE ADDR
03CB20 05EF 25479+ BALR 14,15 LINK TO CHECK ROUTINE


And here is the end of the trace:

01:54:40 PSW=078D0000 800F8A56 0000000000000000 INST=1BFF SR 15,15 subtract_register
01:54:40 R0=0000000000000B90 R1=00000000000FA228 R2=00000000020015C0 R3=0000000000001400
01:54:40 R4=00000000000FB850 R5=0000000000000000 R6=00000000020029C0 R7=0000000000000B90
01:54:40 R8=0000000000A69DE0 R9=00000000000F99A8 RA=00000000000EB178 RB=00000000000F88B8
01:54:40 RC=00000000000FE7A8 RD=00000000000FB798 RE=00000000000FB850 RF=0000000000BC0000
01:54:40 CR00=C080EC40 CR01=0F5BCC00 CR02=FFFFFFFF CR03=00000000
01:54:40 CR04=00000000 CR05=00000000 CR06=00000000 CR07=00000000
01:54:40 CR08=00000000 CR09=00000000 CR10=00000000 CR11=00000000
01:54:40 CR12=00000000 CR13=00000000 CR14=EFC00000 CR15=00FE51B8
01:54:40 PSW=078D0000 800F8A58 0000000000000000 INST=BFF7E035 ICM 15,7,53(14) insert_characters_under_mask
01:54:40 V:00000000000FB885:K:8E=F997C8 0E0C1BE2 00000B90 00005800 01 9pH...S.........
01:54:40 R0=0000000000000B90 R1=00000000000FA228 R2=00000000020015C0 R3=0000000000001400
01:54:40 R4=00000000000FB850 R5=0000000000000000 R6=00000000020029C0 R7=0000000000000B90
01:54:40 R8=0000000000A69DE0 R9=00000000000F99A8 RA=00000000000EB178 RB=00000000000F88B8
01:54:40 RC=00000000000FE7A8 RD=00000000000FB798 RE=00000000000FB850 RF=0000000000000000
01:54:40 CR00=C080EC40 CR01=0F5BCC00 CR02=FFFFFFFF CR03=00000000
01:54:40 CR04=00000000 CR05=00000000 CR06=00000000 CR07=00000000
01:54:40 CR08=00000000 CR09=00000000 CR10=00000000 CR11=00000000
01:54:40 CR12=00000000 CR13=00000000 CR14=EFC00000 CR15=00FE51B8
01:54:40 PSW=078D1000 800F8A5C 0000000000000000 INST=05EF BALR 14,15 branch_and_link_register
01:54:40 R0=0000000000000B90 R1=00000000000FA228 R2=00000000020015C0 R3=0000000000001400
01:54:40 R4=00000000000FB850 R5=0000000000000000 R6=00000000020029C0 R7=0000000000000B90
01:54:40 R8=0000000000A69DE0 R9=00000000000F99A8 RA=00000000000EB178 RB=00000000000F88B8
01:54:40 RC=00000000000FE7A8 RD=00000000000FB798 RE=00000000000FB850 RF=0000000000F997C8
01:54:40 CR00=C080EC40 CR01=0F5BCC00 CR02=FFFFFFFF CR03=00000000
01:54:40 CR04=00000000 CR05=00000000 CR06=00000000 CR07=00000000
01:54:40 CR08=00000000 CR09=00000000 CR10=00000000 CR11=00000000
01:54:40 CR12=00000000 CR13=00000000 CR14=EFC00000 CR15=00FE51B8
01:54:50 quit


BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
---In hercules-***@yahoogroups.com, <***@yahoo.com.au> wrote :

And if we look at R6 referenced here:

03CAEE 5860 D05C 0005C 25463 PROFINLP L R6,PROFIOBF+4 POINT TO THE PROFILE READ BUFFER

in the dump (RTM2WA), we can see that it is:

020029C0

And of course that is beyond READ's
ability on MVS/380 2.0.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
where the problematic code is now, I
can put on a trace that doesn't exceed
Hercules limitations.
BTW, it would be good to know what is
setting these limitations. I can afford to
allocate a 1 GiB buffer, or even more,
on my 64-bit Hercules, and I am also
happy for my MVS system to remain
frozen until buffers have had a chance
to clear.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
When the data set to be browsed by REVIEW is called 'ACTIVE' (must make
that work from RFE option 1 as well one day) virtual storage rather than
a data set is browsed. Should I try to allow it to browse ATL storage?
Perhaps you could have an ACTIVE31 which
uses 2 GiB as the barrier instead of 16 MiB.

I think most REVIEW users on MVS/380 2.0
would have little interest in ATL memory.
Especially if it's full of crap from other tasks.

Although if z/OS gives you a 2 GiB or 16 EiB
limit for "ACTIVE", maybe that should remain
the behavior on MVS/380 2.0.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Although if z/OS gives you a 2 GiB or 16 EiB
limit for "ACTIVE", maybe that should remain
the behavior on MVS/380 2.0.
Perhaps you could have an "ACTIVE24'
that even works on z/OS.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
BTW, the entire MVS/380 2.0 project
currently stands at around 2700 lines
of code changes compared to the
Turnkey base.


Components of MVS/380 2.0:

svc120b - 1500 lines, intercepts SVC 120 and TRKCALC
mvs380ss - 300 lines, zeroes out some IKJ functions in CVT to force LINK EP=
iefactrt - 20 lines, releases ATL memory on step/command termination
sys1.maclib - 250 lines, use ICM B'0111' instead of "L", etc
iewfetch - 120 lines, check if module is AM31
iewl - 400 lines, cope with AMODE=31,RMODE=ANY as parms
igg019ba - 30 lines, handle READ/WRITE invoked in non-AM24
igg019bc - 30 lines, handle NOTE/POINT invoked in non-AM24
igg019dk - 30 lines, more READ/WRITE handling for non-AM34

total = around 2700 lines


BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
BTW, the entire MVS/380 2.0 project
currently stands at around 2700 lines
of code changes compared to the
Turnkey base.
Plus 2500 lines of code changes to
Hercules 3.07 to add the z/Arch
instructions and tape handling etc.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
REVIEW also requires RMODE24, which makes things easier (for me).
The things it makes easier that come to mind pertain to DCB processing
(DCB exit list can be pre-coded, DCB exits do not have to be copied and
relocated BTL, no DCBE required to specify SYNAD and EODAD routines) and
I don't think a DCBE is required to put
in an EODAD routine dynamically.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
TPUT (can TPUT constant text from the
program without having to relocate
the text BTL).
Does this restriction exist on z/OS?

MVS 3.8j restrictions are irrelevant as
everything will be located BTL even
with an ANY/ANY module.

BFN. Paul.
Greg Price greg.price@optusnet.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Post by Greg Price ***@optusnet.com.au [hercules-os380]
REVIEW also requires RMODE24, which makes things easier (for me).
The things it makes easier that come to mind pertain to DCB processing
(DCB exit list can be pre-coded, DCB exits do not have to be copied and
relocated BTL, no DCBE required to specify SYNAD and EODAD routines) and
I don't think a DCBE is required to put
in an EODAD routine dynamically.
No, but a DCBE is required to have the EODAD and SYNAD routines ATL.
Post by ***@yahoo.com.au [hercules-os380]
Post by Greg Price ***@optusnet.com.au [hercules-os380]
TPUT (can TPUT constant text from the
program without having to relocate
the text BTL).
Does this restriction exist on z/OS?
Yes.
Also, still true for DCB exits (other than EODAD and SYNAD if you count
them).

The TPUT restriction is the reason why allocating files to the TSO
terminal (such as report files) does not always work, especially with
modern COBOL programs, for example.  As I found out when working on the
ZP60014 CLIST extensions usermod, the output to the terminal is achieved
simply by a TPUT of the logical record's data. When modern programs use
a DCBE to place their QSAM buffers ATL, the TPUT does not work.  Because
I sometimes debug my batch programs under TSO, I make sure I don't have
a DCBE with RMODE31=BUFF for any files normally allocated to SYSIN or
SYSOUT.
Post by ***@yahoo.com.au [hercules-os380]
MVS 3.8j restrictions are irrelevant as
everything will be located BTL even
with an ANY/ANY module.
I am in the process of explicitly specifying LOC on all of the SVC 120
GETMAINs in REVIEW so LOC=RES is not a consideration.  (I have not
bothered changing CSECTs which are not included in a 370 compile.)

The ploy of using the internal GETSTOR macro to make a system level
dependent LOC setting on GETMAIN and which was originally (until
recently) used to to allow LOC=31 on relevant requests in REVIEW is now
only used pretty much for I/O buffers.  The errant GETMAIN in REVEDIT
for profile storage has now been changed to GETSTOR.  (The other I/O
buffers already were.)  Such I/O buffer areas will now be explicitly for
LOC=24 in an MVS/370 compile and LOC=31 in a z compile.

The other GETMAINs in REVIEW will have the same LOC specified no matter
which compile options are used.  (The one exception to this is for the
REVIEW browse record management area which used to always be a GETMAIN
VU (SVC 4) but is now a GETMAIN VRU under z/OS so it can go ATL. 
GETMAIN VRU is not supported by MVS 3.8.  This was done after a report
of a GETMAIN failure because the BTL region was exhausted.  This was
caused by a large TSO screen size (160 cols, 60 rows) together with an
LBI tape file (DSS dump) which had 256KB blocks.  You'd need about 14MB
just to house a screenful of records.)

It should be ready at the weekend some time.

In general I prefer interactively debugging RMODE=24 programs because
the virtual storage addresses are more predictable (and easier to
remember and to type in because they are shorter), especially under
MVS/XA -> z/OS where the user region always starts at the same address. 
(This address did increase by x'1000' with 64-bit because the PSA went
from 4KB to 8KB in size.  Something like x'6000' became x'7000'.)  I've
even used addresses from customer dumps to set SLIP traps on development
systems to see what's going on.  So I'm certainly not motivated to make
REVIEW RMODE=ANY even if it were "easy" to do so.

Cheers,
Greg
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
Post by Greg Price ***@optusnet.com.au [hercules-os380]
TPUT (can TPUT constant text from the
program without having to relocate
the text BTL).
Does this restriction exist on z/OS?
Yes.
Wow.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
I am in the process of explicitly specifying LOC
on all of the SVC 120 GETMAINs in REVIEW
so LOC=RES is not a consideration.
Great.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
It should be ready at the weekend some time.
Great, thanks! If you make a beta available
I can test it first, as I'm currently the only
one with a test environment.
Post by Greg Price ***@optusnet.com.au [hercules-os380]
In general I prefer interactively debugging
RMODE=24 programs because the virtual
storage addresses are more predictable
...
Post by Greg Price ***@optusnet.com.au [hercules-os380]
So I'm certainly not motivated to make
REVIEW RMODE=ANY even if it were
"easy" to do so.
Well even if you did, you could still mark
the module RM24 when you ship it, and
not support anyone who uses "PDS" to
zap it up to RMODE ANY. But still have
that technical capability, just because it's
there! Probably say that TPUT of literals
will not work though, and won't work
until z/OS itself changes.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Well even if you did, you could still mark
the module RM24 when you ship it, and
not support anyone who uses "PDS" to
zap it up to RMODE ANY. But still have
that technical capability, just because it's
there!
But only put in the BTL stubs for EODAD
etc if you discover that the program is
loaded ATL.

BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by Greg Price ***@optusnet.com.au [hercules-os380]
Post by ***@yahoo.com.au [hercules-os380]
I don't think a DCBE is required to put
in an EODAD routine dynamically.
No, but a DCBE is required to have the EODAD
and SYNAD routines ATL.
Just for the sake of anyone watching, here
is the code that PDPCLIB uses to allow a
module to reside ATL without using a
DCBE for the DCB open exit (and the same
thing should be possible for a complex
EODAD or SYNAD too):

***********************************************************************
* *
* OPEN DCB EXIT - 24 bit stub *
* This code is not directly executed. It is copied below the line *
* It is only needed when the program resides above the line. *
* *
***********************************************************************
PUSH USING
DROP ,
* This code provides pattern code that is relocated to the 24-bit
* ZDCB work area, where it can be invoked in AM24; when the exit
* is above the line, this stub sets AM31 and transfer to the DCB
* exit.
*
USING PATSTUB,R15 DECLARE BASE GP15015
DS 0A ENSURE MATCHING ALIGNMENT GP15017
PATSTUB BSM R14,0 Save caller's AMODE GP15019
LR R11,R14 Preserve OS return address GP15015
LA R14,PATRET Set return address GP15019
L R15,@OCDCBEX Load 31-bit routine address GP15015
BSM 0,R15 Call the open exit in AM31 GP15019
PATRET LR R14,R11 Restore OS return address GP15015
BSM 0,R14 Return to OS in original mode GP15019
@OCDCBEX DC A(OCDCBEX+X'80000000') AM31 exit address GP15015
PATSTUBL EQU *-PATSTUB GP15015
POP USING
SPACE 2
.NOSTUB ANOP , Only S/390 needs a stub



Full code here:

http://pdos.cvs.sourceforge.net/viewvc/pdos/pdos/pdpclib/mvssupa.asm?view=markup


BFN. Paul.
kerravon86@yahoo.com.au [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Just for the sake of anyone watching, here
is the code that PDPCLIB uses to allow a
module to reside ATL without using a
DCBE for the DCB open exit (and the same
Thus there is no different code path for
z/OS, so no testing of the environment
using CVT or whatever is required.

When we have the technology to load
a module physically ATL in MVS/380 2.x
the code path to install a stub BTL will
be followed and behave exactly the
same as it does on z/OS, *without*
needing to implement the DCBE
concept at all on MVS/380 or code it
in PDPCLIB. All part of being a
magical ANY/ANY module.

BFN. Paul.
Gerhard Postpischil gerhardp@charter.net [hercules-os380]
7 years ago
Permalink
Post by ***@yahoo.com.au [hercules-os380]
Just for the sake of anyone watching, here
is the code that PDPCLIB uses to allow a
module to reside ATL without using a
DCBE for the DCB open exit (and the same
thing should be possible for a complex
And for completeness - the exit is entered with the DCB address in the
low three bytes, and the open flags in the high byte, so that has to be
either saved or cleared before use in AM31.

Gerhard Postpischil
Bradford, VT

---
This email has been checked for viruses by AVG.
http://www.avg.com