PROBLEM: (90148, 90298, 89008) (PATCH ID: OSF520-239) ******** This patch, shipped as Version 3.06.08 of the Tru64 UNIX Assembler, resolves three assembler problems: 1. The assembler produces an incorrect symbol table when it encounters the following: a) A label defined at the head of the .rdata section, and b) Multiple file references (use of the .file and .loc directives) such that the initial .rdata label and the entry label of the last procedure in the .text section are associated with different files. The symbol table which results will cause any attempt to use om on the resulting object file to fail. 2. The assembler improperly reorders an instruction which restores the stack pointer when assembling with optimization active. The scheduler has specific logic which prevents an addq or an lda instruction which restores sp (and is followed by a ret instruction) from being moved. The problem occurs in a case where a bis instruction is used in order to restore sp. 3. The assembler is not adding a terminating NULL to the string specified as the argument for a .ident directive when the string is written to the object file. This causes the "what" command to produce incorrect return values. PROBLEM: (92727) (PATCH ID: OSF520-416) ******** PROBLEM: (92727) When presented with code such as the following: ldq r25, 0(r25) ldq r0, 0(r25) the assembler (if optimization is active) will generate the following code: ldq r25, 0(r25) bis r25, r25, r0 *** this is incorrect *** The problem occurs when the assembler's register manager fails to identify that the target and base registers of the initial load are the same. The assembler should not have attempted optimization. Instead, it should have generated the original instructions. With this patch, the assembler now looks for the specific case of a matching target and base register. It then marks the register table entry for that register as having "unknown" contents, which prevents the generation of the incorrect optimization.