mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 09:02:22 +01:00 
			
		
		
		
	* better debug messages
+ initial approach to handle addr and frame git-svn-id: branches/debug_eh@41368 -
This commit is contained in:
		
							parent
							
								
									9514bd9162
								
							
						
					
					
						commit
						0e25d6f00d
					
				@ -567,10 +567,12 @@ function FPC_psabieh_find_action_record(const info: FPC_psabieh_lsda_header_info
 | 
			
		||||
        p:=FPC_read_uleb128 (p, &cs_action);
 | 
			
		||||
 | 
			
		||||
{$ifdef excdebug}
 | 
			
		||||
        writeln('find action record: cs_start: $',hexstr(cs_start,sizeof(cs_start)*2),', len: ',cs_len,', lp: ', cs_lp,' action ofs: ',cs_action);
 | 
			
		||||
        writeln('find action record: cs_start: $',hexstr(cs_start,sizeof(cs_start)*2),', len: ',cs_len,
 | 
			
		||||
          ' (ip=$',hexstr(info.Start+cs_start,sizeof(PtrUInt)*2),'...$',hexstr(info.Start+cs_start+cs_len,sizeof(PtrUInt)*2),')',
 | 
			
		||||
          ', lp: ', cs_lp,' action ofs: ',cs_action);
 | 
			
		||||
{$endif}
 | 
			
		||||
        // The table is sorted, so if we've passed the ip, stop.
 | 
			
		||||
        if ip<(info.Start+cs_start) then
 | 
			
		||||
        if ip<info.Start+cs_start then
 | 
			
		||||
          p:=info.action_table
 | 
			
		||||
        else if (ip<(info.Start+cs_start+cs_len)) then
 | 
			
		||||
          begin
 | 
			
		||||
@ -788,6 +790,7 @@ function _FPC_psabieh_personality_v0(version: longint; actions: FPC_Unwind_Actio
 | 
			
		||||
{$ifdef excdebug}
 | 
			
		||||
    writeln('Personality (version = ',version,', actions = $',hexstr(actions,4),') started for wrapper ',hexstr(WrappedException),' = fpc exc ',hexstr(WrappedException^.FObject),
 | 
			
		||||
      ', refcount is now ',WrappedException^.refcount);
 | 
			
		||||
    writeln('  ip=$',hexstr(_Unwind_GetIP(context),sizeof(pointer)*2));
 | 
			
		||||
{$endif}
 | 
			
		||||
    // Shortcut for phase 2 found handler for domestic exception.
 | 
			
		||||
    if (actions=(FPC_UA_CLEANUP_PHASE or FPC_UA_HANDLER_FRAME)) and
 | 
			
		||||
@ -814,7 +817,7 @@ function _FPC_psabieh_personality_v0(version: longint; actions: FPC_Unwind_Actio
 | 
			
		||||
        if not assigned(language_specific_data) then
 | 
			
		||||
          begin
 | 
			
		||||
{$ifdef excdebug}
 | 
			
		||||
            writeln('did not find lsda for ip ',hexstr(_Unwind_GetIP(context),sizeof(pointer)*2));
 | 
			
		||||
            writeln('did not find lsda for ip $',hexstr(_Unwind_GetIP(context),sizeof(pointer)*2));
 | 
			
		||||
{$endif}
 | 
			
		||||
 | 
			
		||||
            exit(continue_unwinding(libunwind_exception,context));
 | 
			
		||||
@ -972,9 +975,26 @@ procedure FPC_psabieh_ExceptionCleanUp(reason: FPC_Unwind_Reason_Code; exc:PFPC_
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
function PushExceptObject(Obj : TObject; AnAddr : CodePointer; AFrame : Pointer): PExceptObject; forward;
 | 
			
		||||
procedure fpc_RaiseException_Internal(Obj: TObject; AnAddr: CodePointer; AFrame: Pointer); forward;
 | 
			
		||||
 | 
			
		||||
{$ifdef CPUI386}
 | 
			
		||||
{ tweak stack, so we get the correct context, this requires assembly }
 | 
			
		||||
procedure fpc_RaiseException(Obj: TObject; AnAddr: CodePointer; AFrame: Pointer); compilerproc;assembler; nostackframe;
 | 
			
		||||
asm
 | 
			
		||||
   movl AFrame,%ebp
 | 
			
		||||
   movl AnAddr,(%esp)
 | 
			
		||||
   jmpl fpc_RaiseException_Internal
 | 
			
		||||
end;
 | 
			
		||||
{$define PSABI_HANDLESCONTEXT}
 | 
			
		||||
{$endif CPUI386}
 | 
			
		||||
 | 
			
		||||
{$define FPC_SYSTEM_HAS_RAISEEXCEPTION}
 | 
			
		||||
procedure fpc_RaiseException_Internal(Obj: TObject; AnAddr: CodePointer; AFrame: Pointer);
 | 
			
		||||
{$ifndef PSABI_HANDLESCONTEXT}
 | 
			
		||||
  begin
 | 
			
		||||
  end;
 | 
			
		||||
procedure fpc_RaiseException(Obj: TObject; AnAddr: CodePointer; AFrame: Pointer); compilerproc;
 | 
			
		||||
{$endif PSABI_HANDLESCONTEXT}
 | 
			
		||||
var
 | 
			
		||||
  _ExceptObjectStack : PExceptObject;
 | 
			
		||||
  _ExceptAddrstack : PExceptAddr;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user