On 06/29/2010 10:59 PM, Adam Jiang wrote:
Hello, list. I'm having a problem with kernel mode stack on my box. It seems that STACKOVERFLOW happened to Linux kernel. However, I can't prove it because the lack of any detection in __do_IRQ() function just like on the other architectures. If you know something about, please help me on following two questions. - Is there any possible to do this on MIPS?
The mechanisms I know about for detecting stack overflow include: 1. Use of the MMU - stack ends at a page boundary, adjacent page is either unmapped or mapped read-only and causes an exception if violated. 2. Hooks inserted into toolchain to cause any stack decrement to be first tested against a limit. 3. Fill entire stack with a recognizable pattern before first use. After suspected stack overflow, check to see if the pattern has been disturbed in the area of the stack limit. (Disclaimer: I've used all of these in some form on other OSes, but not on Linux. Someone else may have a more directly relevant answer.)
- or, more simple question, how could I get the address $sp pointed by asm() notation in C?
How about something like: { long x; ... asm("move %0,$29":"=g"(x)); ... } Phil
Any suggestion from you will be appreciated. Best regards, /Adam
-- Phil Staub, Senior Member of Technical Staff, Wind River Direct: 702.290.0470 Fax: 702.982.0085