markz@microsoft.UUCP (Mark Zbikowski) (01/09/84)
The problem with the ordering of segments is due to an ancient bug in the assembler. For 'compatability' reasons, IBM has declined to request a fix for the problem: Instead of emitting the segments in the order declared in an object module, it emits them in alphabetic order due to a walk of the symbol table. There are several solutions to this problem external to the assembler; the most general solution is to create a series of object modules that merely declare a single segment with the appropriate attributes. Linking these files in the appropriate order before your other objects will produce the desired segment ordering. I know this is bogus, but it is the user community that needs to put the pressure on IBM to fix this bogosity. The linker reads the object modules and perceives them as a stream of segment definitions. The ordering rules for the output are as follows: Segments with the same name (segment name, class name and public attribute) will be combined into a single segment. The order of classes on output will be the same as the order of initial occurrence of those classes on input. The order of segments with in each class will be the same as the order of initial occurrence of those segments on input. Note that use of the GROUP operator does not in any way modify the ordering of the segments; it is used only for addressing.