Index: doc/working/exception/impl/nopic.s
===================================================================
--- doc/working/exception/impl/nopic.s	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
+++ doc/working/exception/impl/nopic.s	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
@@ -0,0 +1,104 @@
+	.file	"test.c"
+	.text
+	.globl	clean
+	.type	clean, @function
+clean:
+.LFB0:
+	.cfi_startproc
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	movq	%rdi, -8(%rbp)
+	nop
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE0:
+	.size	clean, .-clean
+	.globl	foo
+	.type	foo, @function
+foo:
+.LFB1:
+	.cfi_startproc
+	.cfi_personality 0x3,__gcc_personality_v0
+	.cfi_lsda 0x3,.LLSDA1
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$40, %rsp
+	.cfi_offset 13, -24
+	.cfi_offset 12, -32
+	.cfi_offset 3, -40
+	movl	%edi, -52(%rbp)
+	movq	%fs:40, %rax
+	movq	%rax, -40(%rbp)
+	xorl	%eax, %eax
+	movl	-52(%rbp), %eax
+	movl	%eax, %edi
+.LEHB0:
+	call	bar
+.LEHE0:
+	movl	%eax, %r13d
+	movl	$0, %r12d
+.L7:
+	leaq	-44(%rbp), %rax
+	movq	%rax, %rdi
+	call	clean
+	cmpl	$1, %r12d
+	je	.L4
+	movl	%r13d, %eax
+	movq	-40(%rbp), %rdx
+	xorq	%fs:40, %rdx
+	je	.L8
+	jmp	.L10
+.L9:
+	movq	%rax, %rbx
+	movl	$1, %r12d
+	jmp	.L7
+.L4:
+	movq	%rbx, %rax
+	movq	%rax, %rdi
+.LEHB1:
+	call	_Unwind_Resume
+.LEHE1:
+.L10:
+	call	__stack_chk_fail
+.L8:
+	addq	$40, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE1:
+	.globl	__gcc_personality_v0
+	.section	.gcc_except_table,"a",@progbits
+.LLSDA1:
+	.byte	0xff
+	.byte	0xff
+	.byte	0x1
+	.uleb128 .LLSDACSE1-.LLSDACSB1
+.LLSDACSB1:
+	.uleb128 .LEHB0-.LFB1
+	.uleb128 .LEHE0-.LEHB0
+	.uleb128 .L9-.LFB1
+	.uleb128 0
+	.uleb128 .LEHB1-.LFB1
+	.uleb128 .LEHE1-.LEHB1
+	.uleb128 0
+	.uleb128 0
+.LLSDACSE1:
+	.text
+	.size	foo, .-foo
+	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
+	.section	.note.GNU-stack,"",@progbits
Index: doc/working/exception/impl/pic.s
===================================================================
--- doc/working/exception/impl/pic.s	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
+++ doc/working/exception/impl/pic.s	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
@@ -0,0 +1,112 @@
+	.file	"test.c"
+	.text
+	.globl	clean
+	.type	clean, @function
+clean:
+.LFB0:
+	.cfi_startproc
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	movq	%rdi, -8(%rbp)
+	nop
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE0:
+	.size	clean, .-clean
+	.globl	foo
+	.type	foo, @function
+foo:
+.LFB1:
+	.cfi_startproc
+	.cfi_personality 0x9b,DW.ref.__gcc_personality_v0
+	.cfi_lsda 0x1b,.LLSDA1
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$40, %rsp
+	.cfi_offset 13, -24
+	.cfi_offset 12, -32
+	.cfi_offset 3, -40
+	movl	%edi, -52(%rbp)
+	movq	%fs:40, %rax
+	movq	%rax, -40(%rbp)
+	xorl	%eax, %eax
+	movl	-52(%rbp), %eax
+	movl	%eax, %edi
+.LEHB0:
+	call	bar@PLT
+.LEHE0:
+	movl	%eax, %r13d
+	movl	$0, %r12d
+.L7:
+	leaq	-44(%rbp), %rax
+	movq	%rax, %rdi
+.LEHB1:
+	call	clean@PLT
+	cmpl	$1, %r12d
+	je	.L4
+	movl	%r13d, %eax
+	movq	-40(%rbp), %rdx
+	xorq	%fs:40, %rdx
+	je	.L8
+	jmp	.L10
+.L9:
+	movq	%rax, %rbx
+	movl	$1, %r12d
+	jmp	.L7
+.L4:
+	movq	%rbx, %rax
+	movq	%rax, %rdi
+	call	_Unwind_Resume@PLT
+.LEHE1:
+.L10:
+	call	__stack_chk_fail@PLT
+.L8:
+	addq	$40, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE1:
+	.globl	__gcc_personality_v0
+	.section	.gcc_except_table,"a",@progbits
+.LLSDA1:
+	.byte	0xff
+	.byte	0xff
+	.byte	0x1
+	.uleb128 .LLSDACSE1-.LLSDACSB1
+.LLSDACSB1:
+	.uleb128 .LEHB0-.LFB1
+	.uleb128 .LEHE0-.LEHB0
+	.uleb128 .L9-.LFB1
+	.uleb128 0
+	.uleb128 .LEHB1-.LFB1
+	.uleb128 .LEHE1-.LEHB1
+	.uleb128 0
+	.uleb128 0
+.LLSDACSE1:
+	.text
+	.size	foo, .-foo
+	.hidden	DW.ref.__gcc_personality_v0
+	.weak	DW.ref.__gcc_personality_v0
+	.section	.data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
+	.align 8
+	.type	DW.ref.__gcc_personality_v0, @object
+	.size	DW.ref.__gcc_personality_v0, 8
+DW.ref.__gcc_personality_v0:
+	.quad	__gcc_personality_v0
+	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
+	.section	.note.GNU-stack,"",@progbits
Index: doc/working/exception/impl/test.c
===================================================================
--- doc/working/exception/impl/test.c	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
+++ doc/working/exception/impl/test.c	(revision 690166d66bcf27c9965bc1ba3c2be3acc8ba9d5f)
@@ -0,0 +1,7 @@
+void clean(__attribute__((unused)) int * p) {}
+
+extern int bar(int);
+int foo(int x) {
+	int i __attribute__((cleanup(clean)));
+	return bar(x);
+}
