Tom Marchant wrote:
On Fri, 27 Apr 2007 10:14:55 -0300, ITURIEL DO NASCIMENTO NETO <[EMAIL PROTECTED]> wrote:

Ira,

Try copying one of these PDSs (IEBCOPY - COPYMOD) to a new one with the
other blksize, and then proceed with your compare step.

Still might not work. Unless you can guarantee that each member starts at the same location on a track, you will likely have blocks in one PDS that are different sizes than the blocks in the other.

If a large load module starts on a new track, you'll have a 32K block at the beginning of the track, then a shorter block at the end. If the same load moule starts after a member that ends with a 32K block at the beginning of a track, it will start with a smaller block, then have a 32K block at the beginning of the next track.


Well...this ain't easy.

Each member must start on a new track, because directory entries use TTR pointers to PDS members. See (watch for wrap):

http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/dgt2d450/3.7.2?ACTION=MATCHES&REQUEST=directory&TYPE=EXACTN&SHELF=EZ2ZO10h&DT=20060524093000&CASE=&searchTopic=TOPIC&searchText=TEXT&searchIndex=INDEX&rank=RANK&ScrollTOP=FIRSTHIT#FIRSTHIT

So there is no worry there.

However, for load modules, any change in device type that changes the track length (e.g., 3380 -> 3390) or cell size (I can't cite a specific example but if different physical emulations change the cell size then it counts) can cause text blocks to be arranged differently on the tracks. This is because COPY won't split them and COPYMOD will very probably split them differently for modules longer than one track of the shortest *effective* length accounting for cell size.

Any difference in the location of the text records will, I think, cause the control records to change. Any difference in the length of the text records will certainly cause the control records to change. This is because control records contain the length of the next record to be read and a prepared CCW (or part of one) for reading the next record. This is due to the Loader's PCI design, which tries to tack CCWs on as it goes to minimize latency and the number of SSCH's.

See (watch for wrap, again):

http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/IEA2B260/B.2?SHELF=EZ2ZO10h&DT=20060606155355&CASE=

While I have never had anything to do with the Linkage Editor, Binder, Loader, or IEBCOPY, I actually think this design was quite clever (bordering on brilliant at the time) and must respectfully disagree with one poster's assertion that it is "WABD" where "B" stands for "Badly." The folks who wrote that code, Lo! these many years ago, had a lot on the ball in my opinion, back when Giants walked the Earth.

Also, you have to think about what "equal" means. If the load module in question contains multiple CSECTs that are represented by multiple SMP/E MOD entries and the LMOD entry does not include comprehensive ORDER statements, then the CSECT ordering will be a function of the order in which CSECTs were added and replaced.

Consider two different target zones that are maintained at different times over a year or two. Even if they are now at the same service level there is no guarantee that the very same PTFs affecting a particular load module were installed in the same order if you (as would be rational) use current HOLDDATA and GROUPEXTEND at APPLY time. The resulting load modules might have a different order. The same can be true, for the same underlying reason, of two load modules comprising MOD-represented unordered CSECTs at the same service level delivered in different ServerPac orders built at different times.

Even LOADing these resulting modules at the same starting address would not show them to be binary equivalents, though they would of course be functionally equivalent. You could, I suppose, use LOAD to load the first one, use MVC(L) to copy it to another storage area, DELETE it, LOAD the second, copy it to a second storage area, figure out where the CSECTs started and ended, compute the new address constants, replace them, and compare the results CSECT by CSECT...but if I forgot anything (or quite possibly got some of it wrong ;-) then it still would not work perfectly.

Naturally, if the CSECTs are ordered differently the text records will differ in content, and possibly (in some or most cases, probably) in length as well.

Of course, the same goes for non-SMP/E-maintained libraries whose load modules are not always bound using comprehensive ORDER statements. (I would expect them to be in the majority, but what do I know?)

For Ira's original request, which was to find the number of occurrences of a specific string in different copies of load module at different block sizes, it seems to me that LOADing all the modules in a particular library in turn to search for the string in question should work. Also, unless I'm missing something, I think it should work equally well for load modules and program objects.

--
John Eells
z/OS Technical Marketing
IBM Poughkeepsie
[EMAIL PROTECTED]

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to