diff --git a/libc/tools/genlibgcc_compat.py b/libc/tools/genlibgcc_compat.py
index f2ff7b0..cb5c3b3 100755
--- a/libc/tools/genlibgcc_compat.py
+++ b/libc/tools/genlibgcc_compat.py
@@ -71,23 +71,7 @@
 import tempfile
 import re
 
-libgcc_compat_header = "/* Generated by genlibgcc_compat.py */\n" + \
-"""
-#define   COMPAT_FUNCTIONS_LIST \\
-"""
-
-libgcc_compat_footer = """
-
-#define  XX(f)    extern void f(void);
-COMPAT_FUNCTIONS_LIST
-#undef XX
-
-void __bionic_libgcc_compat_hooks(void) {
-#define XX(f)    f();
-COMPAT_FUNCTIONS_LIST
-#undef XX
-}
-"""
+libgcc_compat_header = "/* Generated by genlibgcc_compat.py */\n\n"
 
 class Generator:
     def process(self):
@@ -114,29 +98,36 @@
 
         print "* Build complete, logfile: " + build_output_file_path
 
-        func_set = set()
+        symbol_set = set()
         prog=re.compile("(?<=undefined reference to ')\w+")
         fd = open(build_output_file_path, 'r')
         for line in fd:
             m = prog.search(line)
             if m:
-                func_set.add(m.group(0))
+                symbol_set.add(m.group(0))
 
         fd.close()
 
-        func_list = sorted(func_set)
+        symbol_list = sorted(symbol_set)
 
-        print "* Found " + repr(len(func_list)) + " referenced functions: " + repr(func_list)
+        print "* Found " + repr(len(symbol_list)) + " referenced symbols: " + repr(symbol_list)
 
-        if 0 == len(func_list):
-            sys.exit("Error: function list is empty, please check the build log: " + build_output_file_path)
+        if 0 == len(symbol_list):
+            sys.exit("Error: symbol list is empty, please check the build log: " + build_output_file_path)
 
         print "* Generating " + file_path
         fres = open(file_path, 'w')
         fres.write(libgcc_compat_header)
-        for func_name in func_list:
-            fres.write("    XX("+func_name+") \\\n")
-        fres.write(libgcc_compat_footer)
+
+        for sym_name in symbol_list:
+            fres.write("extern char "+sym_name+";\n")
+        fres.write("\n");
+
+        fres.write("void* __bionic_libgcc_compat_symbols[] = {\n");
+        for sym_name in symbol_list:
+            fres.write("    &"+sym_name+",\n")
+        fres.write("};\n");
+
         fres.close()
 
 generator = Generator()
