Created On:  21 March 2012

Problem:

A client was getting the following error when compiling/linking their application programs on AIX 5.3:

cob –z progname.cbl

ld: 0711-552 SEVERE ERROR: Object progname.o:

Csects with symbol numbers 82 and 74 overlap.

They had only just upgraded AIX 5.3 with patch level TL12 Service Pack 5 (5300-12 Service Pack 5) - (oslevel -s 5300-12-05-1140)

This error occurred for any compile that linked object code (eg .so’s and executables).

Resolution:

Ultimately this came down to the fact that IBM made changes to the system linker.  The client was initially running Server Express 5.1 WP4 on AIX 5.3.0.0 5300-05.

They wanted to move to IBM POWER7 processors and so they upgraded AIX to patch level TL12 Service Pack 5 (5300-12 Service Pack 5)

oslevel -s

5300-12-05-1140

They were informed that to run AIX 5.3 on POWER7 patch 5300-12 Service Pack 5 needed to be installed.

After applying the OS patch, when they compiled and linked their COBOL programs to shared objects (.so) using cob –z, the link phase of the compile was failing, as the following example shows:

cob –z progname.cbl

ld: 0711-552 SEVERE ERROR: Object progname.o:

Csects with symbol numbers 88 and 80 overlap.

The program was being compiled correctly and the .int and object (.o) files were created correctly – but during the link phase it was failing and the linked object was not created.

After backing out AIX 5.3 5300-12 Service Pack 5 the programs linked correctly.

It was found that changes had been made in the AIX patch and the linker no longer recognized a construct that had been used in the NCG for the last 20 years.

As a consequence this was addressed in Server Express  5.1 WP6 and will be included in all versions subsequent to that release, but it cannot be addressed in any earlier version of Server Express.

Therefore, if you have upgraded AIX to patch level TL12 Service Pack 5 (5300-12 Service Pack 5) in order to run on POWER7, and you get this error during the link phase of a compile then you must use a version of Server Express that has been certified against that patch level (i.e. SX 51. WP6 or later).

This same error also applies to Studio Enterprise Edition. So if you're using Studio EE (instead of Server Express) and you get this error you must check the certified OS versions for your version of Studio EE.

If you look in the $COBDIR/docs/env.txt file it will display the exact OS version(s) this COBOL release has been certified on. It also shows the versions of Java, C compiler and Assembler etc it has been certified against.

If you are using AIX 6.1/7.1 you will need to check which version(s) of Server Express have been certified and if this patch (TL12) applies to these releases.

However, it might not always be immediately possible to upgrade Server Express, particularly if there is 3rd party software (eg Oracle etc) that require a specific version of Server Express prior to 5.1 WP6 (as was the case in this instance).

Following are some of the options we considered for this specific application:

1) Back out the patch – but this means not being able to upgrade to POWER7.

2) One other possibility was to run .gnt’s instead of shared objects (.so). These are Micro Focus proprietary object code, rather than industry standard object code. The advantage is they are not linked and therefore the ld error would not occur. The disadvantage is they can only be directly called by the Micro Focus runtime and can’t be linked with other software.

Compiling to .gnt’s might be an option, but it would need to be assessed carefully.

3) Find out from IBM if there are any parameters/switches etc that can be manually changed for the link phase. At the time of this article we had not received a response from IBM.

Please note that all certification of our products is the responsibility of the software vendor. We build on their available platform at the time, so any Server Express product/patch/fix version released prior to an OS version/patch/fix will not be retrospectively tested.

Incident #2551586