Commit Graph

24 Commits

Author SHA1 Message Date
Jim Grosbach
7474937004 Update of 94055 to track the IR level call site information via an intrinsic.
This allows code gen and the exception table writer to cooperate to make sure
landing pads are associated with the correct invoke locations.

llvm-svn: 94726
2010-01-28 01:45:32 +00:00
Duncan Sands
4fcf6123dd I don't see any point in having both eh.selector.i32 and eh.selector.i64,
so get rid of eh.selector.i64 and rename eh.selector.i32 to eh.selector.
Likewise for eh.typeid.for.  This aligns us with gcc, which always uses a
32 bit value for the selector on all platforms.  My understanding is that
the register allocator used to assert if the selector intrinsic size didn't
match the pointer size, and this was the reason for introducing the two
variants.  However my testing shows that this is no longer the case (I
fixed some bugs in selector lowering yesterday, and some more today in the
fastisel path; these might have caused the original problems).

llvm-svn: 84106
2009-10-14 16:11:37 +00:00
Bill Wendling
2d374c78f6 Fix validation errors.
llvm-svn: 81466
2009-09-10 22:14:16 +00:00
Bill Wendling
7473700cd5 Fix validation errors.
llvm-svn: 81465
2009-09-10 22:12:50 +00:00
Eric Christopher
6d70d5842d Correct __cxa_end_catch documentation to reflect that it doesn't take any arguments.
llvm-svn: 81307
2009-09-09 01:44:53 +00:00
Jim Grosbach
72272286ca Add basic information about SJLJ EH
llvm-svn: 79714
2009-08-22 01:42:39 +00:00
Jim Grosbach
5d064eeb2a Remove a bit more cruft from the sjlj moving to a backend pass.
llvm-svn: 79272
2009-08-17 20:25:04 +00:00
Bill Wendling
e60376e857 Fix validation errors.
llvm-svn: 79131
2009-08-15 20:08:04 +00:00
Bill Wendling
038bd2c69e Fix validation errors.
llvm-svn: 79130
2009-08-15 20:07:42 +00:00
Bill Wendling
15eb9cc51e Reformatting and some cleanup.
llvm-svn: 79088
2009-08-15 08:56:09 +00:00
Jim Grosbach
c9a1dd9291 SjLj based exception handling unwinding support. This patch is nasty, brutish
and short. Well, it's kinda short. Definitely nasty and brutish.

The front-end generates the register/unregister calls into the SjLj runtime,
call-site indices and landing pad dispatch. The back end fills in the LSDA
with the call-site information provided by the front end. Catch blocks are
not yet implemented.

Built on Darwin and verified no llvm-core "make check" regressions.

llvm-svn: 78625
2009-08-11 00:09:57 +00:00
Benjamin Kramer
f3dbf34bbf Documentation: fix HTML validation errors.
llvm-svn: 78196
2009-08-05 15:42:44 +00:00
Jim Grosbach
f3e59935c3 clean up line-wrapping
llvm-svn: 71771
2009-05-14 15:44:15 +00:00
Jim Grosbach
bed3aeff20 Update the names of the exception handling sjlj instrinsics to
llvm.eh.sjlj.* for better clarity as to their purpose and scope. Add
a description of llvm.eh.sjlj.setjmp to ExceptionHandling.html.
(llvm.eh.sjlj.longjmp documentation coming when that implementation is
added).

llvm-svn: 71758
2009-05-14 00:46:35 +00:00
Duncan Sands
fb6f54629f Clarify a bit. Based on feedback by Talin.
llvm-svn: 61470
2008-12-29 15:27:32 +00:00
Misha Brukman
74411f221b Global replace of yellow W3C "valid HTML/CSS" icons with blue ones.
llvm-svn: 60880
2008-12-11 17:34:48 +00:00
Bill Wendling
4fa9da181f Validation fixes
llvm-svn: 42232
2007-09-22 10:17:08 +00:00
Anton Korobeynikov
899c0c9c8d Split eh.select / eh.typeid.for intrinsics into i32/i64 versions. This is needed, because they just "mark" register
liveins and we let frontend solve type issue, not lowering code :)

llvm-svn: 41763
2007-09-07 11:39:35 +00:00
Duncan Sands
883740b39f There is an impedance matching problem between LLVM and
gcc exception handling: if an exception unwinds through
an invoke, then execution must branch to the invoke's
unwind target.  We previously tried to enforce this by
appending a cleanup action to every selector, however
this does not always work correctly due to an optimization
in the C++ unwinding runtime: if only cleanups would be
run while unwinding an exception, then the program just
terminates without actually executing the cleanups, as
invoke semantics would require.  I was hoping this
wouldn't be a problem, but in fact it turns out to be the
cause of all the remaining failures in the LLVM testsuite
(these also fail with -enable-correct-eh-support, so turning
on -enable-eh didn't make things worse!).  Instead we need
to append a full-blown catch-all to the end of each
selector.  The correct way of doing this depends on the
personality function, i.e. it is language dependent, so
can only be done by gcc.  Thus this patch which generalizes
the eh.selector intrinsic so that it can handle all possible
kinds of action table entries (before it didn't accomodate
cleanups): now 0 indicates a cleanup, and filters have to be
specified using the number of type infos plus one rather than
the number of type infos.  Related gcc patches will cause
Ada to pass a cleanup (0) to force the selector to always
fire, while C++ will use a C++ catch-all (null).

llvm-svn: 41484
2007-08-27 15:47:50 +00:00
Duncan Sands
4441eff1ac Extend eh.selector to support both catches and filters.
Drop the eh.filter intrinsic.

llvm-svn: 37875
2007-07-04 20:52:51 +00:00
Duncan Sands
d34a3b9173 Fix typos.
llvm-svn: 36124
2007-04-16 13:02:27 +00:00
Duncan Sands
99bc2c31b3 Correct typo.
llvm-svn: 35989
2007-04-14 12:30:27 +00:00
Duncan Sands
05834dfd9e Various hopefully correct easy fixes.
llvm-svn: 35506
2007-03-30 12:22:09 +00:00
Jim Laskey
9d1939dc2d First draft of exception handling doc.
llvm-svn: 35100
2007-03-14 19:29:42 +00:00