This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Unexpected address range accesses from bare metal code

Note: This was originally posted on 12th September 2012 at http://forums.arm.com

My test system (Carbon SoCD running a Cortex A9 model) has a memory map with entry point 0xFFFF0000, with a valid memory range from 0xFFFF0000-0xFFFFFFFF, as well as 0x50000000-0x8FFFFFFF where some stack, heap, data, etc. lives. My code is a simple dhrystone app and makes some printf calls to display the app's actions and status. However, I am strangely seeing access to low memory, reads going to 0xA or 0x38 for example. I've tried to debug where these are coming from but whatever is happening is hidden in some system library. Using the disassembly and my .map linker output I see that the code is in flsbuf.o or printf_char_common.o at the time. Depending on whether I comment out certain printf statements, the place/time the out of range access occurs is different. Does anyone have any clues as to what might be happening? Or more information that I can provide to help debug this?

If I comment out all the printfs, none of the out of range accesses occur. Also, if I adjust the system memory to be valid at those low memory addresses, the program executes and completes just fine. So I have a workaround of sorts but I want to make sure this won't be a problem for actual hardware.

Thanks,
Rich
Parents
  • Note: This was originally posted on 17th September 2012 at http://forums.arm.com

    Two thoughts, probably not useful:

    1. flsbuf.o is probably only using the FILE obejct (allocated on the heap) so if it's making wild reads, perhaps the FILE object has been corrupted (by being overwritten?)  Maybe try inserting some some heap checking by using '__heapvalid' (but perhaps not using fprintf).

    2. If you tend to write 'printf(p)' instead of 'printf("%s", p)' then make sure that the string that 'p' points at doesn't have any (undoubled) '%'s in it.

    Can you get a stack backtrace at the point of the wild access?
Reply
  • Note: This was originally posted on 17th September 2012 at http://forums.arm.com

    Two thoughts, probably not useful:

    1. flsbuf.o is probably only using the FILE obejct (allocated on the heap) so if it's making wild reads, perhaps the FILE object has been corrupted (by being overwritten?)  Maybe try inserting some some heap checking by using '__heapvalid' (but perhaps not using fprintf).

    2. If you tend to write 'printf(p)' instead of 'printf("%s", p)' then make sure that the string that 'p' points at doesn't have any (undoubled) '%'s in it.

    Can you get a stack backtrace at the point of the wild access?
Children
No data