In the LTO branch, we changed the use of eh_personality_libfunc because when merging files from different front ends, we will have functions that require different EH personalities.
So, every function_decl now has a pointer to its personality function accessed via get_personality_function. However, this doesn't work properly when we are in global contexts. For this, we have eh_personality_decl which each front end initializes in a similar manner as eh_personality_func. But instead of creating the RTL for the libfunc, only its DECL is created (http://gcc.gnu.org/ml/gcc-patches/2008-12/msg00913.html). The problem we are having now is that in compile_file, we call dwarf2out_frame_finish() which in turn calls output_call_frame_info. On mainline, output_call_frame_info references eh_personality_libfunc, which is created for the particular FE that is active. However, on LTO, we may have several personality functions in the same object file. So, it's not clear what should we do here. Should we call dwarf2out_frame_finish() for each of the personalities that we saw in that file? Related to this is the problem that eh_personality_decl is not created in lto1, simply because it's not a real front end, it relies on each front end putting the appropriate personality on each function in the TU. But I'm not sure what should be done when we are emitting information like call frames at the global scope. Thanks. Diego.