Index: doc/src/sgml/extend.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v
retrieving revision 1.38
diff -c -c -r1.38 extend.sgml
*** doc/src/sgml/extend.sgml	3 Apr 2010 07:22:53 -0000	1.38
--- doc/src/sgml/extend.sgml	1 Jun 2010 02:29:31 -0000
***************
*** 273,276 ****
--- 273,322 ----
    &xoper;
    &xindex;
  
+   <sect1 id="extend-how">
+    <title>Using C++ for Extensibility</title>
+ 
+    <indexterm zone="extend-Cpp">
+     <primary>C++</primary>
+    </indexterm>
+ 
+    <para>
+     It is possible to use a compiler in C++ mode to build
+     <productname>PostgreSQL</productname> extensions;  you must simply
+     follow the standard methods for dynamically linking to C executables:
+ 
+     <itemizedlist>
+      <listitem>
+       <para>
+         Use <literal>extern C</> linkage for all functions that must
+         be accessible by <function>dlopen()</>.  This is also necessary
+         for any functions that might be passed as pointers between
+         the backend and C++ code.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        Use <function>malloc()</> to allocate any memory that might be
+        freed by the backend C code (don't pass <function>new()</>-allocated
+        memory).
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        Use <function>free()</> to free memory allocated by the backend
+        C code (do not use <function>delete()</> for such cases).
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        Prevent exceptions from propagating into the C code (use a
+        catch-all block at the top level of all <literal>extern C</>
+        functions).
+       </para>
+      </listitem>
+     </itemizedlist>
+    </para>
+ 
+   </sect1>
+ 
   </chapter>
