| Summary: | Bad code generated for SysMin_putch() on ARM M3 target | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Technology] RTSC | Reporter: | Alan DeMars <ademars> | ||||
| Component: | Runtime | Assignee: | Karl Wechsler <karl> | ||||
| Status: | CLOSED FIXED | QA Contact: | |||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | d-russo, sascha | ||||
| Version: | unspecified | ||||||
| Target Milestone: | --- | ||||||
| Hardware: | All | ||||||
| OS: | Windows XP | ||||||
| Whiteboard: | target:3.20.07 | ||||||
| Attachments: |
|
||||||
Created attachment 186447 [details]
ARM M3 code generated for SysMin_putch()
Fixed in xdc-v55 Replicated the problem with 3.20.06.81 and observed in CCS that the characters are written to a location outside of the buffer. Rebuilt with 3.20.07.84 and observed that the characters are now written only within the boundaries of the buffer. Shipped in XDCtools 3.20.07 |
Build Identifier: 3.20.06.81 and 3.21.00.30 The code generated for the C code below: if (module->outidx == SysMin_bufSize) { module->outidx = 0; module->wrapped = TRUE; } module->outbuf[module->outidx++] = ch; actually executes like this: old_outindex = module->outidx; if (old_outidx == SysMin_bufSize) { module->outidx = 0; module->wrapped = TRUE; } module->outidx++; module->outbuf[old_outidx] = ch; This results in a scribbling of the memory address one beyond the end of the SysMin output buffer whenever the output buffer index wraps. Reproducible: Always