diff --git a/libc/include/limits.h b/libc/include/limits.h
index 1de8ea6..d691a8f 100644
--- a/libc/include/limits.h
+++ b/libc/include/limits.h
@@ -90,6 +90,7 @@
 #endif
 
 #ifndef PAGESIZE
+#include <asm/page.h>
 #define  PAGESIZE  PAGE_SIZE
 #endif
 
diff --git a/libc/include/string.h b/libc/include/string.h
index 8730ea3..8e472e7 100644
--- a/libc/include/string.h
+++ b/libc/include/string.h
@@ -93,10 +93,6 @@
     __attribute__((__error__("memcpy called with size bigger than source")));
 extern void __memcpy_overlap_error()
     __attribute__((__error__("memcpy called with overlapping regions")));
-extern void *__memcpy_real(void *, const void *, size_t)
-    __asm__(__USER_LABEL_PREFIX__ "memcpy");
-extern void *__memcpy_chk2(void *, const void *, size_t, size_t, size_t);
-
 
 __BIONIC_FORTIFY_INLINE
 void *memcpy (void *dest, const void *src, size_t copy_amount) {
@@ -118,11 +114,7 @@
         __memcpy_overlap_error();
     }
 
-    if (__builtin_constant_p(copy_amount) && __builtin_constant_p(d - s)) {
-         return __memcpy_real(dest, src, copy_amount);
-    }
-
-    return __memcpy_chk2(dest, src, copy_amount, d_len, s_len);
+    return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
 }
 
 __BIONIC_FORTIFY_INLINE
diff --git a/libc/string/__memcpy_chk.c b/libc/string/__memcpy_chk.c
index 934ed67..10334ba 100644
--- a/libc/string/__memcpy_chk.c
+++ b/libc/string/__memcpy_chk.c
@@ -32,7 +32,7 @@
 #include <private/logd.h>
 
 /*
- * Runtime implementation of __memcpy_chk2.
+ * Runtime implementation of __memcpy_chk.
  *
  * See
  *   http://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
@@ -42,12 +42,9 @@
  * This memcpy check is called if _FORTIFY_SOURCE is defined and
  * greater than 0.
  */
-void *__memcpy_chk2(void *dest, const void *src,
-              size_t copy_amount, size_t dest_len, size_t src_len)
+void *__memcpy_chk(void *dest, const void *src,
+              size_t copy_amount, size_t dest_len)
 {
-    char *d = (char *) dest;
-    const char *s = (const char *) src;
-
     if (__builtin_expect(copy_amount > dest_len, 0)) {
         __libc_android_log_print(ANDROID_LOG_FATAL, "libc",
             "*** memcpy buffer overflow detected ***\n");
@@ -55,28 +52,5 @@
         abort();
     }
 
-    if (__builtin_expect(copy_amount > src_len, 0)) {
-        __libc_android_log_print(ANDROID_LOG_FATAL, "libc",
-            "*** memcpy read overflow detected ***\n");
-        abort();
-    }
-
-    if (__builtin_expect(((d <= s) && ((size_t)(s - d) < copy_amount))
-                      || ((d >= s) && ((size_t)(d - s) < copy_amount)), 0)) {
-        __libc_android_log_print(ANDROID_LOG_FATAL, "libc",
-            "*** memcpy memory overlap detected ***\n");
-        abort();
-    }
-
     return memcpy(dest, src, copy_amount);
 }
-
-/*
- * GCC can create references to __memcpy_chk when using
- * __builtin__memmove_chk().
- */
-void *__memcpy_chk(void *dest, const void *src,
-              size_t copy_amount, size_t dest_len)
-{
-    return __memcpy_chk2(dest, src, copy_amount, dest_len, (size_t) -1);
-}
diff --git a/linker/Android.mk b/linker/Android.mk
index a739b4f..c9d053f 100644
--- a/linker/Android.mk
+++ b/linker/Android.mk
@@ -15,7 +15,8 @@
 
 LOCAL_CFLAGS += -fno-stack-protector \
         -Wstrict-overflow=5 \
-        -fvisibility=hidden
+        -fvisibility=hidden \
+        -std=gnu99
 
 # Set LINKER_DEBUG to either 1 or 0
 #
diff --git a/linker/linker.c b/linker/linker.c
index 8d4efaf..b96e072 100644
--- a/linker/linker.c
+++ b/linker/linker.c
@@ -393,8 +393,8 @@
         switch(ELF32_ST_BIND(s->st_info)){
         case STB_GLOBAL:
         case STB_WEAK:
-                /* no section == undefined */
-            if(s->st_shndx == 0) continue;
+            if(s->st_shndx == SHN_UNDEF)
+                continue;
 
             TRACE_TYPE(LOOKUP, "%5d FOUND %s in %s (%08x) %d\n", pid,
                        name, si->name, s->st_value, s->st_size);
@@ -462,7 +462,7 @@
             DEBUG("%5d %s: looking up %s in %s\n",
                   pid, si->name, name, lsi->name);
             s = soinfo_elf_lookup(lsi, elf_hash, name);
-            if ((s != NULL) && (s->st_shndx != SHN_UNDEF))
+            if (s != NULL)
                 goto done;
         }
     }
@@ -1640,7 +1640,7 @@
  * fixed it's own GOT. It is safe to make references to externs
  * and other non-local data at this point.
  */
-static unsigned __linker_init_post_relocation(unsigned **elfdata)
+static unsigned __linker_init_post_relocation(unsigned **elfdata, unsigned linker_base)
 {
     static soinfo linker_soinfo;
 
@@ -1731,15 +1731,16 @@
     _r_debug.r_map = map;
     r_debug_tail = map;
 
-        /* gdb expects the linker to be in the debug shared object list,
-         * and we need to make sure that the reported load address is zero.
-         * Without this, gdb gets the wrong idea of where rtld_db_dlactivity()
-         * is.  Don't use soinfo_alloc(), because the linker shouldn't
+        /* gdb expects the linker to be in the debug shared object list.
+         * Without this, gdb has trouble locating the linker's ".text"
+         * and ".plt" sections. Gdb could also potentially use this to
+         * relocate the offset of our exported 'rtld_db_dlactivity' symbol.
+         * Don't use soinfo_alloc(), because the linker shouldn't
          * be on the soinfo list.
          */
     strlcpy((char*) linker_soinfo.name, "/system/bin/linker", sizeof linker_soinfo.name);
     linker_soinfo.flags = 0;
-    linker_soinfo.base = 0;     // This is the important part; must be zero.
+    linker_soinfo.base = linker_base;
     insert_soinfo_into_debug_map(&linker_soinfo);
 
         /* extract information passed from the kernel */
@@ -1935,5 +1936,5 @@
 
     // We have successfully fixed our own relocations. It's safe to run
     // the main part of the linker now.
-    return __linker_init_post_relocation(elfdata);
+    return __linker_init_post_relocation(elfdata, linker_addr);
 }
