diff --git a/Android.mk b/Android.mk
index 3a885fd..e790e1e 100755
--- a/Android.mk
+++ b/Android.mk
@@ -1,147 +1,15 @@
-LOCAL_PATH := $(call my-dir)
-
-supported_platforms := linux-x86 darwin-x86
-cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
-
-ifdef cur_platform
+# Copyright (C) 2012 The Android Open Source Project
 #
-# host libelf
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
-include $(CLEAR_VARS)
-
-LIBELF_SRC_FILES := \
-	libelf/elf32_checksum.c \
-	libelf/elf32_fsize.c \
-	libelf/elf32_getehdr.c \
-	libelf/elf32_getphdr.c \
-	libelf/elf32_getshdr.c \
-	libelf/elf32_newehdr.c \
-	libelf/elf32_newphdr.c \
-	libelf/elf32_offscn.c \
-	libelf/elf32_updatefile.c \
-	libelf/elf32_updatenull.c \
-	libelf/elf32_xlatetof.c \
-	libelf/elf32_xlatetom.c \
-	libelf/elf64_checksum.c \
-	libelf/elf64_fsize.c \
-	libelf/elf64_getehdr.c \
-	libelf/elf64_getphdr.c \
-	libelf/elf64_getshdr.c \
-	libelf/elf64_newehdr.c \
-	libelf/elf64_newphdr.c \
-	libelf/elf64_offscn.c \
-	libelf/elf64_updatefile.c \
-	libelf/elf64_updatenull.c \
-	libelf/elf64_xlatetof.c \
-	libelf/elf64_xlatetom.c \
-	libelf/elf_begin.c \
-	libelf/elf_clone.c \
-	libelf/elf_cntl.c \
-	libelf/elf_end.c \
-	libelf/elf_error.c \
-	libelf/elf_fill.c \
-	libelf/elf_flagdata.c \
-	libelf/elf_flagehdr.c \
-	libelf/elf_flagelf.c \
-	libelf/elf_flagphdr.c \
-	libelf/elf_flagscn.c \
-	libelf/elf_flagshdr.c \
-	libelf/elf_getarhdr.c \
-	libelf/elf_getaroff.c \
-	libelf/elf_getarsym.c \
-	libelf/elf_getbase.c \
-	libelf/elf_getdata.c \
-	libelf/elf_getdata_rawchunk.c \
-	libelf/elf_getident.c \
-	libelf/elf_getscn.c \
-	libelf/elf_getshnum.c \
-	libelf/elf_getshstrndx.c \
-	libelf/elf_gnu_hash.c \
-	libelf/elf_hash.c \
-	libelf/elf_kind.c \
-	libelf/elf_memory.c \
-	libelf/elf_ndxscn.c \
-	libelf/elf_newdata.c \
-	libelf/elf_newscn.c \
-	libelf/elf_next.c \
-	libelf/elf_nextscn.c \
-	libelf/elf_rand.c \
-	libelf/elf_rawdata.c \
-	libelf/elf_rawfile.c \
-	libelf/elf_readall.c \
-	libelf/elf_scnshndx.c \
-	libelf/elf_strptr.c \
-	libelf/elf_update.c \
-	libelf/elf_version.c \
-	libelf/gelf_checksum.c \
-	libelf/gelf_fsize.c \
-	libelf/gelf_getauxv.c \
-	libelf/gelf_getclass.c \
-	libelf/gelf_getdyn.c \
-	libelf/gelf_getehdr.c \
-	libelf/gelf_getlib.c \
-	libelf/gelf_getmove.c \
-	libelf/gelf_getnote.c \
-	libelf/gelf_getphdr.c \
-	libelf/gelf_getrela.c \
-	libelf/gelf_getrel.c \
-	libelf/gelf_getshdr.c \
-	libelf/gelf_getsym.c \
-	libelf/gelf_getsyminfo.c \
-	libelf/gelf_getsymshndx.c \
-	libelf/gelf_getverdaux.c \
-	libelf/gelf_getverdef.c \
-	libelf/gelf_getvernaux.c \
-	libelf/gelf_getverneed.c \
-	libelf/gelf_getversym.c \
-	libelf/gelf_newehdr.c \
-	libelf/gelf_newphdr.c \
-	libelf/gelf_offscn.c \
-	libelf/gelf_update_auxv.c \
-	libelf/gelf_update_dyn.c \
-	libelf/gelf_update_ehdr.c \
-	libelf/gelf_update_lib.c \
-	libelf/gelf_update_move.c \
-	libelf/gelf_update_phdr.c \
-	libelf/gelf_update_rela.c \
-	libelf/gelf_update_rel.c \
-	libelf/gelf_update_shdr.c \
-	libelf/gelf_update_sym.c \
-	libelf/gelf_update_syminfo.c \
-	libelf/gelf_update_symshndx.c \
-	libelf/gelf_update_verdaux.c \
-	libelf/gelf_update_verdef.c \
-	libelf/gelf_update_vernaux.c \
-	libelf/gelf_update_verneed.c \
-	libelf/gelf_update_versym.c \
-	libelf/gelf_xlate.c \
-	libelf/gelf_xlatetof.c \
-	libelf/gelf_xlatetom.c \
-	libelf/libelf_crc32.c \
-	libelf/libelf_next_prime.c \
-	libelf/nlist.c
-
-LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/lib $(LOCAL_PATH)/libelf
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/host-$(HOST_OS)-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-ifeq ($(HOST_OS),darwin)
-	LOCAL_CFLAGS += -fnested-functions
-endif
-
-# to fix machine-dependent issues
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/host-$(HOST_OS)-fixup/AndroidFixup.h
-
-LOCAL_MODULE := libelf
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-endif #cur_platform
+include $(call all-subdir-makefiles)
diff --git a/android.patch b/android.patch
index 4021901..7d50f4f 100644
--- a/android.patch
+++ b/android.patch
@@ -1,6 +1,6 @@
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/dwarf_begin.c ./libdw/dwarf_begin.c
---- /home/bccheng/local/elfutils-0.138/libdw/dwarf_begin.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_begin.c	2012-03-07 15:56:49.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_begin.c ./libdw/dwarf_begin.c
+--- /local/elfutils-0.138/libdw/dwarf_begin.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_begin.c	2012-03-09 10:19:33.000000000 -0800
 @@ -94,7 +94,9 @@
    /* Get an ELF descriptor.  */
    elf = elf_begin (fd, elfcmd, NULL);
