This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

unwind question


Hi everybody, 

I am one of the authors of the mono (www.go-mono.org) jit compiler. We
currently try to make our runtime faster, and one way to do that is to
speedup calls to native code. 

We must be able to unwind every frame, that is a requirement and it is
no problem with jit generated code because we can generate all necessary
info.

Whenever we call into native code we save all caller saved registers in
a structure called "last managed frame (LMF)" which enables us to unwind
everything. ORP uses the same approach.

Unfortunately saving the LMF is not very fast, so one way would be to
use native unwind support provided by gcc.

So I compiled everything with -fexception and use __frame_state_for() to
get the unwinding information. That way I got 15% speedup - great.

But I soon detected that there is no unwinding information available for
functions contained inside libc. So if an exception occurs inside those
function it is impossible to unwind the stack, even when they are called
from function which has unwinding information?

Is this true, or is there a way to solve that somehow?

- Dietmar





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]