florian
c9fcc68ec1
* enable the compiler to optimize away parts of System.PushExceptObject, if System.get_frame is not implemented, i.e. returning nil
...
git-svn-id: trunk@47058 -
2020-10-06 19:43:17 +00:00
florian
af20b064ed
* make framecount and framebufsize dependent on the pointer size
...
git-svn-id: trunk@47030 -
2020-10-01 20:33:03 +00:00
Jonas Maebe
4e73919676
- removed FPC 2.6.x bootstrapping code
...
git-svn-id: branches/debug_eh@40407 -
2018-11-29 21:31:05 +00:00
Jonas Maebe
3cfad8fba8
* renamed FPC_USE_PSEABIEH to FPC_USE_PSABIEH
...
git-svn-id: branches/debug_eh@40400 -
2018-11-29 21:30:42 +00:00
Jonas Maebe
b2608ba02a
+ fpc_reraise and fpc_raise_nested implementations for psabieh
...
git-svn-id: branches/debug_eh@40370 -
2018-11-25 21:05:55 +00:00
Jonas Maebe
b2d1ab7f05
* basic helpers for DWARF/PSABI EH-based exception handling (based on
...
GCC 4.2.1's libstdc++/libsupc++)
- compile RTL with -dFPC_USE_PSEABIEH to include
- the x86-64 compiler currently crashes if it has been compiled with
optimizations (the eh_return_data_regno function from cpubase
probably triggers mantis #34385 )
git-svn-id: branches/debug_eh@40071 -
2018-10-28 18:16:42 +00:00
Jonas Maebe
6e1d370417
* split off the texceptaddr declaration into rtl/inc/excepth.inc, so it can
...
be included at the start of the implementation of the system unit (before
the rest of except.inc)
* catch declarations in/loading from the system unit of the TExceptAddr type
* use this type instead of hardcoded size constants in the compiler
* in generic code that is active for all targets, puts its use in a virtual
method since it's only valid for targets using setjmp/longjmp-style
exception handling (and the record is not defined at all in the JVM RTL)
git-svn-id: branches/hlcgllvm@28376 -
2014-08-10 19:40:29 +00:00
nickysn
ff6b258379
* changed ExceptTryLevel from nativeint to objpasint
...
git-svn-id: trunk@27234 -
2014-03-23 12:42:57 +00:00
sergei
baa18dfcb4
* Introduced a new function CaptureBacktrace, using it to handle most of back-tracing in heaptrc unit.
...
* Use StackTop instead of StackBottom+StackLength in a few remaining locations.
git-svn-id: trunk@27141 -
2014-03-15 05:16:37 +00:00
sergei
2f05e8b389
* PushExceptObject and dump_stack: use get_caller_stackinfo instead of get_caller_addr and get_caller_frame.
...
git-svn-id: trunk@27094 -
2014-03-11 12:51:46 +00:00
sergei
a7563fd0c8
* Added {$ifdef ver2_6} around stuff which is no longer used but needed for bootstrapping.
...
git-svn-id: trunk@27038 -
2014-03-08 23:13:10 +00:00
sergei
04f32c2a01
* Do not attempt to retrieve caller context if initial frame is not between StackTop and frame pointer of current procedure (aka stack bottom). Reverts part of r21843, fixing regression of tests/test/cg/traise6.pp after r26843.
...
r26843 caused regression because it removed exception handlers, causing condition "if ExceptAddrStack<>nil" in HandleErrorAddrFrame() to become False, so it wasn't raising another exception (which would halt with code 217) but terminating directly with code 216.
git-svn-id: trunk@26850 -
2014-02-23 10:20:54 +00:00
sergei
b26e36431a
* Instead of three individual try..except blocks in fpc_pushexceptobject, guard the entire procedure at the caller side (it is called only from fpc_raiseexception). This additionally guards against possible crashes in getmem() due to corrupted heap. Furthermore, try..except block is not necessary at all for such one-time purposes.
...
git-svn-id: trunk@26843 -
2014-02-22 17:18:21 +00:00
sergei
d004607876
* fpc_raiseexception does not return a result.
...
git-svn-id: trunk@26837 -
2014-02-22 15:18:31 +00:00
sergei
749ff6b19d
* fpc_popobjectstack: clean up.
...
git-svn-id: trunk@26836 -
2014-02-22 14:44:29 +00:00
nickysn
f4f35ad47b
* changed ExceptTryLevel from longint to nativeint (because i8086)
...
git-svn-id: trunk@26658 -
2014-02-03 00:48:11 +00:00
sergei
179586f589
+ SEH support for Win32. Enable by cycling with OPT=-dTEST_WIN32_SEH.
...
Although basic things work (no regressions in test suite, also with TEST_OPT=-O2), there are some secondary issues/TODOs:
- Exception frame around PASCALMAIN is not properly removed in DLLs
- No stack traces yet
- Stack overallocated in finalizer procedures, their entry/exit code needs cleanup
- Signals unit is probably completely broken.
git-svn-id: trunk@26225 -
2013-12-12 12:43:46 +00:00
nickysn
c1b0fb81f1
* updated all the RTL helper functions related to exceptions and stack traces to use codepointer instead of pointer
...
git-svn-id: trunk@25513 -
2013-09-17 21:25:26 +00:00
nickysn
b688b79a0d
* fixed the order of parameters in the first call to get_caller_frame in PushExceptObject
...
git-svn-id: trunk@25512 -
2013-09-17 21:20:24 +00:00
nickysn
1e28790e99
* fpc_PushExceptAddr's parameter Ft changed from LongInt to SmallInt on 16-bit CPUs for better efficiency
...
git-svn-id: branches/i8086@24036 -
2013-03-28 15:44:50 +00:00
nickysn
252903175c
* TExceptAddr.frametype changed to SmallInt on 16-bit CPUs, since the compiler allocates 3*sizeof(pint) for the whole structure (and using longints on 16-bit CPUs is wasteful anyway)
...
git-svn-id: branches/i8086@24035 -
2013-03-28 15:34:38 +00:00
florian
92565c80ba
* make exception variables threadvars or not depending on threading support
...
git-svn-id: trunk@23262 -
2012-12-31 19:31:22 +00:00
pierre
6eccf88499
call halt(217) if get_caller_XX function generates an exception
...
git-svn-id: trunk@22389 -
2012-09-14 13:45:31 +00:00
pierre
305a275746
Protect with try/except blocks call to get_caller_XXX functions to avoid troubles if stack is invalid
...
git-svn-id: trunk@22381 -
2012-09-13 12:37:49 +00:00
pierre
bc1ecc2e94
Use two parameter versions of get_caller_frame and get_caller_addr to get correct results for MIPS
...
git-svn-id: trunk@21843 -
2012-07-10 10:07:11 +00:00
sergei
cbad0abab5
+ Platform-specific exception support for x86_64-win64. Enable by cycling with OPT=-dTEST_WIN64_SEH.
...
git-svn-id: trunk@20098 -
2012-01-16 23:13:31 +00:00
sergei
ebe1d74d6e
* Moved multiple similar checks for FPC_HAS_FEATURE_EXITCODE and FPC_LIMITED_EXITCODE to Halt() procedure. Now these checks appear only once.
...
git-svn-id: trunk@19597 -
2011-11-05 16:48:12 +00:00
sergei
56900b4754
* RTL: clean up exception handling code (functionality is not changed).
...
* changed fpc_pushexceptobj to normal procedure, it does not need to be a compilerproc.
git-svn-id: trunk@19596 -
2011-11-05 16:28:37 +00:00
sergei
a32fdc3ae6
+ Added a simple helper tcg.g_call, intended to replace allocallcpuregisters+a_call_name+deallocallcpuregisters sequence which is used all over the place.
...
* Refactored code generation for tcgonnonde and tcgtryexceptnode, simplifying both compiler and generated code. Merged compilerprocs called in sequence into larger ones (fpc_popobjectstack+fpc_destroyexception -> fpc_doneexception, fpc_popsecondobjectstack+fpc_destroyexception+fpc_reraise -> fpc_raise_nested).
git-svn-id: trunk@19506 -
2011-10-18 15:46:15 +00:00
sergei
fa4b78363c
+ Handle safecall exceptions with a dedicated compilerproc, simplifies compiler part and reduces generated code size.
...
git-svn-id: trunk@19414 -
2011-10-08 12:40:03 +00:00
paul
fcaac0ebe1
compiler,rtl - safecall handling:
...
- pass address to SafeCallException method(rtl needed a modification)
- improve code generation for regular safecall routines (not methods)
- improve test - check that passed exception and address are valid
git-svn-id: trunk@14946 -
2010-02-27 04:41:52 +00:00
paul
bfb7d91b74
rtl: fix typos
...
git-svn-id: trunk@14935 -
2010-02-25 04:09:30 +00:00
yury
e475735c43
* ifdefed fatal error messages in exception handling to be available only if debugging is needed.
...
git-svn-id: trunk@9562 -
2007-12-28 20:10:19 +00:00
yury
99ea98c7b1
* Workaround dead code warnings by using preprocessor.
...
git-svn-id: trunk@9497 -
2007-12-21 21:49:47 +00:00
yury
3ab20922d6
* Optimization for code size. It saves 1.5KB for ARM and 0.5KB for i386.
...
git-svn-id: trunk@5329 -
2006-11-11 13:26:09 +00:00
Jonas Maebe
865a4573cf
* exit with exitcode 217 instead of some random OS result
...
on an unhandled exception
git-svn-id: trunk@5314 -
2006-11-10 20:32:20 +00:00
yury
df6fec5301
* removed runtime error on unhandled exception when SysUtils is used.
...
git-svn-id: trunk@5273 -
2006-11-07 10:32:27 +00:00
florian
0089de9428
* improved exception handling code
...
git-svn-id: trunk@2632 -
2006-02-19 15:48:15 +00:00
florian
9e5a2f9522
* From Yury Sidorov:
...
* Now runtime error is not popped on program's exit if exception was handled.
git-svn-id: trunk@601 -
2005-07-09 13:06:19 +00:00
florian
25b79e9db3
* patch from Yury Sidorov to make simply exception handling without sysutils possible
...
git-svn-id: trunk@595 -
2005-07-07 18:53:21 +00:00
peter
58cdeb8184
* give runerror 231 if exceptobjectstack=nil
...
git-svn-id: trunk@401 -
2005-06-14 05:22:18 +00:00
michael
5cafc069b5
+ Removed NOSAVEREGISTERS define
...
git-svn-id: trunk@307 -
2005-06-09 17:58:20 +00:00
michael
859bb30daa
+ Removed HASTHREADVAR SUPPORT_THREADVAR defines
...
git-svn-id: trunk@295 -
2005-06-09 17:40:29 +00:00
michael
93ba0409be
+ Removed HASCOMPILERPROC define
...
git-svn-id: trunk@265 -
2005-06-07 21:41:02 +00:00
michael
5d02b2c6cc
Removed HAS_ADDR_STACK_ON_STACK define
...
git-svn-id: trunk@261 -
2005-06-07 21:14:57 +00:00
peter
4ace790492
* remove $Log
...
git-svn-id: trunk@231 -
2005-06-07 09:47:55 +00:00
peter
87fe5d9b98
* limit backtraces to values inside the stack, patch by Vincent Snijders
...
git-svn-id: trunk@162 -
2005-06-01 06:50:52 +00:00
fpc
790a4fe2d3
* log and id tags removed
...
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00
fpc
50778076c3
initial import
...
git-svn-id: trunk@1 -
2005-05-16 18:37:41 +00:00
michael
71f56b3d61
+ Patch to return nil if there is no exception object (as in Delphi)
2005-05-08 21:20:26 +00:00