@@ -22,9 +22,9 @@
      }
    else
      {
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/dwarf_getpubnames.c ./libdw/dwarf_getpubnames.c
---- /home/bccheng/local/elfutils-0.138/libdw/dwarf_getpubnames.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_getpubnames.c	2012-03-07 15:56:49.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getpubnames.c ./libdw/dwarf_getpubnames.c
+--- /local/elfutils-0.138/libdw/dwarf_getpubnames.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_getpubnames.c	2012-03-12 11:09:29.000000000 -0700
 @@ -60,6 +60,9 @@
  #include <libdwP.h>
  #include <dwarf.h>
@@ -35,23 +35,20 @@
  
  static int
  get_offsets (Dwarf *dbg)
-@@ -235,7 +238,13 @@
- 	  gl.die_offset += dbg->pubnames_sets[cnt].cu_offset;
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getsrc_file.c ./libdw/dwarf_getsrc_file.c
+--- /local/elfutils-0.138/libdw/dwarf_getsrc_file.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_getsrc_file.c	2012-03-12 12:42:46.000000000 -0700
+@@ -59,7 +59,6 @@
  
- 	  gl.name = (char *) readp;
-+          /* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+	  readp = gl.name + strlen(gl.name) + 1;
-+#else
- 	  readp = (unsigned char *) rawmemchr (gl.name, '\0') + 1;
-+#endif
-+          /* ANDROID_CHANGE_END */
+ #include "libdwP.h"
  
- 	  /* We found name and DIE offset.  Report it.  */
- 	  if (callback (dbg, &gl, arg) != DWARF_CB_OK)
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/libdw_alloc.c ./libdw/libdw_alloc.c
---- /home/bccheng/local/elfutils-0.138/libdw/libdw_alloc.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/libdw_alloc.c	2012-03-07 15:56:49.000000000 -0800
+-
+ int
+ dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column,
+ 		   Dwarf_Line ***srcsp, size_t *nsrcs)
+diff -r -u -d /local/elfutils-0.138/libdw/libdw_alloc.c ./libdw/libdw_alloc.c
+--- /local/elfutils-0.138/libdw/libdw_alloc.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/libdw_alloc.c	2012-03-09 10:19:35.000000000 -0800
 @@ -58,6 +58,9 @@
  #include <sys/param.h>
  #include "libdwP.h"
@@ -62,20 +59,18 @@
  
  void *
  __libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c ./libdwfl/dwfl_build_id_find_elf.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_build_id_find_elf.c	2012-03-07 15:56:49.000000000 -0800
-@@ -52,6 +52,9 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c ./libdwfl/dwfl_build_id_find_elf.c
+--- /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_build_id_find_elf.c	2012-03-12 12:23:29.000000000 -0700
+@@ -52,7 +52,6 @@
  #include <fcntl.h>
  #include <unistd.h>
  
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
- 
+-
  int
  internal_function
-@@ -84,8 +87,16 @@
+ __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name)
+@@ -84,8 +83,16 @@
  	    ".debug");
  
    const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
@@ -92,7 +87,7 @@
  
    int fd = -1;
    char *dir;
-@@ -103,7 +114,6 @@
+@@ -103,7 +110,6 @@
        if (unlikely (name == NULL))
  	break;
        memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
@@ -100,7 +95,7 @@
        fd = TEMP_FAILURE_RETRY (open64 (name, O_RDONLY));
        if (fd >= 0)
  	{
-@@ -119,6 +129,12 @@
+@@ -119,6 +125,12 @@
        free (name);
      }
  
@@ -113,10 +108,28 @@
    /* If we simply found nothing, clear errno.  If we had some other error
       with the file, report that.  Possibly this should treat other errors
       like ENOENT too.  But ignoring all errors could mask some that should
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_build_id.c ./libdwfl/dwfl_module_build_id.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_build_id.c	2008-12-30 21:48:23.000000000 -0800
-+++ ./libdwfl/dwfl_module_build_id.c	2012-03-07 15:56:49.000000000 -0800
-@@ -139,9 +139,16 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_error.c ./libdwfl/dwfl_error.c
+--- /local/elfutils-0.138/libdwfl/dwfl_error.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_error.c	2012-03-12 12:39:16.000000000 -0700
+@@ -218,7 +218,14 @@
+   switch (error &~ 0xffff)
+     {
+     case OTHER_ERROR (ERRNO):
++      /* ANDROID_CHANGE_BEGIN */
++#ifdef __BIONIC__
++      strerror_r (error & 0xffff, "bad", 0);
++      return NULL;
++#else
+       return strerror_r (error & 0xffff, "bad", 0);
++#endif
++      /* ANDROID_CHANGE_END */
+     case OTHER_ERROR (LIBELF):
+       return elf_errmsg (error & 0xffff);
+     case OTHER_ERROR (LIBDW):
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c ./libdwfl/dwfl_module_build_id.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c	2008-12-30 21:48:23.000000000 -0800
++++ ./libdwfl/dwfl_module_build_id.c	2012-03-12 12:40:16.000000000 -0700
+@@ -139,9 +139,17 @@
    return result;
  }
  
@@ -126,6 +139,7 @@
  __dwfl_module_build_id (Dwfl_Module *mod,
  			const unsigned char **bits, GElf_Addr *vaddr)
 +#else
++int
 +dwfl_module_build_id (Dwfl_Module *mod,
 +		      const unsigned char **bits, GElf_Addr *vaddr)
 +#endif
@@ -133,7 +147,7 @@
  {
    if (mod == NULL)
      return -1;
-@@ -164,6 +171,9 @@
+@@ -164,6 +172,9 @@
    *vaddr = mod->build_id_vaddr;
    return mod->build_id_len;
  }
@@ -143,39 +157,46 @@
  extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
       __attribute__ ((alias ("__dwfl_module_build_id")));
  asm (".symver "
-@@ -180,3 +190,5 @@
+@@ -180,3 +191,5 @@
  }
  asm (".symver "
       "_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");
 +#endif
 +/* ANDROID_CHANGE_END */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c ./libdwfl/dwfl_module_getdwarf.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_module_getdwarf.c	2012-03-07 15:56:49.000000000 -0800
-@@ -53,6 +53,9 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c ./libdwfl/dwfl_module_getdwarf.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_module_getdwarf.c	2012-03-12 12:24:14.000000000 -0700
+@@ -53,7 +53,6 @@
  #include <unistd.h>
  #include "../libdw/libdwP.h"	/* DWARF_E_* values are here.  */
  
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
- 
+-
  /* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD.
     When we return success, FILE->elf and FILE->bias are set up.  */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/find-debuginfo.c ./libdwfl/find-debuginfo.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/find-debuginfo.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/find-debuginfo.c	2012-03-07 15:56:49.000000000 -0800
