This effectively reverts SVN r204290 and r204292 (back when this code was part of libcxxabi).
According to SVN r204290, the primary architecture using the DW_CFA_GNU_args_size opcode is VAX.
However, clang also produces it on X86 when it has done X86CallFrameOptimization, which gets done much more frequently if the stack is aligned to 4 bytes (which is the default when targeting windows).
This issue can be tested by building code for x86 linux (at least for 32 bit) with clang with -mstack-alignment=4.
I'm not sure if this code should be handled differently for VAX with some ifdef, or what the correct interpretation of this opcode is. I ran into this issue while trying to use libunwind for 32 bit windows (where clang uses a 4 byte stack alignment by default), found this commit, and noticed I got it working by reverting it. And later noticed I could reproduce the same issue on 32 bit x86 linux as well, by forcing -mstack-alignment=4.
I think it makes sense to have this here: the contract is that if the personality sets the IP when the cursor pointed to a PC with a non-zero arg size, we should adjust SP for the personality.
However, it's not clear to me that we don't need the same adjustment when stepping across frames that use arg size without a frame pointer.