This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


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

Re: libgcc_s.so.1 ASIS won't work with glibc.


On Thu, Jul 05, 2001 at 12:11:34AM +0200, Mark Kettenis wrote:
> frame_state.cfa            -> ? [1]
> [1] Seems to be unused, at least the GCC 2.95 stuff doesn't set it.
>     Looks like we shouldn't touch it.

Certainly the CFA is used.  You must have missed the uses
in libgcc2 in some of throw's subroutines.

> frame_state.eh_ptr         -> 0 [2]
> [2] Not true for "eh" augmentations.  These seem to be mishandled by
>     GCC 3.0.  The GCC 3.0 extract_cie_info() expects that an
>     augmentation is immediately followed by the code and data
>     alignment and return address column.  Whereas the GCC 2.95
>     extract_cie_info() expects an eh_ptr pointer first.

We "mishandle" it in gcc3 because we don't support throwing
exceptions between gcc3 and gcc2.  The EH pointer isn't used
for unwinding, but for catching exceptions.

Naturally, we'd need to handle it for glibc, since the whole
point is backward compatibility.

> [4] Only REG_SAVED_REG, REG_SAVED_OFFSET and REG_UNSAVED supported by v2?
>     What do we do with REG_SAVED_EXP?  Right now, if a throw() from
>     code compiled with GCC 2.95 encounters REG_SAVED_EXP, it will
>     abort().  Is that a problem?

It could be a problem in the future -- currently no port actually
uses REG_SAVED_EXP.  However, if a function using SSE _forces_ 
stack alignment by and'ing ESP, then REG_SAVED_EXP is the only way
to represent that operation.

If this is encountered in the compatibility __frame_state_for, the
only thing to do is return NULL, or abort.


r~


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