c++.dos.16-bits - C++ Exceptions not working in 16bit DOS LARGE model?
- Bernd Linsel (18/18) Feb 27 2007 Hello,
- Walter Bright (3/23) Mar 07 2007 It isn't a known issue. I think you might be the first to use EH for
Hello, I've tried to port a bc++5.02 DOS project on an 386ex embedded platform to dmc++ (because Borland produces really poor code and has still many compiler errata). I need far memory model, C++ exception handling, and RTTI. In medium memory model (-mm), all works fine (except that I have far too less memory in DGROUP), but when I compile with (-mc) or large (-ml) memory model, I get "abnormal program termination" as soon as an exception is thrown, regardless if it is a simple throw (e.g. int, "throw 8;") or a structured exception type (class MyThrowable). Using set_terminate() and set_unexpected shows that terminate() is called, but unexpected() never gets called, so i reckon a serious bug in exception handling within memory models with far data pointers. Switching off RTTI doesn't help, only changing the memory model. Switching to 32 bit mode is no alternative, as we are doing heavy interrupt services in our program, and that would require a bigger restructuration of the application. Is this issue known, is there any workaround?
Feb 27 2007
Bernd Linsel wrote:I've tried to port a bc++5.02 DOS project on an 386ex embedded platform to dmc++ (because Borland produces really poor code and has still many compiler errata). I need far memory model, C++ exception handling, and RTTI. In medium memory model (-mm), all works fine (except that I have far too less memory in DGROUP), but when I compile with (-mc) or large (-ml) memory model, I get "abnormal program termination" as soon as an exception is thrown, regardless if it is a simple throw (e.g. int, "throw 8;") or a structured exception type (class MyThrowable). Using set_terminate() and set_unexpected shows that terminate() is called, but unexpected() never gets called, so i reckon a serious bug in exception handling within memory models with far data pointers. Switching off RTTI doesn't help, only changing the memory model. Switching to 32 bit mode is no alternative, as we are doing heavy interrupt services in our program, and that would require a bigger restructuration of the application. Is this issue known, is there any workaround?It isn't a known issue. I think you might be the first to use EH for large model!
Mar 07 2007