PROBLEM: (84670, 84695, 85014) (PATCH ID: OSF510-132) ******** o When assembling a .s file containing a data declaration directive (such as .byte) that specifies a list of values greater than 74, a fatal "yacc stack overflow" condition is raised. o A main procedure's prologue description will overwrite that of an alternate entry point when they both share the same address, and they both specify their own .prologue directive. o A .s file that contains .align directives in its text section that is assembled at an optimization level greater than O0 may produce a series of zeros in its text section which, if executed, would cause the program to halt. PROBLEM: (80142, 81330, 81332, 81723, 81743, 82081, 82082, 82458, 83503, 83808, 83896, 83897, 83898) (PATCH ID: OSF510-103) ******** o The -arch and -tune command line switches were essentially being ignored. o Code generated by the assembler for emulated ldb/ldbu/ldw/ldwu instructions produces incorrect results due to a linker optimization. o Code generated for uldl and uldq instructions produces incorrect results if the data to be loaded is not quadword aligned. o Code generated for loads with offsets larger than 32K is incorrect. o Incorrect addresses are generated when symbolic arithmetic is used, and when the address in question extends beyond the intitial 64K boundary of a data section. o A prodecure with no instructions causes the assembler to segfault. o A prodecure with no instructions causes line number generation to segfault. o Data declared using the .gprel32 directive was not being longword aligned. o The relocation count for a program that contains a section that has in excess of 65535 reloctions will be incorrect, resulting in a bad link and an invalid executable. o An entry (PDSC_FLAGS_BASE_REG_IS_FP) was not being set correctly in a short-form stack-frame RPD when a .frame directive specified register 15. o When two entry points to a procedure (main or alternate) share the same address, the assembler generates four nop profiling instruction sequences for each one, when the -pg switch is specified. This causes post-link tools, like SPIKE, problems. o When a main and an alternate entry point share both an address and a prologue, the assembler associates the prologue with the alternate entry and not the main, resulting in the assembler not generating an RPD, since it does not see a prologue for the main entry. o The assembler mis-calculates the number of relocations present in the .text section if a jmp/jsr instruction was specified without a symbol as an operand. This can result in a linker error. PROBLEM: (86431, 86432, 86433, 86434) (PATCH ID: OSF510-274) ******** o The assembler has never generated a section header for zero-sized sections, or a symbol table entry for a label symbol that is associated with such a section. This essentially correct behavior represents an incompatibility with the old assembler and has been changed with this patch. o The assembler was not including symbols for numeric constant label symbols in the symbol table. It is now. o The assembler can produce incorret scoping for local symbols, resulting in incorrect association of symbols with their containing procedures. o The assembler's association of label symbols to their files of origin was incorrect in certain circumstances: .file 1 "file1.cxx" gcc2_compiled.: __gnu_compiled_cplusplus: .file 2 "file2.h" .file 3 "file3.h" .text In this example, label1 and label2 are mistakenly associated with file3.h due to the assembler's practice of establishing file context based on the instruction with which a given label was associated, which in this case was the first intruction in the .text section. File context is positional and in this case both labels should be associated with file1. PROBLEM: (89008, 90148, 90298) (PATCH ID: OSF510-412) ******** This patch, shipped as Version 3.04.34 of the Tru64 UNIX Assembler, resolves two assembler problems: o This unusual case takes the following combination of factors: 1) A label defined at the head of the .rdata section, 2) 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 resulting symbol table scoping information is invalid, and causes om to seg fault. Note that this symbol table, although incorrect, does not stop the object file from linking and executing properly if -om is removed from the mix. o 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. This instruction is being reordered by the assembler and it must not be. o 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.