-@@ -53,6 +53,9 @@
+ static inline Dwfl_Error
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c ./libdwfl/dwfl_module_getsrc_file.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_module_getsrc_file.c	2012-03-12 12:42:55.000000000 -0700
+@@ -50,7 +50,6 @@
+ #include "libdwflP.h"
+ #include "../libdw/libdwP.h"
+ 
+-
+ int
+ dwfl_module_getsrc_file (Dwfl_Module *mod,
+ 			 const char *fname, int lineno, int column,
+diff -r -u -d /local/elfutils-0.138/libdwfl/find-debuginfo.c ./libdwfl/find-debuginfo.c
+--- /local/elfutils-0.138/libdwfl/find-debuginfo.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/find-debuginfo.c	2012-03-12 12:24:39.000000000 -0700
+@@ -53,7 +53,6 @@
  #include <unistd.h>
  #include "system.h"
  
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
- 
+-
  /* Try to open64 [DIR/][SUBDIR/]DEBUGLINK, return file descriptor or -1.
     On success, *DEBUGINFO_FILE_NAME has the malloc'd name of the open file.  */
-@@ -145,8 +148,15 @@
+ static int
+@@ -145,8 +144,15 @@
       indicated by the debug directory path setting.  */
  
    const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
@@ -191,7 +212,7 @@
  
    /* A leading - or + in the whole path sets whether to check file CRCs.  */
    bool defcheck = true;
-@@ -156,8 +166,15 @@
+@@ -156,8 +162,15 @@
        ++path;
      }
  
@@ -207,7 +228,7 @@
    char *p;
    while ((p = strsep (&path, ":")) != NULL)
      {
-@@ -201,17 +218,36 @@
+@@ -201,17 +214,36 @@
  	  case ENOTDIR:
  	    continue;
  	  default:
@@ -244,23 +265,41 @@
    /* No dice.  */
    errno = 0;
    return -1;
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/offline.c ./libdwfl/offline.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/offline.c	2008-12-17 16:29:37.000000000 -0800
-+++ ./libdwfl/offline.c	2012-03-07 15:56:49.000000000 -0800
-@@ -51,6 +51,10 @@
- #include <fcntl.h>
- #include <unistd.h>
- 
+diff -r -u -d /local/elfutils-0.138/libebl/eblopenbackend.c ./libebl/eblopenbackend.c
+--- /local/elfutils-0.138/libebl/eblopenbackend.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libebl/eblopenbackend.c	2012-03-16 16:55:06.000000000 -0700
+@@ -196,8 +196,15 @@
+ 				 uint32_t descsz, const char *desc);
+ static bool default_debugscn_p (const char *name);
+ static bool default_copy_reloc_p (int reloc);
 +/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
++#ifndef __APPLE__
+ static bool default_none_reloc_p (int reloc);
+ static bool default_relative_reloc_p (int reloc);
++#else
++#define default_none_reloc_p 		default_copy_reloc_p
++#define default_relative_reloc_p 	default_copy_reloc_p
++#endif
 +/* ANDROID_CHANGE_END */
