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);
   if (elf == NULL)
+    /* ANDROID_CHANGE_BEGIN */
     {
+#if 0
       /* Test why the `elf_begin" call failed.  */
       struct stat64 st;
 
@@ -104,6 +106,10 @@
 	__libdw_seterrno (DWARF_E_INVALID_FILE);
       else
 	__libdw_seterrno (DWARF_E_IO_ERROR);
+#else
+      __libdw_seterrno (DWARF_E_IO_ERROR);
+#endif
+      /* ANDROID_CHANGE_END */
     }
   else
     {
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>
 
+/* ANDROID_CHANGE_BEGIN */
+#include <AndroidFixup.h>
+/* ANDROID_CHANGE_END */
 
 static int
 get_offsets (Dwarf *dbg)
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 @@
 
 #include "libdwP.h"
 
-
 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"
 
+/* ANDROID_CHANGE_BEGIN */
+#include <AndroidFixup.h>
+/* ANDROID_CHANGE_END */
 
 void *
 __libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
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>
 
-
 int
 internal_function
 __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;
+
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+  char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
+			?: DEFAULT_DEBUGINFO_PATH);
+#else
   char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
 			?: DEFAULT_DEBUGINFO_PATH);
+#endif
+/* ANDROID_CHANGE_END */
 
   int fd = -1;
   char *dir;
@@ -103,7 +110,6 @@
       if (unlikely (name == NULL))
 	break;
       memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
-
       fd = TEMP_FAILURE_RETRY (open64 (name, O_RDONLY));
       if (fd >= 0)
 	{
@@ -119,6 +125,12 @@
       free (name);
     }
 
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+  free(path);
+#endif
+/* ANDROID_CHANGE_END */
+
   /* 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 /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;
 }
 
+/* ANDROID_CHANGE_BEGIN */
+#if 0
 int
 __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
+/* ANDROID_CHANGE_END */
 {
   if (mod == NULL)
     return -1;
@@ -164,6 +172,9 @@
   *vaddr = mod->build_id_vaddr;
   return mod->build_id_len;
 }
+
+/* ANDROID_CHANGE_BEGIN */
+#if 0
 extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
      __attribute__ ((alias ("__dwfl_module_build_id")));
 asm (".symver "
@@ -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 /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.  */
 
-
 /* 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 -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"
 
-
 /* 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
@@ -145,8 +144,15 @@
      indicated by the debug directory path setting.  */
 
   const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+  char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
+			?: DEFAULT_DEBUGINFO_PATH);
+#else
   char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
 			?: DEFAULT_DEBUGINFO_PATH);
+#endif
+/* ANDROID_CHANGE_END */
 
   /* A leading - or + in the whole path sets whether to check file CRCs.  */
   bool defcheck = true;
@@ -156,8 +162,15 @@
       ++path;
     }
 
+  /* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+  char *file_dirname = (file_basename == file_name ? NULL
+			: strndup (file_name, file_basename - 1 - file_name));
+#else
   char *file_dirname = (file_basename == file_name ? NULL
 			: strndupa (file_name, file_basename - 1 - file_name));
+#endif
+  /* ANDROID_CHANGE_END */
   char *p;
   while ((p = strsep (&path, ":")) != NULL)
     {
@@ -201,17 +214,36 @@
 	  case ENOTDIR:
 	    continue;
 	  default:
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+            free(path);
+            free(file_dirname);
+#endif
+/* ANDROID_CHANGE_END */
 	    return -1;
 	  }
       if (validate (mod, fd, check, debuglink_crc))
 	{
 	  *debuginfo_file_name = fname;
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+          free(path);
+          free(file_dirname);
+#endif
+/* ANDROID_CHANGE_END */
 	  return fd;
 	}
       free (fname);
       close (fd);
     }
 
+/* ANDROID_CHANGE_BEGIN */
+#ifdef __BIONIC__
+  free(path);
+  free(file_dirname);
+#endif
+/* ANDROID_CHANGE_END */
+
   /* No dice.  */
   errno = 0;
   return -1;
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 */
+#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 -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>
 
-
 /* Backend handle.  */
 struct ebl
 {
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
 }
+/* ANDROID_CHANGE_BEGIN */
+#ifndef __APPLE__
 #define local_strong_alias(n1, n2) strong_alias (n1, n2)
 local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
+#endif
+/* ANDROID_CHANGE_END */
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"
 
-
 /* 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 /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
 
+/* ANDROID_CHANGE_BEGIN */
+/*
+ * elf.h may be directly included from a different project, and features.h does
+ * not exist on host Mac OS.
+ */
+#ifndef __APPLE__
 #include <features.h>
+#endif
+/* ANDROID_CHANGE_END */
 
 __BEGIN_DECLS
 
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 @@
     }
   }
 };
+/* ANDROID_CHANGE_BEGIN */
+#ifndef __APPLE__
 /* For now we only handle the case where the memory representation is the
    same as the file representation.  Should this change we have to define
    separate functions.  For now reuse them.  */
 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);
