Index: doc/working/exception/impl/Makefile
===================================================================
--- doc/working/exception/impl/Makefile	(revision fd732488a0c9611e90598dc83b89dfc5bf7e63b4)
+++ doc/working/exception/impl/Makefile	(revision fd732488a0c9611e90598dc83b89dfc5bf7e63b4)
@@ -0,0 +1,23 @@
+CFLAGS = -fexceptions -Wall -Werror
+CC = gcc
+
+all: except-pic except-pdc
+
+clean:
+	rm -fv except-pic except-pdc *.o *.so
+
+pic.s: test.c Makefile
+	$(CC) $(CFLAGS) -fPIC -S -o $@ $<
+
+pdc.s: test.c Makefile
+	$(CC) $(CFLAGS) -S -o $@ $<
+
+except-pdc: test-main.c exception.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+libexcept.so: exception.c
+	$(CC) $(CFLAGS) -shared -o $@ -fPIC $^
+
+except-pic: test-main.c libexcept.so
+	$(CC) $(CFLAGS) -o $@ $< -L. -lexcept
+
Index: doc/working/exception/impl/exception.c
===================================================================
--- doc/working/exception/impl/exception.c	(revision db2d937f1461f559adf3348718926a782fa770a0)
+++ doc/working/exception/impl/exception.c	(revision fd732488a0c9611e90598dc83b89dfc5bf7e63b4)
@@ -243,5 +243,5 @@
 
 					// Get a function pointer from the relative offset and call it
-					// _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;					
+					// _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;
 
 					_Unwind_Reason_Code (*matcher)() =
@@ -320,7 +320,13 @@
 	// on how the assembly works.
 	// Setup the personality routine
+	#if defined(__PIC__)
+	asm volatile (".cfi_personality 0x9b,CFA.ref.__gcfa_personality_v0");
+	// Setup the exception table
+	asm volatile (".cfi_lsda 0x1b, .LLSDACFA2");
+	#else
 	asm volatile (".cfi_personality 0x3,__gcfa_personality_v0");
 	// Setup the exception table
 	asm volatile (".cfi_lsda 0x3, .LLSDACFA2");
+	#endif
 
 	// Label which defines the start of the area for which the handler is setup
@@ -356,4 +362,34 @@
 // Some more works need to be done if we want to have a single
 // call to the try routine
+#if defined(__PIC__)
+asm (
+	//HEADER
+	".LFECFA1:\n"
+	"	.globl	__gcfa_personality_v0\n"
+	"	.section	.gcc_except_table,\"a\",@progbits\n"
+	".LLSDACFA2:\n"							//TABLE header
+	"	.byte	0xff\n"
+	"	.byte	0xff\n"
+	"	.byte	0x1\n"
+	"	.uleb128 .LLSDACSECFA2-.LLSDACSBCFA2\n"		// BODY length
+	// Body uses language specific data and therefore could be modified arbitrarily
+	".LLSDACSBCFA2:\n"						// BODY start
+	"	.uleb128 .TRYSTART-__try_terminate\n"		// Handled area start  (relative to start of function)
+	"	.uleb128 .TRYEND-.TRYSTART\n"				// Handled area length
+	"	.uleb128 .CATCH-__try_terminate\n"			// Handler landing pad adress  (relative to start of function)
+	"	.uleb128 1\n"						// Action code, gcc seems to use always 0
+	".LLSDACSECFA2:\n"						// BODY end
+	"	.text\n"							// TABLE footer
+	"	.size	__try_terminate, .-__try_terminate\n"
+	"	.hidden	CFA.ref.__gcfa_personality_v0\n"	// Declare an new hidden symbol
+	"	.weak	CFA.ref.__gcfa_personality_v0\n"
+	"	.section	.data.rel.local.CFA.ref.__gcfa_personality_v0,\"awG\",@progbits,CFA.ref.__gcfa_personality_v0,comdat\n"	// No clue what this does specifically
+	"	.align 8\n"
+	"	.type CFA.ref.__gcfa_personality_v0, @object\n"	// Type of our hidden symbol (it's not actually the function itself)
+	"	.size CFA.ref.__gcfa_personality_v0, 8\n"		// Size of our hidden symbol
+	"CFA.ref.__gcfa_personality_v0:\n"
+	"	.quad __gcfa_personality_v0\n"
+);
+#else
 asm (
 	//HEADER
@@ -375,5 +411,4 @@
 	"	.text\n"							// TABLE footer
 	"	.size	__try_terminate, .-__try_terminate\n"
-	"	.ident	\"GCC: (Ubuntu 6.2.0-3ubuntu11~16.04) 6.2.0 20160901\"\n"
-//	"	.section	.note.GNU-stack,\"x\",@progbits\n"
 );
+#endif
Index: doc/working/exception/impl/nopic.s
===================================================================
--- doc/working/exception/impl/nopic.s	(revision db2d937f1461f559adf3348718926a782fa770a0)
+++ doc/working/exception/impl/nopic.s	(revision fd732488a0c9611e90598dc83b89dfc5bf7e63b4)
@@ -101,4 +101,4 @@
 	.text
 	.size	foo, .-foo
-	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
+	.ident	"GCC: (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0"
 	.section	.note.GNU-stack,"",@progbits
Index: doc/working/exception/impl/pic.s
===================================================================
--- doc/working/exception/impl/pic.s	(revision db2d937f1461f559adf3348718926a782fa770a0)
+++ doc/working/exception/impl/pic.s	(revision fd732488a0c9611e90598dc83b89dfc5bf7e63b4)
@@ -103,5 +103,5 @@
 	.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
+	.section	.data.rel.local.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
 	.align 8
 	.type	DW.ref.__gcc_personality_v0, @object
@@ -109,4 +109,4 @@
 DW.ref.__gcc_personality_v0:
 	.quad	__gcc_personality_v0
-	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
+	.ident	"GCC: (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0"
 	.section	.note.GNU-stack,"",@progbits