-+
- /* Since dwfl_report_elf lays out the sections already, this will only be
-    called when the section headers of the debuginfo file are being
-    consulted instead, or for the section placed at 0.  With binutils
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libebl/libeblP.h ./libebl/libeblP.h
---- /home/bccheng/local/elfutils-0.138/libebl/libeblP.h	2008-12-10 20:33:30.000000000 -0800
-+++ ./libebl/libeblP.h	2012-03-07 15:56:49.000000000 -0800
+ static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
+ 					  const GElf_Sym *sym,
+ 					  const char *name,
+@@ -677,8 +684,12 @@
+ {
+   return false;
+ }
++/* ANDROID_CHANGE_BEGIN */
++#ifndef __APPLE__
+ strong_alias (default_copy_reloc_p, default_none_reloc_p)
+ strong_alias (default_copy_reloc_p, default_relative_reloc_p)
++#endif
++/* ANDROID_CHANGE_END */
+ 
+ static bool
+ default_check_special_symbol (Elf *elf __attribute__ ((unused)),
+diff -r -u -d /local/elfutils-0.138/libebl/libeblP.h ./libebl/libeblP.h
+--- /local/elfutils-0.138/libebl/libeblP.h	2008-12-10 20:33:30.000000000 -0800
++++ ./libebl/libeblP.h	2012-03-09 10:19:37.000000000 -0800
 @@ -55,7 +55,6 @@
  #include <libebl.h>
  #include <libintl.h>
@@ -269,9 +308,9 @@
  /* Backend handle.  */
  struct ebl
  {
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf32_fsize.c ./libelf/elf32_fsize.c
---- /home/bccheng/local/elfutils-0.138/libelf/elf32_fsize.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf32_fsize.c	2012-03-08 15:00:38.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf32_fsize.c ./libelf/elf32_fsize.c
+--- /local/elfutils-0.138/libelf/elf32_fsize.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf32_fsize.c	2012-03-09 10:19:38.000000000 -0800
 @@ -88,5 +88,9 @@
  	  * __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
  #endif
@@ -282,9 +321,9 @@
  local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
 +#endif
 +/* ANDROID_CHANGE_END */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf_begin.c ./libelf/elf_begin.c
---- /home/bccheng/local/elfutils-0.138/libelf/elf_begin.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf_begin.c	2012-03-08 15:34:30.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf_begin.c ./libelf/elf_begin.c
+--- /local/elfutils-0.138/libelf/elf_begin.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf_begin.c	2012-03-09 10:19:38.000000000 -0800
 @@ -68,7 +68,6 @@
  #include "libelfP.h"
  #include "common.h"
@@ -293,9 +332,42 @@
  /* Create descriptor for archive in memory.  */
  static inline Elf *
  file_read_ar (int fildes, void *map_address, off_t offset, size_t maxsize,
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf.h ./libelf/elf.h
---- /home/bccheng/local/elfutils-0.138/libelf/elf.h	2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf.h	2012-03-08 15:06:31.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c ./libelf/elf_getdata_rawchunk.c
+--- /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf_getdata_rawchunk.c	2012-03-15 11:14:32.000000000 -0700
+@@ -64,7 +64,13 @@
+ Elf_Data *
+ elf_getdata_rawchunk (elf, offset, size, type)
+      Elf *elf;
++     /* ANDROID_CHANGE_BEGIN */
++#if 0
+      off64_t offset;
++#else
++     off_t offset;
++#endif
++     /* ANDROID_CHANGE_END */
+      size_t size;
+      Elf_Type type;
+ {
+@@ -78,8 +84,15 @@
+       return NULL;
+     }
+ 
++   /* ANDROID_CHANGE_BEGIN */
++#if 0
+   if (unlikely (size > elf->maximum_size
+ 		|| (off64_t) (elf->maximum_size - size) < offset))
++#else
++  if (unlikely (size > elf->maximum_size
++		|| (off_t) (elf->maximum_size - size) < offset))
++#endif
++   /* ANDROID_CHANGE_END */
+     {
+       /* Invalid request.  */
+       __libelf_seterrno (ELF_E_INVALID_OP);
+diff -r -u -d /local/elfutils-0.138/libelf/elf.h ./libelf/elf.h
+--- /local/elfutils-0.138/libelf/elf.h	2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf.h	2012-03-09 10:19:38.000000000 -0800
 @@ -21,7 +21,15 @@
  #ifndef _ELF_H
  #define	_ELF_H 1
@@ -312,9 +384,9 @@
  
  __BEGIN_DECLS
  
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/gelf_xlate.c ./libelf/gelf_xlate.c
---- /home/bccheng/local/elfutils-0.138/libelf/gelf_xlate.c	2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/gelf_xlate.c	2012-03-08 15:00:38.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/gelf_xlate.c ./libelf/gelf_xlate.c
+--- /local/elfutils-0.138/libelf/gelf_xlate.c	2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/gelf_xlate.c	2012-03-09 10:19:39.000000000 -0800
 @@ -229,7 +229,11 @@
      }
    }
@@ -327,3 +399,93 @@
  strong_alias (__elf_xfctstom, __elf_xfctstof)
 +#endif
 +/* ANDROID_CHANGE_END */
+diff -r -u -d /local/elfutils-0.138/libelf/libelf.h ./libelf/libelf.h
+--- /local/elfutils-0.138/libelf/libelf.h	2008-12-17 16:29:37.000000000 -0800
++++ ./libelf/libelf.h	2012-03-15 11:07:48.000000000 -0700
+@@ -95,7 +95,13 @@
+   Elf_Type d_type;		/* Type of this piece of data.  */
+   unsigned int d_version;	/* ELF version.  */
+   size_t d_size;		/* Size in bytes.  */
++  /* ANDROID_CHANGE_BEGIN */
++#if 0
+   loff_t d_off;			/* Offset into section.  */
++#else
++  off_t d_off;			/* Offset into section.  */
++#endif
++  /* ANDROID_CHANGE_END */
+   size_t d_align;		/* Alignment in section.  */
+ } Elf_Data;
+ 
+@@ -157,7 +163,13 @@
+   uid_t ar_uid;			/* User ID.  */
+   gid_t ar_gid;			/* Group ID.  */
+   mode_t ar_mode;		/* File mode.  */
++  /* ANDROID_CHANGE_BEGIN */
++#if 0
+   loff_t ar_size;		/* File size.  */
++#else
++  off_t ar_size;		/* File size.  */
++#endif
++  /* ANDROID_CHANGE_END */
+   char *ar_rawname;		/* Original name of archive member.  */
+ } Elf_Arhdr;
+ 
+@@ -198,13 +210,25 @@
+ extern int elf_end (Elf *__elf);
+ 
+ /* Update ELF descriptor and write file to disk.  */
+-extern loff_t elf_update (Elf *__elf, Elf_Cmd __cmd);
++/* ANDROID_CHANGE_BEGIN */
++#if 0
++extern off_t elf_update (Elf *__elf, Elf_Cmd __cmd);
++#else
++#endif
++/* ANDROID_CHANGE_END */
++
+ 
+ /* Determine what kind of file is associated with ELF.  */
+ extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
+ 
+ /* Get the base offset for an object file.  */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern loff_t elf_getbase (Elf *__elf);
++#else
++extern off_t elf_getbase (Elf *__elf);
++#endif
++/* ANDROID_CHANGE_END */
+ 
+ 
+ /* Retrieve file identification data.  */
+@@ -305,9 +329,17 @@
+ /* Get data translated from a chunk of the file contents as section data
+    would be for TYPE.  The resulting Elf_Data pointer is valid until
+    elf_end (ELF) is called.  */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
+ 				       loff_t __offset, size_t __size,
+ 				       Elf_Type __type);
++#else
++extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
++				       off_t __offset, size_t __size,
++				       Elf_Type __type);
++#endif
++/* ANDROID_CHANGE_END */
+ 
+ 
+ /* Return pointer to string at OFFSET in section INDEX.  */
+@@ -318,7 +350,13 @@
+ extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
+ 
+ /* Return offset in archive for current file ELF.  */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern loff_t elf_getaroff (Elf *__elf);
++#else
++extern off_t elf_getaroff (Elf *__elf);
++#endif
++/* ANDROID_CHANGE_END */
+ 
+ /* Select archive element at OFFSET.  */
+ extern size_t elf_rand (Elf *__elf, size_t __offset);
diff --git a/bionic-fixup/AndroidFixup.h b/bionic-fixup/AndroidFixup.h
new file mode 100644
index 0000000..e96d57e
--- /dev/null
+++ b/bionic-fixup/AndroidFixup.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_FIXUP_H
+#define ANDROID_FIXUP_H
+
+#include <stdio.h>
+#include <libgen.h>     // for basename
+
+//#define _OFF_T_DEFINED_
+
+//#define off_t           loff_t
+
+#ifndef MAX
+#define MAX(x,y)        ((x) > (y) ? (x) : (y))
+#endif
+
+#ifndef MIN
+#define MIN(x,y)        ((x) < (y) ? (x) : (y))
+#endif
+
+#ifndef powerof2
+#define powerof2(x)     (((x - 1) & (x)) == 0)
+#endif
+
+/* workaround for canonicalize_file_name */
+#define canonicalize_file_name(path) realpath(path, NULL)
+
+/* workaround for open64 */
+#define open64(path, flags)     open(path, ((flags) | O_LARGEFILE))
+
+/* no internalization */
+#define gettext(x)      (x)
+
+/* _mempcpy and mempcpy */
+#ifndef __mempcpy
+#define __mempcpy(dest, src, n)  mempcpy(dest, src, n)
+#endif
+
+#ifndef mempcpy
+#include <string.h>
+
+static inline void *mempcpy(void *dest, const void *src, size_t n)
+{
+    char *ptr = memcpy(dest, src, n);
+    return ptr + n;
+}
+#endif
+
+/* rawmemchr */
+static inline void *rawmemchr(const void *s, int c)
+{
+    const unsigned char *ptr = s;
+    while (1) {
+        if (*ptr == c) return (void *) ptr;
+        ptr++;
+    }
+}
+
+/* workaround for stpcpy */
+static inline char *stpcpy(char *dst, const char *src)
+{
+    while (*src) {
+        *dst++ = *src++;
+    }
+    return dst;
+}
+
+/* forward declarations */
+char * dgettext (const char * domainname, const char * msgid);
+
+ssize_t getline(char **lineptr, size_t *n, FILE *stream);
+
+#endif /* ANDROID_FIXUP_H */
diff --git a/bionic-fixup/error.h b/bionic-fixup/error.h
new file mode 100644
index 0000000..1204eff
--- /dev/null
+++ b/bionic-fixup/error.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ELFUTILS_ERROR_H
+#define ELFUTILS_ERROR_H
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+
+static inline void __attribute__((noreturn))
+error(int status, int errnum, const char *fmt, ...)
+{
+        va_list lst;
+        va_start(lst, fmt);
+        vfprintf(stderr, fmt, lst);
+        fprintf(stderr, "error %d: %s\n", errnum, strerror(errno));
+        va_end(lst);
+        exit(status);
+}
+
+#endif /* ELFUTILS_ERROR_H */
diff --git a/bionic-fixup/getline.c b/bionic-fixup/getline.c
new file mode 100644
index 0000000..041a5ed
--- /dev/null
+++ b/bionic-fixup/getline.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+ssize_t getline(char **lineptr, size_t *n, FILE *stream)
+{
+    char *ptr;
+
+    ptr = fgetln(stream, n);
+
+    if (ptr == NULL) {
+        return -1;
+    }
+
+    /* Free the original ptr */
+    if (*lineptr != NULL) free(*lineptr);
+
+    /* Add one more space for '\0' */
+    size_t len = n[0] + 1;
+
+    /* Update the length */
+    n[0] = len;
+
+    /* Allocate a new buffer */
+    *lineptr = malloc(len);
+
+    /* Copy over the string */
+    memcpy(*lineptr, ptr, len-1);
+
+    /* Write the NULL character */
+    (*lineptr)[len-1] = '\0';
+
+    /* Return the length of the new buffer */
+    return len;
+}
diff --git a/bionic-fixup/libintl.h b/bionic-fixup/libintl.h
new file mode 100644
index 0000000..da26bfa
--- /dev/null
+++ b/bionic-fixup/libintl.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ELFUTILS_LIBINTL_H
+#define ELFUTILS_LIBINTL_H
+
+/* intentionally blank */
+
+#endif /* ELFUTILS_LIBINTL_H */
diff --git a/bionic-fixup/stdio_ext.h b/bionic-fixup/stdio_ext.h
new file mode 100644
index 0000000..3acd20a
--- /dev/null
+++ b/bionic-fixup/stdio_ext.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H
+#define ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H
+
+/* intentionally blank */
+
+#endif  /* ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H */
diff --git a/host-darwin-fixup/AndroidFixup.h b/host-darwin-fixup/AndroidFixup.h
index f7afcd4..1342843 100644
--- a/host-darwin-fixup/AndroidFixup.h
+++ b/host-darwin-fixup/AndroidFixup.h
@@ -1,8 +1,24 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef ANDROID_FIXUP_H
 #define ANDROID_FIXUP_H
 
