> XLC has a DSECT conversion utility. 

Surprisingly, I think I must have been the only one to generate IPCS mapping 
automatically using assembler macro's. Less than 100 lines of simple code 
greatly improved dump reading. As a product developer, I had to read a lot of 
dumps and this saved a lot of time.

This  same implementation would work for conversion to any language. The 
problem is actually with the mapping to the destination language. For instance, 
mapping to C does not support remapping, redefinition or re-declaring variables 
such as "org" in assembler.

Here is the logic I would use for mapping to C. Sorry if I don't get something 
quite right. It's been a very long time since I wrote these macro's and the 
source is backed up somewhere. Output would be to syspunch.

Sadly, this would be a lot easier if C had a true macro language instead of 
it's limited pre-processing language. 

Macro called from assembler source file has a parm with the DSECT mapping macro 
name:

1. Call dsect mapping macro.

2. OPSYN DSECT and CSECT to macro #DSECT. OPSYN DC and DS to macro #DS. OPSYN 
ORG to macro #ORG. OPSYN EQU to macro #EQU.

3. Call dsect mapping macro. 

4. call macro #END 

Macro #DSECT simply closes the previous structure with a comment about struct 
size and generate a new struct using the label.   
Macro #END simply closes the previous structure with a comment about struct 
size. 

Macro #ORG simply exits. Remapping logic is in macro #DS.

Macro #EQU if n'syslist > 1 then call #DS macro passing &syslist otherwise this 
is a flag. Maybe a C macro that matches the variable name that calls a specific 
inline C function for this flag. Another possibility is test creating a C 
struct with 8 bool variables to see if it is 1 byte long. If so, then you may 
be able to use a C struct with bool variables. If there are multi bit flags, 
then you may need to add C macro's to support the combination.
Macro #DS is the meat of the process. 

1. T ' gives you the data type, L ' gives you the length of the data and 
label-label gives you the offset. 

2. Comments were not needed for IPCS, If they are needed, you will need to find 
a solution.

3. Signed / unsigned is not defined in the dsect (instructions determine). You 
might need macro options allowing you to specify unsigned fields.

4. For me, duplication factor or stacking was not used in any macro's I needed. 
Duplication factor (e.g. DS 4A), can be calculated by using the next variable 
minus this variable divided by variable length. For stacked data (e.g. DS 
A(0,0,0),CL30), you can calculate overall length by using the next variable 
minus this variable.

5. For assembler data types that have direct C equivalents (e.g. A, H, F, D), 
you would create matching variables with the C equivalent.

6. C does not support unaligned fields (e.g. AL2, AL3 or AL4). If variable - 
dsect is not aligned properly, then you will need special handling to support 
these properly in C. Maybe an inline function to deal with this.

7. Probably everything else would be a byte array with the specified length.

Compile a C program that displays the SIZEOF(struct_name) and verify it matches 
the assembler calculated size of the dsect.

Jon.
    On Wednesday, September 18, 2019, 11:31:42 AM PDT, Steve Smith 
<sasd...@gmail.com> wrote:  
 
 XLC has a DSECT conversion utility.  Check the User's Guide.  Many don't
like its output (probably including Peter Relson), but it can be useful,
maybe as a starting point.

sas

On Wed, Sep 18, 2019 at 1:26 PM Farley, Peter x23353 <
peter.far...@broadridge.com> wrote:

> Hmm-m-m.  Interesting idea, but I can see complex language-dependent
> variable definition issues.  Might be a real bear to implement in the
> compilers in any shared-code-among-languages way.  

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to