Messages in this thread | | | Date | Wed, 14 Mar 2012 23:42:24 +0100 | From | Peter Waechtler <> | Subject | Re: [RFD] how to get something like chkspace / kinfo_getvmmap? |
| |
On 14.03.2012 15:31, EXTERNAL Waechtler Peter (Fa. TCP, CM-AI/PJ-CF31) wrote: > Hi, > > for implementing robust exception handlers that print out a backtrace in > the signal handler, it would be nice to have a syscall to check if a > memory access would fail. > > I know that one can parse /proc/self/maps (like libsigsegv does). > libunwind employs an addrspace->access_mem() method that does an > unprotected access because there is no (easy) way on Linux. > > > How about enhancing mincore() with a few bits that tells the caller how > the protection bits are? > The main use case is in an embedded system to avoid that the handler > (already running on an alternate signal stack) faults if the stack pointer > achieved to point into the guard page - causing backtrace() to fail. > > mincore() on FreeBSD provides some more bits, but still the access bits > are missing. > > MINCORE_INCORE Page is in core (resident). > MINCORE_REFERENCED Page has been referenced by us. > MINCORE_MODIFIED Page has been modified by us. > MINCORE_REFERENCED_OTHER Page has been referenced. > MINCORE_MODIFIED_OTHER Page has been modified. > MINCORE_SUPER Page is part of a "super" page. (only i386& > amd64) > > add > > MINCORE_PROT_W > MINCORE_PROT_R > MINCORE_PROT_X
Well, I guess some code will help?
This will also help in recognizing a guard page, for a clear and unambiguous: "stack overflow" in multi-threaded programs.
Peter
| |