On 2012-06-21 00:48, Tristan Gingold wrote: > @@ -9142,9 +9152,12 @@ ix86_compute_frame_layout (struct ix86_frame *frame) > { > HOST_WIDE_INT diff; > > - /* If we can leave the frame pointer where it is, do so. */ > + /* If we can leave the frame pointer where it is, do so. Also, returns > + the establisher frame for __builtin_frame_address (0). */ > diff = frame->stack_pointer_offset - frame->hard_frame_pointer_offset; > - if (diff > 240 || (diff & 15) != 0) > + if (diff <= SEH_MAX_FRAME_SIZE > + && (diff > 240 || (diff & 15) != 0) > + && !crtl->accesses_prior_frames) > {
Can't this result in diff > 240 for access_prior_frames? And is thus non-encodable in the unwind info? Otherwise this looks pretty good... r~