-#define off_t loff_t
-#define off64_t loff_t
+#define loff_t off_t
+#define off64_t off_t
 
 #include <string.h>
 #include <stdarg.h>
diff --git a/host-darwin-fixup/byteswap.h b/host-darwin-fixup/byteswap.h
index db5192d..6b3d212 100644
--- a/host-darwin-fixup/byteswap.h
+++ b/host-darwin-fixup/byteswap.h
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef ELFUTILS_BYTESWAP_H
 #define ELFUTILS_BYTESWAP_H
 
diff --git a/host-darwin-fixup/endian.h b/host-darwin-fixup/endian.h
index 004acda..285e196 100644
--- a/host-darwin-fixup/endian.h
+++ b/host-darwin-fixup/endian.h
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef ELFUTILS_ENDIAN_H
 #define ELFUTILS_ENDIAN_H
 
diff --git a/host-darwin-fixup/error.h b/host-darwin-fixup/error.h
new file mode 100644
index 0000000..4b89257
--- /dev/null
+++ b/host-darwin-fixup/error.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ELFUTILS_ERROR_H
+#define ELFUTILS_ERROR_H
+
+/* intentionally blank */
+
+#endif /* ELFUTILS_ERROR_H */
diff --git a/host-darwin-fixup/libintl.h b/host-darwin-fixup/libintl.h
index 56af5c2..da26bfa 100644
--- a/host-darwin-fixup/libintl.h
+++ b/host-darwin-fixup/libintl.h
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef ELFUTILS_LIBINTL_H
 #define ELFUTILS_LIBINTL_H
 
diff --git a/host-linux-fixup/AndroidFixup.h b/host-linux-fixup/AndroidFixup.h
index e853163..909867c 100644
--- a/host-linux-fixup/AndroidFixup.h
+++ b/host-linux-fixup/AndroidFixup.h
@@ -1,4 +1,22 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef ANDROID_FIXUP_H
 #define ANDROID_FIXUP_H
 
+/* intentionally blank */
+
 #endif /* ANDROID_FIXUP_H */
