|
|
The following is a list of all currently known Defects in the current
release of the Code Generation Tools. All defects will be
fixed in the next release unless otherwise indicated.
- Note:
- This list may contain references to internal or beta versions of
the product. So please refer to product availability list to
determine the current production revision.
Date: Fri Sep 27 19:00:00 CDT 1996
ANSI C Compiler
Assembler
C I/O
Debugger
Documentation
emurst
Hex Converter
Linker
PDM
RTS
ANSI C COMPILER DEFECTS
| Title: ppcg/mpcg abnormal termination when using a switch case with high bit on |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01801 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
ppcg and mpcg abnormally terminate when presented with a switch case constant
which is unsigned and has the high bit set.
Example:
void test(unsigned int b)
{
switch(b) {
case 0x81000001:
break;
case 0x41000001:
break;
}
}
Workaround/Solution
None.
|
| Title: interrupt function modifier causes the stack to become corrupted |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02061 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
The compiler errs in generating an reti1 instruction in parallel
with an instruction which modifies the stack on return from an
interrupt service routine generated using the "interrupt" keyword
in C source. Since the reti1 mnemonic is representative of the
instruction "sr = *sp++" so this renders the instruction sequence
shown below as : sr = *sp++ || d0 = &*(sp ++=4) . This sequence
will cause the stack to be corrupted, since the incerement is not
performed before sr gets popped off the stack.
i.e. code sequence generated by compiler at return from interrupt
reti1
|| d0 = &*(sp ++= 4)
reti2
reti3
reti4
Workaround/Solution
Modify the code generated by the compiler to perfom the stack
increment before sr is popped.
i.e.
d0 = &*(sp ++=4)
reti1
|
| Title: When using mpcl with large # of defines/includes, mpac crashes |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02470 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
When using mpcl from the command line with a large number of defines, mpcl
fails and reports "abnormal termination of mpac."
Example:
mpcl -g -ft /tmp -dAZZZZZZZZZZZZZZZ -dBZZZZZZZZZZZZZZZZZZZ \
-dCZZZZZZZZZZZZZZ -dDZZZZZZZZZZZ -dEZZZZZZZZZZZZZZZZZZ \
-dFZZZZZZZZZZZZZZZZZZZZ -dGZZZZZZZZZZZZZZZZZZZZ \
-dHZZZZZZZZZZZZZZZZZZZZZZ -dIZZZZZZZZZZZZZZZZZZZ \
-dJZZZZZZZZZZZZZZZZZZZZZZZ -dKZZZZZZZZZZZZZZZZZZZZ \
-dLZZZZZZZZZZZZZZZZZZZ -dMZZZZZZZZZZZZZZZZZZZZ \
-dNZZZZZZZZZZZZZZZZZZZZZZZZ -dOZZZZZZZZZZZZZZZZZZZZZZZZZZ \
-dPZZZZZZZZZZZZZZZZ -dQZZZZZZZZZZZZZZZ -dRZZZZZZZZZZZZZZZZZZZ \
-dSZZZZZZZZZZZZZZ -dTZZZZZZZZZZZ -dUZZZZZZZZZZZZZZZZZZ \
-dVZZZZZZZZZZZZZZZZZZZZ -dWZZZZZZZZZZZZZZZZZZZZ -dXZZZZZZZZZZZZZZZZZZZZZZ \
-c test2.c -z link.cmd -o test.out
Workaround/Solution
Move the defines inside the source file.
|
| Title: minit is supposed to be defined in stdlib.h according to the user guide |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02497 | ANSI C Compiler | 1.13 | Fixed, will appear in next release. |
Bug Description
See table on CG:5-27.
Both minit() and ltoa() are defined, and listed in the CodeGen manual,
but neither is declared in stdlib.h, as they should be.
Workaround/Solution
The problem will be fixed in the next release.
There is no workaround.
|
| Title: VRxx symbol undefined error when large arrays are used |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02626 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
When declaring several large initialized arrays, the compiler will sometimes
generate an error:
The following symbols are undefined:
VRxx
Large arrays may cause instruction to be generated
which use "virtual registers" which are internal to
the compiler.
Workaround/Solution
The problem may be avoided by making large arrays static.
|
| Title: Windows NT version PP C compiler has optimization bug. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02662 | ANSI C Compiler | 1.13 | Will fix in a future release |
Bug Description
The PP C compiler will produce incorrect assembly output on the following
C code segment when optimization is used:
C code segment:
if ( out < 0 )
out = 0;
else if ( out > 0xFFF )
out = 0xFFF;
Workaround/Solution
None.
|
| Title: Maximum source code line length is too short |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02732 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
Input line buffer for DOS was 2K, because of 640K memory limit.
ANSI requires only 512 bytes, but the documentation states a limit of
16K.
Workaround/Solution
None.
|
| Title: The following code causes the codegen to crash with a (core dump) |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02733 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
ppcg and mpcg abnormally terminate when presented with a
switch case constant which is unsigned and has the high bit set,
Example:
void bad(unsigned int b)
{
switch(b) {
case 0x81000001: /* Causes abnormal termination: high bit set */
break;
}
}
void good(unsigned int b)
{
switch(b) {
case 0x41000001: /* Doesn't terminate: high bit not set. */
break;
}
}
Workaround/Solution
None.
|
| Title: Addressing offset is too large causing ppasm to emit an error. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02880 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
There is a general problem when data is at a location in
static data that is greater that 32767 bytes away for 32 bit
or 16 bit data items and 65535 bytes away for 8 bit items.
The symptoms of this problem are the message
E0004: Address offset is too big
from ppasm in response to the C compiler generating bad code or
COMPILER ERROR: no match for VARADDR
from ppcg.
An example of a C program that will cause bad code to be
generated is
int ar1[35000];
int ar2[35000];
void f1()
{
extern int *v1;
extern int *v2;
v1 = &ar1[0];
v2 = &ar2[0];
}
An example of a C program that will cause a compiler
internal error is
int ar1[45000];
void f1()
{
extern int *v1;
v1 = &ar1[32768];
}
Workaround/Solution
none
|
| Title: Compiled code does not work if certain global structures initialized. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03050 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
Initialization of a string field whose length is greater than 1 and
is followed by another field which is initialized as well, may
have incorrect assembly code generated. For example
struct problem
{
char cStr[6];
char cVal;
};
struct problem init_me =
{
"a",
'5'
};
Workaround/Solution
Initialize the string to string value greater than 1.
|
| Title: Return value for pointer is wrong value. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03096 | ANSI C Compiler | 1.10 | Will fix in a future release |
Bug Description
The cast of a function call to an integral type, when the
function is defined to return a pointer, results in the
using the return location for an integral value rather
a pointer value. For example
char *func_return_pointer();
main()
{
int_return;
int_return = (int)func_return_pointer();
}
char *func_return_pointer()
{
return (char*)0x10000000;
}
results in an undefined value being assigned to int_return
and the actual function return value being ignored.
Workaround/Solution
The function return vale may be copied to a variable
and the variable used in place of the function call.
For example
char *func_return_pointer();
main()
{
int int_return;
int_return = (int)func_return_pointer();
}
char *func_return_pointer()
{
return (char*)0x10000000;
}
may be rewritten as
char *func_return_pointer();
main()
{
char *char_tmp;
int int_return;
char_tmp = func_return_pointer();
int_return = (int)char_tmp;
}
char *func_return_pointer()
{
return (char*)0x10000000;
}
|
| Title: Optomizer gives abnormal termination (and other) errors of mpcg |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03243 | ANSI C Compiler | 1.10 | Fixed, will appear in next release. |
Bug Description
The C compiler optimizer aborts.
Workaround/Solution
none
|
ASSEMBLER DEFECTS
| Title: The MP assembler incorrectly allows R1 to be used as the destination |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01748 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The illegal use of register R1 as the destination in a floating-point write
does not generate an error message.
Example:
_main:
move 040000000h,r3
move 03f800000h,r2
fadd.sss r2,r3,r1
jsr r31(r0),r0
The floating-point add instruction above should generate an error message,
but does not.
Workaround/Solution
None.
|
| Title: MPY || SADD instruction returns illegal combination of 6-operands |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01820 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The assembler does not allow aMPY||SADD instruction in revision less than
3 silicon.
The instruction forms onpage 8-88 such as:
d3 = d1*d2
|| d4 = d6 + d5>>-d0
return an "Illegal combination of 6 operand operation" error. Use the -v3
option to assemble correctly.
Workaround/Solution
Perform the shift in a separate instruction.
|
| Title: In PPASM, if you specify a multiplication and addition in parallel, .. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01952 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
In PP assembler if a multiplication and an addition are
done in parallel, the multiplication instruction must be
specified first or the assembler generates an error.
i.e. d1=d2*d3 || d4 = d5 + d6 <=== works okay
d4 = d5 + d6 || d1=d2*d3 <=== doesnt work
Workaround/Solution
Always specify the multiply instruction first.
|
| Title: ppasm incorrectly assembles certain EALU instructions |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02004 | Assembler | 1.13 | Will fix in a future release |
Bug Description
The PC NT version 1.13 of ppasm incorrectly assembles the following EALU
instructions (bits 31,27 are 1 instead of 0):
d2 = ealu(d5, d4\\d0, %d0)
|| a8 = d3
|| d7 = &*(-5)
Assembles as: fa1282df instead of 721282df
d3 = ealu(d3, d2\\d7, %d7)
|| d1 = &*(a9 += x8)
|| d2 = &*(a0 += x0)
Assembles as: fbdb5de2 instead of 73db5de2
d2 = ealu(d2, d1\\d0, %d0)
|| d3 = &*(a8 += x9)
|| *a3++ = d3
Assembles as: fa1282df instead of 721282df
Workaround/Solution
Either avoid these instructions, or correct the misassembled bits.
|
| Title: EALU||ROTATE instruction assembles to different instruction |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02020 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
EALU||ROTATE instruction assembles incorrectly.
Example:
d0 = FOO
d1 = ealu(FOO: d1&~@mf || d5 = d1 \\ 8)
This is assembled incorrectly as: 70092080
But should be: 72292880
Workaround/Solution
None.
|
| Title: EALU instructions without a parallel instruction doesn't always work. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02039 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Ealu instructions are sometimes assembling incorrectly when
appearing without parallel instructions.
Example:
This Assembles incorrectly without parallel instructions:
temp1_temp2 .set d1
mask .set d2
test2 .set d4
test2 =me ealu(MULT_SHIFT:(temp1_temp2\\31&mask)|(@mf&~mask))
Incorrectly assembles as: 70242100
But should assemble as: 72242100
The instruction assembles correctly once parallel instructions are added:
d0 =r (d0 * d0)<<1
|| test2 =me ealu(MULT_SHIFT:(temp1_temp2\\31&mask)|(@mf&~mask))
|| d0 = d0
Workaround/Solution
None.
|
| Title: The destination register for an ealu || multiply is incorrectly assembld |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02065 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The destination register for a parrallel ealu || multiply
operation is always assembled as one register number greater.
i.e. d0=BUG
d1=ealu(BUG: d1+d1) || d6=d3*d2
is assembled as
d1=ealu(BUG: d1+d1) || d7=d3*d2
Workaround/Solution
Reverse the order of the parallel instruction so that the multiply
instruction appears first.
i.e. d6=d3*d2 || d1=ealu(BUG: d1 + d1)
|
| Title: EALU with @mf and explicit syntax is assembled incorrectly |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02127 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Instructions like the following assemble incorrectly:
d3 = ealu(BLAH: d1 | d2 & @mf)
Incorrectly Assembles as: 701B2100
instead of: 721B2100
Workaround/Solution
WORKAROUND/SOLUTION
===================
Replace the sequences such as
d0 = BLAH
d3 = ealu(BLAH: d1 | d2 & @mf)
with
d3 = d1 | d2 & @mf
|
| Title: EALU instruction assembles incorrectly |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02138 | Assembler | 1.13 | Fixed, will appear in next release. |
Bug Description
The following ealu instruction is assembled incorrectly:
Assembler produces:
Opcode (incorrect): FA1360C4C4528C40
d3 = ealu(TESTDIVIDE:
d1 - (d3\\d0 & %d0) || d2 = d3\\d0 )
|| d4 = &*(a2 + x0)
|| d3 =ub *(a8 ++= [x9])
instead of:
Opcode (correct): 721360C4C4528C40
d3 = ealu(TESTDIVIDE:
d1 - (d3\\d0 & %d0) || d2 = d3\\d0 )
|| d4 = &*(a2 + x0)
|| d3 =ub *(a8 ++= [x9])
Workaround/Solution
None.
|
| Title: PC Version incorrectly assembles right shift with shift amount in reg. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02141 | Assembler | 1.13 | Fixed, will appear in next release. |
Bug Description
This bug only applies to PC PP Assmebler:
Performing a right shift with the shift amount in a
register causes the assembler to generate the
wrong instruction. The mask bit in the oper field
when the F bit is set in the D0 code.
The assembler seems to give an incorrect opcode no matter what is done
in parallel with this right shift. A few examples follow:
d7 = d2>>u -d3
d1 = d2>> -d4
d2 = d3>>-d4
|| d1 = &*(-1)
d2 = d5>>u -d7
|| d3 = *(a10+[2])
The code assembles, but when it is loaded into the debugger, weird
symbols are present. The symbols are not consistent, but a common wrong
opcode looks like this:
d7 = d2>>u SHAMROCK SHAPE Square Root Symbol(Heart Shape)
or, another common one is taking the derivative of a Heart,
The incorrect opcodes are SOMETIMES fatal (and always incorrect) causing
the debugger to hang.
Workaround/Solution
None.
|
| Title: Assembler does not allow conditional source selection with MPY||ADD |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02307 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The conditional source selection operator is not
allowed in MPY||ADD instructions. For example
d1 = d2*d3 || d4 = d5 - d7 [n] d6
When the conditional source selection operator appears
the MPY||ADD instruction a "Processor resource allocation
conflict" message is given.
Workaround/Solution
The MPY||ADD instruction may be broken into two parts.
For example
d1 = d2*d3 || d4 = d5 + d7[n]d6
would become
d1 = d2*d3
d4 = d5 + d7[n]d6
|
| Title: Certain legal generic MPY||EALU syntax instructions will not assemble |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02313 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Legal generic MPY||EALU syntax instructions will not assemble and report
"illegal combination of six-operand instruction error."
Example:
d4 =u d1*d3
|| d6 = ealu(d6,d6\\d0,%d0)
Workaround/Solution
Replace the generic EALU syntax for MPY||EALU with the
explicit EALU syntax.
|
| Title: PP assembler doesn't let you have variables that begin with the same let |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02475 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Parallel transfer formats do not allow labels immediately following
the equal (=) that begin with "g", "m", or "h" because they are being
confused with the assignment modifiers.
Examples:
d4 =h *(a10++=vvar) ; passes
d4 =h *(a10++=gvar) ; fails because of =g
d4 =h *(a10++=mvar) ; fails because of =m
d4 =h *(a10++=hvar) ; fails because of =h
Workaround/Solution
Place at least one space following the equal in a parallel
transfer.
|
| Title: X = ealu(LABEL:Y+Z+1) is not supported |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02612 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The three-operand instruction "Di = ealu(label:Dj+Dk+1)" is not
assembled.
Workaround/Solution
There are two workarounds:
1. Use an explicit increment instruction on a later cycle after the
"Di = ealu(label:Dj + Dk)" instruction.
2. Use the two instructions
d0 = label + 0x040000 ; Set bit 18 of D0
Di = ealu(label: Dj + Dk)
|
| Title: Arithmetic expressions are evaluated without operator precedence |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02896 | Assembler | 1.10 1.13 | Fixed, will appear in next release. |
Bug Description
The order of evaluation of expressions is specified in
the user guide in section 8.2.1, pages 8-13 and 8-14.
Expressions other than address expressions are not evalutated
in the specified order. For example
d3 = 155 - 55 + 45
results in
d3 = 55
rather than the correct
d3 = 145
Operator precedence must be strictly followed.
Workaround/Solution
In order to avaoid the operator precedence problem expressions
may be fully parenthesized. For example
d3 = 155 - 55 + 45
may be specified as
d3 = (155 -55) + 45
|
| Title: EALU operation assembles incorrectly. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02906 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
The use of index registers in an ealu is recognized but when
assembled they are not properly encoded. An incorrect register
bank is chosen athough the correct register number is used. For
example in
d0 = MPY_TEST
d1 =u d1 * d4
|| d2 = ealu (MPY_TEST: d2 + x8)
index register x8 is encoded as pc. In the reported test case
d0 = MPY_TEST
d1 =u d1 * d4
|| d2 = ealu (MPY_TEST: d2 + x8)
|| d0 = *(a1 + [5])
index register x8 is encoded as its companion register d0.
Workaround/Solution
The contents of the index register may be assigned to a
d register and the d register used in place of the index
register.
|
| Title: Multiply and shift is not supported. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02907 | Assembler | 1.10,1.13 | Fixed, will appear in next release. |
Bug Description
Multiplications of the form
d1 = d2*d3 << 2
receives the message
E0004: Multiply operands must be D registers
Workaround/Solution
none
|
| Title: Bit operations are performed without operator precedence being used. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02929 | Assembler | 1.10,1.13 | Fixed, will appear in next release. |
Bug Description
Bit operations are performed without regard for operator precedence.
The result is that expressions with bitwise operations may not be
correctly evaluated. For example
d1 = 0xFFFF
d2 = (d1 & 3) ^ 3
d3 = (d1 ^ 3) & 3
The values assigned to d2 and d3 should be identical and the result in d4
below should receive the same value
d4 = 3&~d1
the current result is that d2 receives the value 0 and d3 receives the
value of the rightmost 3 bits.
Workaround/Solution
The expression 3&~Dx may be used instead of (Dx^3)&3 or (Dx&3)^3.
In general operations must be separated into simler expressions
with no more than one bitwise operation.
|
| Title: ppasm does not support any EALU||ROTATE subfunction with a -1 in it |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03218 | Assembler | 1.10 | Will fix in a future release |
Bug Description
ppasm does not support any EALU||ROTATE subfunction with a -1 in it.
See Table 4-2 on PP: 4-21.
Functions that do not assemble:
-1
-B-1
-C-1
-(B&C)-1
-(B|C)-1
-(B&~C)-1
-(B|~C)-1
(B&~C)|((-B-1)&C)
(B&C)|((-B-1)&~C)
Workaround/Solution
-x-1 is equivalent to ~x. Make this substitution accordingly to make the
assembler accept the instruction.
Equivalent functions:
-1 (no workaround)
-B-1 ~B
-C-1 ~C
-(B&C)-1 ~(B&C)
-(B|C)-1 ~(B|C)
-(B&~C)-1 ~(B&~C)
-(B|~C)-1 ~(B|~C)
(B&~C)|((-B-1)&C) (B&~C)|(~B&C)
(B&C)|((-B-1)&~C) (B&C)|(~B&~C)
|
| Title: EALU operations don't support subfunction 00 |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03248 | Assembler | 1.10,1.13 | Will fix in a future release |
Bug Description
Inserting a zero inside of an EALU function often causes the
assembler to fail. If one of the two subfunctions is unused, it
is not necessary to insert a zero.
Example:
d5 = ealu(test1: d1&((d2\\d3)&d4)) ; this will pass
d5 = ealu(test1: d1&((d2\\d3)&d4)+0) ; this will fail
Workaround/Solution
None.
|
| Title: EALU doesn't support subfunctions (B&~C)|(~B&C) and (B&C)|(~B&~C) |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03249 | Assembler | 1.10,1.13 | Fixed, will appear in next release. |
Bug Description
EALU doesn't support subfunctions (B&~C)|(~B&C) and (B&C)|(~B&~C).
If f1 or f2 is either of these, assembler returns error: Unable to match
EALU explicit expression to a d0 code
Examples:
d0 = ealu(test: d0&((d0\\d0)) + ((d0\\d0)&~d0)|(~(d0\\d0)&d0))
Workaround/Solution
None.
|
| Title: EALU doesn't support certain arithmetic functions with @mf |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03251 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Any instruction of the forms below cause the assembler to report an
error (including ~@mf, ~(src1\\src3), etc.):
dst = ealu(label: src2 + ((src1\\src3)|@mf) + (src1\\src3))
dst = ealu(label: src2 + ((src1\\src3)&@mf) + (src1\\src3))
Workaround/Solution
None.
|
| Title: EALU doesn't support certain arithmetic functions with %src4 |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03252 | Assembler | 1.10,1.13 | Fixed, will appear in next release. |
Bug Description
Assembler reports an error in instructions like the following which use
the mask generator (%src4) (including forms with ~(src1\\src3), ~%src4, etc.):
dst1 = src2 + ((src1\\src3)&%src4 + (src1\\src3))
dst1 = src2 + ((src1\\src3)|%src4 + (src1\\src3))
Note that the assembler only complains if there is no C port (%src4)
present on the left hand function f1(b,c).
Workaround/Solution
None.
|
| Title: EALU operations don't support the (-1) subfunction |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03253 | Assembler | 1.10,1.13 | Fixed, will appear in next release. |
Bug Description
Assembler does not support the minus 1 subfunction. When it sometimes works,
it misassebles the function using a 15-bit immediate instead of the ALU
subfunction.
From PP User's Guide page PP:4-21
output = A & f1(B,C)+f2(B,C)
If f1=-1 or f2=-1, the code will not assemble correctly.
Examples:
d0 = ealu(test2:d2&-1 + d3)
Workaround/Solution
None.
|
| Title: EALU || ROTATE with a non-D dst2 causes a segmentation fault |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03286 | Assembler | 1.10,2.00 | Fixed, will appear in next release. |
Bug Description
If a non-D register is used as dst2 (as x2 is used below), the assembler
will crash with a Segmentation Fault.
Example:
d3 = ealu(test22: d1&((d2\\d1)) + (d2\\d1) || x2 = d2\\d1)
Workaround/Solution
None.
|
| Title: reti instruction not assembled (at all) |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03321 | Assembler | 2.00beta | Fixed, will appear in next release. |
Bug Description
The retiN commands are not assembled correctly in the
beta release nor were they correctly assembled in release
1.10.
Workaround/Solution
none
|
| Title: .struct, .union and .tag directives align on 8 bit boundaries, not 32 |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03331 | Assembler | 1.10 | Will fix in a future release |
Bug Description
Directives .struct, .tag and .union do not force alignment on
32 bit boundaries. They only force 8 bit alignment. This means
that structures/unions containing elements requiring speific alignments
may be aligned on any boundary. This will cause memory access failures.
Workaround/Solution
Place directives of the form
.align 32
before .struct, .tag and .union directives.
|
| Title: EALUF operations are always assembled as EALU operations |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03347 | Assembler | 1.10 | Fixed, will appear in next release. |
Bug Description
Specification of ealuf via the "ealuf" keyword is ignored. When ealuf is
needed, it can be generated by writing two ealu functions with the same label,
where one ealu function is the inverse of the other as in Example 2 below.
Example 1:
d1 = ealuf(label1: d2+d3) ; Assembles incorrectly and ealuf is ignored.
d1 = ealuf(d1,d2\\d3,%d0) ; Assembles incorrectly and ealuf is ignored.
Example 2:
d0 = label3
d2=d3*d4 || d1 = ealu(label3: d2+d3>>0) ; Assembles correctly as ealu
d2=d3*d4 || d1 = ealu(label3: d2-d3>>0) ; Assembles correctly as ealuf
Workaround/Solution
none
|
| Title: No error for mismatched protection bits |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03361 | Assembler | 1.10,2.00 | Fixed, will appear in next release. |
Bug Description
Different protection bit settings are allowed on parallel commands.
This should be reported as an error. For example
lctl =[.n] ealu(test2306: -1 || d2 =[.nvc] d1\\d7)
should receive an error message since "[.n]" and "[.nvc]" are not
the same.
Workaround/Solution
Specify the protection bits identically on all parallel
commands.
|
C I/O DEFECTS
| Title: There is a bug in the cio code involving cio writes to the host. If |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01843 | C I/O | 1.10 | Fixed, will appear in next release. |
Bug Description
There is a bug in the cio code involving cio writes to the host. If
the first write to a stream is larger than 256 bytes, memory in the
target and the host will be overwritten. This bug affects the function
fwrite.
Workaround/Solution
Make sure the first write to a stream is less than 256 bytes, all subsequent
writes to that stream, regardless of size, should work correctly.
For example:
fwrite(buffer,sizeof(char),16384, fptr);
will break, but
fwrite(buffer, sizeof(char), 1, fptr);
fwrite(buffer, sizeof(char), 16383, fptr);
will work ok.
|
DEBUGGER DEFECTS
| Title: Deubgger fails to display BP's when a BP is set in file with long path |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01896 | Debugger | 1.13 | Fixed, will appear in next release. |
Bug Description
When a breakpoint is set in a file with a very long path set with the "use"
command, listing the breakpoints with bl does not display all breakpoints.
Workaround/Solution
Make a soft link to the directory which will shorten the number of characters
in the path. Then add "use linkname" instead of "use very/very/long/path" to
the init.cmd file.
|
| Title: RUNB command returns incorrect cycle count under some circumstances. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01898 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
The TCOUNT register is not accurately simulating the number of clock
cycles when external memory is being accessed. This is also exhibited in
the runb command returning incorrect values in the clk register.
Workaround/Solution
Do not trust TCOUNT or CLK if accessing external memory or when issuing
transfer controller packet requests.
|
| Title: Spawning ppsim before mpsim may cause debuggers to hang |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02145 | Debugger | 1.10,2.00beta | Fixed, will appear in next release. |
Bug Description
When PP simulators are spawned before the MP simulator, the MP simulator
may crash.
Workaround/Solution
Start MP simulator before PP simulators.
|
| Title: In the debugger, -9 was converted to -1 when disassembled |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02540 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
Subtraction in address offset expressions does not
always produce a correct result.
Example:
d1 = d1 + 1 || d3 = a4 || *(a0 - 9) =b d4
disassembles as:
d1 = d1 + 1 || d3 = a4 || *(a0 - 1) =b d4
Workaround/Solution
None.
|
| Title: Incorrectly executes an MP instruction of the form "st -64(r2:m),r2." |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02541 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
The MP simulator contains a bug that can cause it to incorrectly execute
an MP instruction of the form "st -64(r2:m),r2." When the simulator attempts
to execute this instruction, it incorrectly increments the value of r2 before
writing r2 to memory; the increment is supposed to follow the write.
Workaround/Solution
None.
|
| Title: dst and dld do not update the memory in the memory window |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02543 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
The dst and dld commands are supposed to behave identically to st and ld
when accessing on-chip memory. When viewing in the memory window the on-chip
location stored by dst, the value at the stored location never gets updated.
But simulation is still performed correctly. If the location is read with
a ld or dld, the correct value is read.
Example:
addu 0xff,r0,r13
st 0x1010004(r0),r13
At this point, location 0x1010004 contains the value ff in the memory window.
addu 1,r0,r13
dst 0x1010004(r0),r13
Here, the memory window incorrectly still displays the old value ff.
dld 0x1010004(r0),r14
But here you can see that the simulator actually behaves correctly
internally, because r14 contains the expected value: 1.
Workaround/Solution
Use st and ld when accessing internal memory.
|
| Title: Single stepping is too slow |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02578 | Debugger | 1.13 | Fixed, will appear in next release. |
Bug Description
Single stepping C code is too slow.
Workaround/Solution
None.
|
| Title: sconfig without a filename is supposed to restore the screen configurati |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02590 | Debugger | 1.13 | Fixed, will appear in next release. |
Bug Description
Typing sconfig alone is supposed to restore the screen configuration stored
in init.clr which is either in the current directory or the D_DIR
environment variable. The PC version 1.13 does not look for the file and
returns an error if no filename is supplied.
Workaround/Solution
Save the screen configuration before making any changes with the command
"ssave". Then "sconfig" by itself will load the default screen configuration
from the file "init.clr".
|
| Title: Suspending a transfer doesn't work. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02594 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
PP code submits packet transfer suspension by sending "S" bit. However,
PP continues with ongoing packet transfer.
Workaround/Solution
If Q is active when packet suspension is submitted, and "S" bit in
the COMM register is set, Q goes to ZERO and P set to
1 automatically(S = 1, Q = 0, P = 1) informing linked-list suspended,
Q was still active.
In the simulator, P = 1 triggers the packet transfer eventhough
the S bit is set to ONE. That is the bug.
As a workaround, if P is made ZERO(S = 1, Q = 0, P = 0) after
the instruction which sets the S bit to 1 will suspend the
packet transfer.
To resume the packet transfer from the point where it was
suspended, set S = 0, and P = 1.
|
| Title: Color commands work from take file but not in init.pdm |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02603 | Debugger | 1.20 | Will fix in a future release |
Bug Description
Goto /net/magoo/home1/karen/c80hotline/take_color.sdb
Will fix next release
Workaround/Solution
WORKAROUND/SOLUTION
===================
Load colors in manually, not from init.pdm
|
| Title: When target board power is off, debugger crashes with program exception |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02606 | Debugger | 1.13 | Fixed, will appear in next release. |
Bug Description
When target board power is not connected, starting the debugger causes a
crash, reporting a program exception error.
Workaround/Solution
Make sure power is connected to the target board when starting the debugger.
|
| Title: ppsim displays instructions of the form dX =b *(aY-Z) incorrectly |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02673 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
When the operation dX =b *(aY-Z) is combined with certain parallel
instructions, the address offset (Z) is not displayed in the disassembly
window. An example instruction causing the problem is:
*a0 = d0 || d1 =b *(a8-8)
which disassembles incorrectly as:
*a0 = d0 || d1 =b *(a8)
Workaround/Solution
Please ignore the incorrectly displayed disassembly. Code is assembled
correctly. For debugging purposes, the operation with the address offset
can be placed in an instruction by itself.
|
| Title: the watch window displays the wrong color just before entering a functi |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02719 | Debugger | 1.10 | Will fix in a future release |
Bug Description
Just prior to entering main(), when a variable has not yet become valid,
the watch window displays the uninitialized value in a color which indicates
that the variable is valid. (Default invalid color is red.)
Workaround/Solution
Ignore color information in watch window when just entering the beginning of
main().
|
| Title: 2 command line resets cause debugger to hang |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02860 | Debugger | 1.20 | Will fix in a future release |
Bug Description
In the MP SDB Debugger, 2 consecutive reset commands will cause the
debugger to get a processor access timeout error.
Workaround/Solution
Perform a single-step between reset commands.
|
| Title: Debugger command WA & DISP cannot display correct double float variable |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02863 | Debugger | 1.20 | Fixed, will appear in next release. |
Bug Description
Debugger displays incorrect values for double floats with the WA and
DISP commands.
Workaround/Solution
None.
|
| Title: Clock/tcount is inaccurate by +-50% when accessing external memory |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02869 | Debugger | 1.10,1.13,2/22 | Will fix in a future release |
Bug Description
When packet transfers/external memory accesses are occurring,
clock cycles as recorded by tcount are extremely inaccurate on the
simulator.
Workaround/Solution
None.
|
| Title: ms command has object file endianess conflict with target on simulator |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02874 | Debugger | 1.10,2.00alpha | Fixed, will appear in next release. |
Bug Description
When using the ms command on the simulator, the following error occurs when
trying to load the output file:
mvp1_pp0> load output.dat
Loading output.dat
Object file endianess conflicts with target
Check memory map
Workaround/Solution
The following program can be run to patch the saved file to the correct
endianness.
Compile and run this program with the saved file as the argument.
/*********************************************************/
#include
FILE *srcfile;
main(int argc, char *argv[])
{
if ((srcfile = fopen(argv[1],"r+b")) == NULL)
{
printf("Error opening [%s]\n", argv[1]);
exit(1);
}
printf ("Patching [%s] ...\n",argv[1]);
fseek(srcfile,18,0);
fputc(0x2,srcfile);
fclose(srcfile);
}
/*********************************************************/
|
| Title: Simulator quits when trying to WA a variable |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02987 | Debugger | SDSs | Fixed, will appear in next release. |
Bug Description
When doing a WA args on the following code, the debugger exits:
void ppfunc(long *args) {
int i;
long x,y,z;
x=*args++;
y=*args++;
z=*args++;
for(i=0;i<1;)
;
}
Workaround/Solution
None.
|
| Title: Exclusive Range Breakpoint Enable does not work |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03073 | Debugger | 1.10 | Fixed, will appear in next release. |
Bug Description
Exclusive Range Breakpoint Enable not working correctly with C80 emulator
version 1.10. The emulator allows user to modify parameters for the
exclusive range breakpoint but transitions to a 'Breakpoints disabled' state
when the parameters are entered(OK'd).
Workaround/Solution
Use inclusive breakpoints as a work-around to this problem.
|
| Title: If you declare large multidimensional array the debugger can't handle. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03137 | Debugger | 1.10 | Will fix in a future release |
Bug Description
If you declare a very large multidimensional array the debugger does not
handle it properly. This is best explained with an example. Let's say
you have the following global variable declaration in a C file.
#pragma DATA_SECTION( pp_data, "mysection" )
unsigned char pp_data[ 4 ][ 0x1c200 ];
You also have the following statements in your link file.
MEMORY
{
MYMEM: o=0x02600000 l = 0x00100000
}
SECTIONS
{
mysection: >MYMEM
}
If this is all you had in "mysection", the following expressions would
yield:
&( pp_data[ 0 ][ 0 ] ) = 0x02600000
&( pp_data[ 1 ][ 0 ] ) = 0x0261c200
&( pp_data[ 2 ][ 0 ] ) = 0x02638400
&( pp_data[ 3 ][ 0 ] ) = 0x02654600
If you type the following statements into the debugger, you will get a
different answer.
? &( pp_data[ 0 ][ 0 ] ) ==> 0x02600000
? &( pp_data[ 1 ][ 0 ] ) ==> 0x0260c200
? &( pp_data[ 2 ][ 0 ] ) ==> 0x02618400
? &( pp_data[ 3 ][ 0 ] ) ==> 0x02624600
The linker generates the correct addresses, but the debugger computes
the wrong addresses because it only uses the least significant 16 bits
of the 2nd dimension size.
Workaround/Solution
Instead of decalring the array with the large dimension second, declare the
large dimension first.
i.e. instead of:
unsigned char pp_data[ 4 ][ 0x1c200 ];
use:
unsigned char pp_data[ 0x1c200 ][ 4 ];
|
| Title: load/sload is slow |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03140 | Debugger | 1.10 | Will fix in a future release |
Bug Description
Load and sload on the Workstation Debugger are unnecessarily slow.
Workaround/Solution
None.
|
| Title: Analysis window contains ambiguous keyboard shortcuts |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03171 | Debugger | 1.10,1.13,1.20 | Fixed, will appear in next release. |
Bug Description
The keyboard shortcut "E" in the analysis menu is ambiguous. It can mean
Exclusive Range Enable or EMU0 driven low.
Workaround/Solution
Use the mouse to select these options.
|
| Title: Can't widen the debugger windows on PC debugger |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03238 | Debugger | 1.13,1.15 | Fixed, will appear in next release. |
Bug Description
The PC debugger's maximum window width is not wide enough to display all
PP assembly instructions. For instance, if a PP instruction is using all
four slots (MPY, ALU, Global transfer, Local transfer), the debugger
dissassembly window cuts off the entire local slot.
Workaround/Solution
None.
|
DOCUMENTATION DEFECTS
| Title: memtrans() is prototyped incorrectly |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02062 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
The code generation example in the Code Generation Tools UG (CG:14-1
thru CG:14-27) contains the following error:
The call to memtrans in files pow4.c, sum.c, fib.c, and
fact.c call memtrans with incorrect types. These files
incorrectly assume memtrans is prototyped as
memtrans(int *, int *, int).
However, the function memtrans is correctly prototyped
in mvp.h as: char *memtrans(char *, char *, int).
Therefore, the compiler complains of type mismatch on the
arguments.
Workaround/Solution
Cast the arguments passed to the memtrans function in files pow4.c,
sum.c, fib.c, and fact.c as char *.
i.e. in file fact.c CG:14-11
memtrans(comm_fact, onchip, sizeof(comm_fact));
becomes
memtrans((char *)comm_fact, (char *) onchip, sizeof(comm_fact));
|
| Title: Online Documentation CD-ROM doesn't work with Windows 95 |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02267 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
The online documentation CD does not work under Windows 95 and Windows NT.
Workaround/Solution
Follow the steps below and you should be able to view the C8x online reference
CD from within Windows 95. The steps below will assume that your CD is D:\.
1. From Windows 95 open up a DOS window.
2. Add the lines:
SET TEMP=C:\TEMP
SET FULLTEMP=C:\TEMP
to your AUTOEXEC.BAT file.
3. There is a file on the CD, d:\refset\iview.ini . Copy this file
to your Windows directory. You need to edit this file. At the beginning
of the ini file there are directions on how to do this.
4. This is the crucial step. Change to the Windows\system directory.
Create a file named 'win32s.ini'. This is a text file and should
contain nothing (blank). It is the existance of the file that matters.
5. Type:
CD D:\REFSET
then type:
GO
If everything went ok, Iview should appear.
Note: For Windows NT, do steps 1, 2, 3, and 5 but don't worry about step 4.
|
| Title: README line 14 - says that 30M disk space is required. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02439 | Documentation, Development Tools | 1.13 | Will fix in a future release |
Bug Description
In version 1.13 of the development tools, the README file states that
30 Mbytes of disk space is required for installation.
Workaround/Solution
10M of available disk drive space is sufficient for a complete
installation on the PC version, and 20M is sufficient for the
Sun version.
|
| Title: Simulator does not support illegal instruction/memory fault traps |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02542 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
The Code Generation Tools Guide does not document the fact that the
simulators do not support the traps for illegal instruction and memory
fault.
Workaround/Solution
None.
|
| Title: Incompatibility between Code Gen Description and C8x Tools |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02550 | Documentation, Development Tools | na | Will fix in a future release |
Bug Description
The assert() macro does not output a message as documented in the Code
Generation Tools User's Guide pages CG:5-15 CG:5-23 and, but simply
terminates the program.
Workaround/Solution
Programmers may insert a printf() inside the assert() macro, but must
be careful to avoid confusion with both MP's and PP's printing diagnostic
error messages simultaneously.
You may redefine assert by instead of including assert.h, define assert
as follows:
#include
#define assert(expr) { \
if(!(expr)) { \
fprintf(stderr,"Assertion failed, file: %s, line: %d\n", \
__FILE__,__LINE__); \
exit(1); \
} \
}
|
| Title: Command-line access to analysis functions is undocumented |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02853 | Documentation, Development Tools | 1.10,1.13,1.20 | Will fix in a future release |
Bug Description
Debugger command-line access to analysis functions is undocumented. This
is needed to establish analysis breakpoints to be used in take files.
Workaround/Solution
3.0 Pseudo Analysis Registers
3.1 MP & PP ANAENBL Analysis Enable
This register is utilized to enable analysis and select EMU0/1 trigger out
for a processor.
bits [1:0] => 0x3 to enable analysis
bit 2 => 1 to enable automatic rearm of analysis prior to execute
command. (This bit is automatically set when using analysis
menu to enable analysis)
bit 4 => EMU0 trigger out select
bit 5 => EMU1 trigger out select
3.2 MP ANACONFIG
This register is utilized to select breakpoint comparator configuration,
bus selection, and access qualifications.
bit 0 => 0
bit 1 => 0
bit 2 => Breakpoint 1
bit 3 => Breakpoint 2
bit 4 => Range Breakpoint
bit 5 => EMU0 driven low
bit 6 => EMU1 driven low
bit 7 => 0
. => 0
. => 0
bit 23 => 0
bit 24 => Comparator 1 bus select ( 0 = Program bus, 1 = Data bus)
bit 26,25 => Comparator 1 bus qualification
00 Read or Write
01 Read only
10 Write only
11 Invalid
bit 27 => Comparator 2 bus select ( 0 = Program bus, 1 = Data bus)
bit 29,28 => Comparator 2 bus qualification
00 Read or Write
01 Read only
10 Write only
11 Invalid
bit 30 => Single Point(0)/Range(1)
bit 31 => Inclusive(0)/Exclusive(1)
NOTE: If you select the Program bus with write only qualification the
breakpoint will never occur.
3.3 PP ANACONFIG
This register is utilized to select breakpoint comparator configuration,
bus selection, and access qualifications.
bit 0 => 0
bit 1 => 0
bit 2 => Breakpoint 1
bit 3 => Breakpoint 2
bit 4 => Range Breakpoint
bit 5 => EMU0 driven low
bit 6 => EMU1 driven low
bit 7 => 0
. => 0
. => 0
bit 22 => 0
bit 23,22 => Comparator 1 bus select
00 Program Bus
01 Global Bus
10 Local Bus
11 Invalid
bit 25,24 => Comparator 1 bus qualification
00 Read or Write
01 Read only
10 Write only
11 Invalid
bit 27,26 => Comparator 2 bus select
00 Program Bus
01 Global Bus
10 Local Bus
11 Invalid
bit 29,28 => Comparator 2 bus qualification
00 Read or Write
01 Read only
10 Write only
11 Invalid
bit 30 => Single Point(0)/Range(1)
bit 31 => Inclusive(0)/Exclusive(1)
NOTE: If you select the Program bus with write only qualification the
breakpoint will never occur.
3.4 MP & PP ANASTATUS Analysis Status
This register indicates the state of events that are enabled with bits 2,
3, and 4 of the ANACONFG register. During a run, if an event is taken,
that event's bit in the status register is cleared. In other words, the
exclusive or of bits 2,3 and 4 of the ANACONFIG and ANASTATUS bits indicate
that an event has occurred.
bit 0 => 0
bit 1 => 0
bit 2 => Breakpoint 1
bit 3 => Breakpoint 2
bit 4 => Range Breakpoint
bit 5 => EMU0 driven low
bit 6 => EMU1 driven low
3.5 MP & PP BRK1 BRK2 Address
The brk1 and brk2 registers are utilized to set hardware breakpoint
addresses.
3.6 Analysis Programming Example
To program the analysis module for Single breakpoint type the following
commands on the command line.
>?anaenbl = 1
>?anaconfig = 4
>?anastatus (should report back 4)
>?brk1 = 0x02000020 (or any address in your program)
>run (processor will halt when breakpoint taken)
>?anastatus (should report back 0 - bit 2 cleared)
|
| Title: Typographical errors in Table 2-1 on pg. CG:2-6 of CGT users guide. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02912 | Documentation, Development Tools | SPRU108A | Will fix in a future release |
Bug Description
In Table 2-1. TMS320C8x C Data Types, on page CG:2-6 in the MVP Code
Generation User's Guide (SPRU108A), there is an error. The fourth line
under the "Type" column should read "unsigned short" rather than
"unsigned character". All other information in the table is correct.
Workaround/Solution
None.
|
| Title: Error checking cannot be disabled in the Executive |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02954 | Documentation, Development Tools | 1.10,all | Will fix in a future release |
Bug Description
The Multitasking Executive manual states on P. EX:1-9 paragraph 5, "some
developers may elect to disable the kernel's software error checking to
eliminate unnecessary runtime overhead." It is not explained how this
is accomplished.
Workaround/Solution
The only way to accomplish this is by editing the source code to the
Executive and remove all code that performs error checking. Search
for all areas of code that contain "TASK_ERROR" and modify the code
accordingly.
|
| Title: cd debugger command is undocumented |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03177 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
The cd (change directory) debugger command is not documented.
Workaround/Solution
The cd (change directory) command is available from the debugger command
line, and will change the current working directory for loads and saves.
Also, cd by itself will print the current working directory.
|
| Title: Simulator does not support revision 3.x silicon |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03187 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
The fact that the simulator does not support revision 3.x silicon is
undocumented. If PP code needs to be assembled with the -v3 option, this
code will have unpredictable results when run on the simulator. Other
uses of revsion 3-specific features will also not simulate correctly.
Workaround/Solution
None. The new simulator which will support revision 3 silicon will be
released in the coming months.
|
| Title: (Example 15-14) of PP UG will not assemble without error. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03292 | Documentation, Development Tools | 1.10 | Will fix in a future release |
Bug Description
Page PP:15-31 Section 15.2.4.4 of the Parallel Processor User's Guide gives
an example (Example 15-14) that will not assemble.
d0 = h1add_h0subd7 =m ealu(TEST: d6 + ((d5 & ~%%16) | (-d5 & %%16)))
Workaround/Solution
Do not use the immediate form of the instruction. Store the value in a
register and access it like:
d0 = TEST
d7 =m ealu(TEST: d6 + ((d5 & ~%%d4) | (-d5 & %%d4)))
|
| Title: Errors in C80 to C82 Software Compatibility UG: pp. 1-7,1-12 |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02559 | Documentation, Hardware | SPRU154 | Will fix in a future release |
Bug Description
There are errors in the TMS320C80 to TMS320C82 Software Compatibility User's
Guide on Page 1-7 (Figure 1-1), and Page 1-12.
Workaround/Solution
1. Page 1-7 (Figure 1-1) Memory addresses starting at PP2 data RAM 2 and
going to the end of the page are incorrect and need to be changed as
shown below:
RAM Block incorrect address correct address
------------- ----------------- -------------
PP2 data RAM 2 (start) 0000 8000 0000 A000
" (end) 0000 87FF 0000 A7FF
Reserved (start) 0000 8800 0000 A800
" (end) 0000 8FFF 0000 AFFF
PP3 data RAM 2 (start) 0000 8000 0000 B000
" (end) 0000 87FF 0000 B7FF
Reserved (start) 0000 8800 0000 B800
" (end) 0000 8FFF 0000 BFFF
2. Page 1-12 (First Paragraph) delete "(PP1's in this case)"
3. Page 1-12 (First Paragraph) change "010017FCh in the `C80 and to address
01001FFCh in the 'C82" to "0100#7F0h in the `C80 and to address
0100#FF0h in the `C82"
|
| Title: PP Users Guide Tables 4-2,8-27 contain errors |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03308 | Documentation, Hardware | na | Will fix in a future release |
Bug Description
Tables 4-2 and 8-27 do not correctly document the last two function
codes in the tables. They should read as follows:
f1 f2 Subfunction Common Use
----------------------------------------------------------------------
-- 3C (B&~C)|(-B& C) Choose B if C = all 0's and -B if C = all 1's.
-- C3 (B& C)|(-B&~C) Choose B if C = all 1's and -B if C = all 0's.
Note that (-B-1) should be (-B) and note the fact that these function
codes cannot be used as f1 codes.
The following two functions are not supported by the assembler, but can
be coded by hand. Ensure that the E bit is not set in d0 if you wish to
hand-assemble these functions:
f1 f2 Subfunction Common Use
----------------------------------------------------------------------
28 3C (B&~C)|(~B& C) Choose B if C = all 0's and ~B if C = all 1's.
82 C3 (B& C)|(~B&~C) Choose B if C = all 1's and ~B if C = all 0's.
Workaround/Solution
None.
|
EMURST DEFECTS
| Title: MS Windows EMURST doesn't keep widnow open when there is an error |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02553 | Emulator emurst | 1.13 | Will fix in a future release |
Bug Description
Emurst does not keep the window open long enough to determine if it
was successful.
Workaround/Solution
Create the following file:
-- [EMURST.BAT] --------------------------------------------------------------
@echo off
emurst -p%1
if not errorlevel 1 goto Pass
:Fail
pause
goto Pass
:Pass
------------------------------------------------------------------------------
If the reset is successful, the window will close immediately. If it fails,
the window will stay open until you press a key. Also, this
adds the ability to pass the I/O address as a parameter from the icon
properties window. No, the EMURST.EXE does not have a problem with "-p" if you
don't pass it a parameter. It still defaults to 240. You could put the "-p" in
the properties if you like.
-- [EMURST Icon Properties] --------------------------------------------------
Description: EMURST
Command Line: EMURST.BAT 240
Working Directory: C:\BTT522
Shortcut Key: none
------------------------------------------------------------------------------
|
| Title: emurst -help gives Segmentation fault |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02701 | Emulator emurst | 1.10 | Fixed, will appear in next release. |
Bug Description
Typing emurst -help or emurst -p without a number causes a segmentation
fault.
Workaround/Solution
None.
|
| Title: PC Version of emurst crashes when target board has no power |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02702 | Emulator emurst | 1.13 | Will fix in a future release |
Bug Description
Running emurst with no power to the target board causes a crash.
Workaround/Solution
Make sure target board is powered up before running emurst.
|
| Title: the -p parameter is read as hexidecimal, but the SCSI code interprets de |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02556 | emurst | na | Fixed, will appear in next release. |
Bug Description
The -p parameter is read as hexadecimal, and translated into decimal
when referring to the destination driver.
i.e. emurst -p b would attempt to access /dev/sd11
and emurst -p 11 would attempt to access /dev/sd17
Workaround/Solution
Use hexadecimal to represent the decimal port number.
|
HEX CONVERTER DEFECTS
| Title: mvphex output has address discontinuities when COFF file is large |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02149 | Hex Converter | 1.10 | Fixed, will appear in next release. |
Bug Description
The hex utility output files contain address discontinuities
with some address ranges not being displayed.
Workaround/Solution
None.
|
LINKER DEFECTS
| Title: -s switch generates relocation symbol errors |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02675 | Linker | 1.10 | Fixed, will appear in next release. |
Bug Description
Using the -s switch for the linker generates many relocation
symbol errors when linking relocateable object modules which
have not had symbols stripped.
Workaround/Solution
Do not strip symbols in the final linker step when the
error occurs. The resulting object module will be larger
but execution behavior should not change.
|
| Title: Coff file contains instructions with the same address. |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03101 | Linker | 1.10,1.13,2.a1 | Will fix in a future release |
Bug Description
The address of two different locations in memory is assembled
by mpasm to the same address. The problem occurs with both PC
and workstation tools.
Workaround/Solution
none
|
PDM DEFECTS
| Title: The dlog command does not work as is explained in the User's Guide |
| Bug # | Tool | Versions | Fixed? |
| SDSsq01759 | PDM | 1.10 | Fixed, will appear in next release. |
Bug Description
The dlog command does not work as is explained in the UG.
From a PDM command window if you type dlog filename, whatever commands
you type in the PDM command window should get logged in the file named
filename. However, it looks like the entire screen is being logged,
not just the commands.
For example:
From a PDM command window:
PDM:1>> dlog init.pdm
PDM:2>> spawn mpsim
PDM:3>> send -g MP load sample
PDM:4>> dlog close
The file init.pdm is supposed to have:
spawn mpsim
send -g MP load sample
However, init.pdm actually contains
PDM:2> spawn mpsim
PDM:3> send -g MP load sample
PDM:4> dlog close
Workaround/Solution
None.
|
| Title: If prun -r is issued instead of send -r un, the debugger will crash |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02445 | PDM | 1.4 | Will fix in a future release |
Bug Description
Sometimes using the prun -r command from the PDM causes the debuggers to
crash.
Workaround/Solution
Instead of using "prun -r", type "send -r run" from the PDM command line.
Remember though that "send -r run" does not perform the debugger synch-
ronization.
|
| Title: When running PDM from a shell script, script is killed when pdm exits |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03235 | PDM | 1.3 | Fixed, will appear in next release. |
Bug Description
When running pdm from a shell script or any other kind of parent program,
pdm terminates the parent process when pdm exits.
Workaround/Solution
None.
|
RTS DEFECTS
| Title: xp_rts.lib gives undefined symbol |
| Bug # | Tool | Versions | Fixed? |
| SDSsq02498 | RTS | 1.13 | Fixed, will appear in next release. |
Bug Description
The system() function defined in stdlib.h is not supported
for the mvp. Using this function results in linker errors
since system() is not defined in the run time system libraries.
The system() function should have a dummy body supplied and
unsupported functions in standard header files documented.
Workaround/Solution
Do not use the system() function or supply a body for
it.
|
| Title: Auto initialization fails for data less that 4 bytes in one .bss |
| Bug # | Tool | Versions | Fixed? |
| SDSsq03293 | RTS | 1.10 | Fixed, will appear in next release. |
Bug Description
Autoinitialization of data within a single .bss area
is not initialized correctly. Values are assumed to be
aligned on the correct byte within a 4 byte initialization
record (.cinit). Multiple initializations are actually
leftmost adjusted within a word. Multiple values
initialized within the same word may overlay each other
and/or be placed at a wrong location within the correct
word.
Workaround/Solution
none
|
|