Re: Denial of denial of service

[prev] [thread] [next] [lurker] [Date index for 2007/01/29]

From: Sean Conner
Subject: Re: Denial of denial of service
Date: 19:54 on 29 Jan 2007
It was thus said that the Great Yossi Kreinin once stated:
> 
> Let's make it simple: did you actually see it /done/? I tried it with gcc 
> 3.3.1 on x86 and exceptions do translate to overhead (I don't know x86 
> assembly either, but I can see when 2 additional instructions are emitted). 
> Green Hills on ARM is worse, trust me. Let's say I don't care for the 
> monstrous inflation of data. Let's say I don't care that the generated 
> assembly code looks like dog vomit. Can you name a platform where no extra 
> instructions in the normal flow path are generated when exceptions are 
> enabled?

  VMS.  Or rather, VMS on the VAX architecture, and there, it's only one
instruction overhead.  As part of the calling sequence (using CALLG/CALLS)
the CPU pushes a 0 onto the stack.  When an exception occurs (hardware, like
division by zero, overflow, etc), the operating system (in this case, VMS)
checks the current stack frame and if that extra spot on the stack isn't 0,
it's assumed to be the address of an exception handler which is called.  If
it *is* 0, the OS will walk back up the call chain trying to locate a non-0
entry.  If it doesn't find one, VMS will call a default exception handler.

  The single instruction overhead is simply filling in this slot on the
stack.  Now granted, the generalized call instructions (CALLG/CALLS) is
probably slower than the "simple" subroutine call (BSBB/BSBW), but I'm
guessing most exported routines expect to be called via CALLG/CALLS.

  -spc (Oh wait!  Isn't this the Classic Computers Mailing List?)

There's stuff above here

Generated at 23:01 on 06 Feb 2007 by mariachi 0.52