diff --git a/libdw/Android.mk b/libdw/Android.mk
new file mode 100755
index 0000000..44f0223
--- /dev/null
+++ b/libdw/Android.mk
@@ -0,0 +1,176 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86 darwin-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libdw
+#
+
+include $(CLEAR_VARS)
+
+LIBDW_SRC_FILES := \
+        dwarf_abbrevhaschildren.c \
+        dwarf_abbrev_hash.c \
+        dwarf_addrdie.c \
+        dwarf_arrayorder.c \
+        dwarf_attr.c \
+        dwarf_attr_integrate.c \
+        dwarf_begin.c \
+        dwarf_begin_elf.c \
+        dwarf_bitoffset.c \
+        dwarf_bitsize.c \
+        dwarf_bytesize.c \
+        dwarf_child.c \
+        dwarf_cuoffset.c \
+        dwarf_decl_column.c \
+        dwarf_decl_file.c \
+        dwarf_decl_line.c \
+        dwarf_diecu.c \
+        dwarf_diename.c \
+        dwarf_dieoffset.c \
+        dwarf_end.c \
+        dwarf_entry_breakpoints.c \
+        dwarf_entrypc.c \
+        dwarf_error.c \
+        dwarf_filesrc.c \
+        dwarf_formaddr.c \
+        dwarf_formblock.c \
+        dwarf_formflag.c \
+        dwarf_formref.c \
+        dwarf_formref_die.c \
+        dwarf_formsdata.c \
+        dwarf_formstring.c \
+        dwarf_formudata.c \
+        dwarf_func_inline.c \
+        dwarf_getabbrevattr.c \
+        dwarf_getabbrev.c \
+        dwarf_getabbrevcode.c \
+        dwarf_getabbrevtag.c \
+        dwarf_getarange_addr.c \
+        dwarf_getarangeinfo.c \
+        dwarf_getaranges.c \
+        dwarf_getattrcnt.c \
+        dwarf_getattrs.c \
+        dwarf_getelf.c \
+        dwarf_getfuncs.c \
+        dwarf_getlocation.c \
+        dwarf_getmacros.c \
+        dwarf_getpubnames.c \
+        dwarf_getscopes.c \
+        dwarf_getscopes_die.c \
+        dwarf_getscopevar.c \
+        dwarf_getsrc_die.c \
+        dwarf_getsrcdirs.c \
+        dwarf_getsrc_file.c \
+        dwarf_getsrcfiles.c \
+        dwarf_getsrclines.c \
+        dwarf_getstring.c \
+        dwarf_hasattr.c \
+        dwarf_hasattr_integrate.c \
+        dwarf_haschildren.c \
+        dwarf_hasform.c \
+        dwarf_haspc.c \
+        dwarf_highpc.c \
+        dwarf_lineaddr.c \
+        dwarf_linebeginstatement.c \
+        dwarf_lineblock.c \
+        dwarf_linecol.c \
+        dwarf_lineendsequence.c \
+        dwarf_lineepiloguebegin.c \
+        dwarf_lineno.c \
+        dwarf_lineprologueend.c \
+        dwarf_linesrc.c \
+        dwarf_lowpc.c \
+        dwarf_macro_opcode.c \
+        dwarf_macro_param1.c \
+        dwarf_macro_param2.c \
+        dwarf_nextcu.c \
+        dwarf_offabbrev.c \
+        dwarf_offdie.c \
+        dwarf_onearange.c \
+        dwarf_onesrcline.c \
+        dwarf_ranges.c \
+        dwarf_siblingof.c \
+        dwarf_srclang.c \
+        dwarf_tag.c \
+        dwarf_whatattr.c \
+        dwarf_whatform.c \
+        libdw_alloc.c \
+        libdw_findcu.c \
+        libdw_form.c \
+        libdw_visit_scopes.c \
+        memory-access.c
+
+LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libdw \
+	$(LOCAL_PATH)/../libelf
+
+ifeq ($(HOST_OS),darwin)
+	LOCAL_CFLAGS += -fnested-functions
+endif
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE -DIS_LIBDW
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libdw
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libdw
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
+
+# missing utility functions in bionic
+LOCAL_SRC_FILES += \
+	../bionic-fixup/getline.c \
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libdw \
+	$(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -DIS_LIBDW -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libdw
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c
index 3897c25..e787295 100644
--- a/libdw/dwarf_getpubnames.c
+++ b/libdw/dwarf_getpubnames.c
@@ -238,13 +238,7 @@
 	  gl.die_offset += dbg->pubnames_sets[cnt].cu_offset;
 
 	  gl.name = (char *) readp;
-          /* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
-	  readp = gl.name + strlen(gl.name) + 1;
-#else
 	  readp = (unsigned char *) rawmemchr (gl.name, '\0') + 1;
-#endif
-          /* ANDROID_CHANGE_END */
 
 	  /* We found name and DIE offset.  Report it.  */
 	  if (callback (dbg, &gl, arg) != DWARF_CB_OK)
diff --git a/libdw/dwarf_getsrc_file.c b/libdw/dwarf_getsrc_file.c
index 91abbae..2c4fc76 100644
--- a/libdw/dwarf_getsrc_file.c
+++ b/libdw/dwarf_getsrc_file.c
@@ -59,7 +59,6 @@
 
 #include "libdwP.h"
 
-
 int
 dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column,
 		   Dwarf_Line ***srcsp, size_t *nsrcs)
diff --git a/libdwfl/Android.mk b/libdwfl/Android.mk
new file mode 100755
index 0000000..71a7ddb
--- /dev/null
+++ b/libdwfl/Android.mk
@@ -0,0 +1,104 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86 darwin-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libdwfl
+#
+
+include $(CLEAR_VARS)
+
+LIBDWFL_SRC_FILES := \
+	dwfl_begin.c \
+	dwfl_build_id_find_elf.c \
+	dwfl_build_id_find_debuginfo.c \
+	libdwfl_crc32.c \
+	libdwfl_crc32_file.c \
+	dwfl_end.c \
+	dwfl_error.c \
+	dwfl_module.c \
+	dwfl_module_addrdie.c \
+	dwfl_module_build_id.c \
+	dwfl_module_getdwarf.c \
+	dwfl_report_elf.c \
+	find-debuginfo.c \
+	offline.c \
+	relocate.c
+
+LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libdwfl \
+	$(LOCAL_PATH)/../libebl \
+	$(LOCAL_PATH)/../libdw \
+	$(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+ifeq ($(HOST_OS),darwin)
+	LOCAL_CFLAGS += -fnested-functions
+endif
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libdwfl
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libdwfl
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libdwfl \
+	$(LOCAL_PATH)/../libebl \
+	$(LOCAL_PATH)/../libdw \
+	$(LOCAL_PATH)/../libelf
+
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libdwfl
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c
index 88aa821..21c7719 100644
--- a/libdwfl/dwfl_build_id_find_elf.c
+++ b/libdwfl/dwfl_build_id_find_elf.c
@@ -52,10 +52,6 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
 int
 internal_function
 __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name)
diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c
index 414fbaf..f011be1 100644
--- a/libdwfl/dwfl_error.c
+++ b/libdwfl/dwfl_error.c
@@ -218,7 +218,14 @@
   switch (error &~ 0xffff)
     {
     case OTHER_ERROR (ERRNO):
+      /* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+      strerror_r (error & 0xffff, "bad", 0);
+      return NULL;
+#else
       return strerror_r (error & 0xffff, "bad", 0);
+#endif
+      /* ANDROID_CHANGE_END */
     case OTHER_ERROR (LIBELF):
       return elf_errmsg (error & 0xffff);
     case OTHER_ERROR (LIBDW):
diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c
index 17d8f9f..3470678 100644
--- a/libdwfl/dwfl_module_build_id.c
+++ b/libdwfl/dwfl_module_build_id.c
@@ -145,6 +145,7 @@
 __dwfl_module_build_id (Dwfl_Module *mod,
 			const unsigned char **bits, GElf_Addr *vaddr)
 #else
+int
 dwfl_module_build_id (Dwfl_Module *mod,
 		      const unsigned char **bits, GElf_Addr *vaddr)
 #endif
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
index 9206dbb..51f00a0 100644
--- a/libdwfl/dwfl_module_getdwarf.c
+++ b/libdwfl/dwfl_module_getdwarf.c
@@ -53,10 +53,6 @@
 #include <unistd.h>
 #include "../libdw/libdwP.h"	/* DWARF_E_* values are here.  */
 
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
 /* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD.
    When we return success, FILE->elf and FILE->bias are set up.  */
 static inline Dwfl_Error
diff --git a/libdwfl/dwfl_module_getsrc_file.c b/libdwfl/dwfl_module_getsrc_file.c
index 9d0c786..0171c1d 100644
--- a/libdwfl/dwfl_module_getsrc_file.c
+++ b/libdwfl/dwfl_module_getsrc_file.c
@@ -50,7 +50,6 @@
 #include "libdwflP.h"
 #include "../libdw/libdwP.h"
 
-
 int
 dwfl_module_getsrc_file (Dwfl_Module *mod,
 			 const char *fname, int lineno, int column,
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
index 5cc6f3b..9e06304 100644
--- a/libdwfl/find-debuginfo.c
+++ b/libdwfl/find-debuginfo.c
@@ -53,10 +53,6 @@
 #include <unistd.h>
 #include "system.h"
 
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
 /* Try to open64 [DIR/][SUBDIR/]DEBUGLINK, return file descriptor or -1.
    On success, *DEBUGINFO_FILE_NAME has the malloc'd name of the open file.  */
 static int
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
index ba8f47c..b3a95dd 100644
--- a/libdwfl/offline.c
+++ b/libdwfl/offline.c
@@ -51,10 +51,6 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
 /* Since dwfl_report_elf lays out the sections already, this will only be
    called when the section headers of the debuginfo file are being
    consulted instead, or for the section placed at 0.  With binutils
diff --git a/libebl/Android.mk b/libebl/Android.mk
new file mode 100755
index 0000000..19b0d68
--- /dev/null
+++ b/libebl/Android.mk
@@ -0,0 +1,123 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86 darwin-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libebl
+#
+#
+include $(CLEAR_VARS)
+
+LIBEBL_SRC_FILES := \
+        eblauxvinfo.c \
+        eblbackendname.c \
+        eblbsspltp.c \
+        eblcheckobjattr.c \
+        ebl_check_special_section.c \
+        ebl_check_special_symbol.c \
+        eblclosebackend.c \
+        eblcopyrelocp.c \
+        eblcorenote.c \
+        eblcorenotetypename.c \
+        ebldebugscnp.c \
+        ebldynamictagcheck.c \
+        ebldynamictagname.c \
+        eblelfclass.c \
+        eblelfdata.c \
+        eblelfmachine.c \
+        eblgotpcreloccheck.c \
+        eblgstrtab.c \
+        eblmachineflagcheck.c \
+        eblmachineflagname.c \
+        eblmachinesectionflagcheck.c \
+        eblnonerelocp.c \
+        eblobjecttypename.c \
+        eblobjnote.c \
+        eblobjnotetypename.c \
+        eblopenbackend.c \
+        eblosabiname.c \
+        eblreginfo.c \
+        eblrelativerelocp.c \
+        eblrelocsimpletype.c \
+        eblreloctypecheck.c \
+        eblreloctypename.c \
+        eblrelocvaliduse.c \
+        eblretval.c \
+        eblsectionname.c \
+        eblsectionstripp.c \
+        eblsectiontypename.c \
+        eblshflagscombine.c \
+        eblstrtab.c \
+        eblsymbolbindingname.c \
+        eblsymboltypename.c \
+        ebl_syscall_abi.c \
+        eblsysvhashentrysize.c
+
+LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libebl \
+	$(LOCAL_PATH)/../libasm \
+	$(LOCAL_PATH)/../libelf \
+	$(LOCAL_PATH)/../libdw
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libebl
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libebl
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libebl \
+	$(LOCAL_PATH)/../libasm \
+	$(LOCAL_PATH)/../libelf \
+	$(LOCAL_PATH)/../libdw
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE:= libebl
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
index 8cf4218..fda6b1e 100644
--- a/libebl/eblopenbackend.c
+++ b/libebl/eblopenbackend.c
@@ -196,8 +196,15 @@
 				 uint32_t descsz, const char *desc);
 static bool default_debugscn_p (const char *name);
 static bool default_copy_reloc_p (int reloc);
+/* ANDROID_CHANGE_BEGIN */
+#ifndef __APPLE__
 static bool default_none_reloc_p (int reloc);
 static bool default_relative_reloc_p (int reloc);
+#else
+#define default_none_reloc_p 		default_copy_reloc_p
+#define default_relative_reloc_p 	default_copy_reloc_p
+#endif
+/* ANDROID_CHANGE_END */
 static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
 					  const GElf_Sym *sym,
 					  const char *name,
@@ -677,8 +684,12 @@
 {
   return false;
 }
+/* ANDROID_CHANGE_BEGIN */
+#ifndef __APPLE__
 strong_alias (default_copy_reloc_p, default_none_reloc_p)
 strong_alias (default_copy_reloc_p, default_relative_reloc_p)
+#endif
+/* ANDROID_CHANGE_END */
 
 static bool
 default_check_special_symbol (Elf *elf __attribute__ ((unused)),
diff --git a/libelf/Android.mk b/libelf/Android.mk
new file mode 100755
index 0000000..78233d0
--- /dev/null
+++ b/libelf/Android.mk
@@ -0,0 +1,193 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86 darwin-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libelf
+#
+
+include $(CLEAR_VARS)
+
+LIBELF_SRC_FILES := \
+	elf32_checksum.c \
+	elf32_fsize.c \
+	elf32_getehdr.c \
+	elf32_getphdr.c \
+	elf32_getshdr.c \
+	elf32_newehdr.c \
+	elf32_newphdr.c \
+	elf32_offscn.c \
+	elf32_updatefile.c \
+	elf32_updatenull.c \
+	elf32_xlatetof.c \
+	elf32_xlatetom.c \
+	elf64_checksum.c \
+	elf64_fsize.c \
+	elf64_getehdr.c \
+	elf64_getphdr.c \
+	elf64_getshdr.c \
+	elf64_newehdr.c \
+	elf64_newphdr.c \
+	elf64_offscn.c \
+	elf64_updatefile.c \
+	elf64_updatenull.c \
+	elf64_xlatetof.c \
+	elf64_xlatetom.c \
+	elf_begin.c \
+	elf_clone.c \
+	elf_cntl.c \
+	elf_end.c \
+	elf_error.c \
+	elf_fill.c \
+	elf_flagdata.c \
+	elf_flagehdr.c \
+	elf_flagelf.c \
+	elf_flagphdr.c \
+	elf_flagscn.c \
+	elf_flagshdr.c \
+	elf_getarhdr.c \
+	elf_getaroff.c \
+	elf_getarsym.c \
+	elf_getbase.c \
+	elf_getdata.c \
+	elf_getdata_rawchunk.c \
+	elf_getident.c \
+	elf_getscn.c \
+	elf_getshnum.c \
+	elf_getshstrndx.c \
+	elf_gnu_hash.c \
+	elf_hash.c \
+	elf_kind.c \
+	elf_memory.c \
+	elf_ndxscn.c \
+	elf_newdata.c \
+	elf_newscn.c \
+	elf_next.c \
+	elf_nextscn.c \
+	elf_rand.c \
+	elf_rawdata.c \
+	elf_rawfile.c \
+	elf_readall.c \
+	elf_scnshndx.c \
+	elf_strptr.c \
+	elf_update.c \
+	elf_version.c \
+	gelf_checksum.c \
+	gelf_fsize.c \
+	gelf_getauxv.c \
+	gelf_getclass.c \
+	gelf_getdyn.c \
+	gelf_getehdr.c \
+	gelf_getlib.c \
+	gelf_getmove.c \
+	gelf_getnote.c \
+	gelf_getphdr.c \
+	gelf_getrela.c \
+	gelf_getrel.c \
+	gelf_getshdr.c \
+	gelf_getsym.c \
+	gelf_getsyminfo.c \
+	gelf_getsymshndx.c \
+	gelf_getverdaux.c \
+	gelf_getverdef.c \
+	gelf_getvernaux.c \
+	gelf_getverneed.c \
+	gelf_getversym.c \
+	gelf_newehdr.c \
+	gelf_newphdr.c \
+	gelf_offscn.c \
+	gelf_update_auxv.c \
+	gelf_update_dyn.c \
+	gelf_update_ehdr.c \
+	gelf_update_lib.c \
+	gelf_update_move.c \
+	gelf_update_phdr.c \
+	gelf_update_rela.c \
+	gelf_update_rel.c \
+	gelf_update_shdr.c \
+	gelf_update_sym.c \
+	gelf_update_syminfo.c \
+	gelf_update_symshndx.c \
+	gelf_update_verdaux.c \
+	gelf_update_verdef.c \
+	gelf_update_vernaux.c \
+	gelf_update_verneed.c \
+	gelf_update_versym.c \
+	gelf_xlate.c \
+	gelf_xlatetof.c \
+	gelf_xlatetom.c \
+	libelf_crc32.c \
+	libelf_next_prime.c \
+	nlist.c
+
+LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+ifeq ($(HOST_OS),darwin)
+	LOCAL_CFLAGS += -fnested-functions
+endif
+
+# to fix machine-dependent issues
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+LOCAL_MODULE := libelf
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libelf
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/.. \
+	$(LOCAL_PATH)/../lib \
+	$(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE := libelf
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c
index 5af0f7f..a655cb0 100644
--- a/libelf/elf_getdata_rawchunk.c
+++ b/libelf/elf_getdata_rawchunk.c
@@ -64,7 +64,13 @@
 Elf_Data *
 elf_getdata_rawchunk (elf, offset, size, type)
      Elf *elf;
+     /* ANDROID_CHANGE_BEGIN */
+#if 0
      off64_t offset;
+#else
+     off_t offset;
+#endif
+     /* ANDROID_CHANGE_END */
      size_t size;
      Elf_Type type;
 {
@@ -78,8 +84,15 @@
       return NULL;
     }
 
+   /* ANDROID_CHANGE_BEGIN */
+#if 0
   if (unlikely (size > elf->maximum_size
 		|| (off64_t) (elf->maximum_size - size) < offset))
+#else
+  if (unlikely (size > elf->maximum_size
+		|| (off_t) (elf->maximum_size - size) < offset))
+#endif
+   /* ANDROID_CHANGE_END */
     {
       /* Invalid request.  */
       __libelf_seterrno (ELF_E_INVALID_OP);
diff --git a/libelf/libelf.h b/libelf/libelf.h
index dea0d83..8021266 100644
--- a/libelf/libelf.h
+++ b/libelf/libelf.h
@@ -95,7 +95,13 @@
   Elf_Type d_type;		/* Type of this piece of data.  */
   unsigned int d_version;	/* ELF version.  */
   size_t d_size;		/* Size in bytes.  */
+  /* ANDROID_CHANGE_BEGIN */
+#if 0
   loff_t d_off;			/* Offset into section.  */
+#else
+  off_t d_off;			/* Offset into section.  */
+#endif
+  /* ANDROID_CHANGE_END */
   size_t d_align;		/* Alignment in section.  */
 } Elf_Data;
 
@@ -157,7 +163,13 @@
   uid_t ar_uid;			/* User ID.  */
   gid_t ar_gid;			/* Group ID.  */
   mode_t ar_mode;		/* File mode.  */
+  /* ANDROID_CHANGE_BEGIN */
+#if 0
   loff_t ar_size;		/* File size.  */
+#else
+  off_t ar_size;		/* File size.  */
+#endif
+  /* ANDROID_CHANGE_END */
   char *ar_rawname;		/* Original name of archive member.  */
 } Elf_Arhdr;
 
@@ -198,13 +210,25 @@
 extern int elf_end (Elf *__elf);
 
 /* Update ELF descriptor and write file to disk.  */
-extern loff_t elf_update (Elf *__elf, Elf_Cmd __cmd);
+/* ANDROID_CHANGE_BEGIN */
+#if 0
+extern off_t elf_update (Elf *__elf, Elf_Cmd __cmd);
+#else
+#endif
+/* ANDROID_CHANGE_END */
+
 
 /* Determine what kind of file is associated with ELF.  */
 extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
 
 /* Get the base offset for an object file.  */
+/* ANDROID_CHANGE_BEGIN */
+#if 0
 extern loff_t elf_getbase (Elf *__elf);
+#else
+extern off_t elf_getbase (Elf *__elf);
+#endif
+/* ANDROID_CHANGE_END */
 
 
 /* Retrieve file identification data.  */
@@ -305,9 +329,17 @@
 /* Get data translated from a chunk of the file contents as section data
    would be for TYPE.  The resulting Elf_Data pointer is valid until
    elf_end (ELF) is called.  */
+/* ANDROID_CHANGE_BEGIN */
+#if 0
 extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
 				       loff_t __offset, size_t __size,
 				       Elf_Type __type);
+#else
+extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
+				       off_t __offset, size_t __size,
+				       Elf_Type __type);
+#endif
+/* ANDROID_CHANGE_END */
 
 
 /* Return pointer to string at OFFSET in section INDEX.  */
@@ -318,7 +350,13 @@
 extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
 
 /* Return offset in archive for current file ELF.  */
+/* ANDROID_CHANGE_BEGIN */
+#if 0
 extern loff_t elf_getaroff (Elf *__elf);
+#else
+extern off_t elf_getaroff (Elf *__elf);
+#endif
+/* ANDROID_CHANGE_END */
 
 /* Select archive element at OFFSET.  */
 extern size_t elf_rand (Elf *__elf, size_t __offset);
