Further fix for read at EOF, don't write if length is zero. #728
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I found a further problem when reading at the end of a file.
If there is some data in the file, but not enough, then after the first read call returns some data, fread will ask for the rest with an updated pointer. If the first read returned an odd modulo 4 number of bytes, then this second read call will happen with a pointer that is not 32 bit aligned.
In do_semihosting, the second read gets 0 bytes but still calls mem_write. The code in mem_write which forces an aligned address then writes more data than it should altering the values returned from the first read call.
This change simply has mem_write return without doing anything if the length is zero.