Enable -Wold-style-cast warnings for linker

  And fix old style casts.

Change-Id: I37e7a3e3fd852528ea76f02d967c7bd8cd5b06c9
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 0b0afc3..df6a4e2 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -71,6 +71,10 @@
  *   and NOEXEC
  */
 
+// Override macros to use C++ style casts
+#undef ELF_ST_TYPE
+#define ELF_ST_TYPE(x) (static_cast<uint32_t>(x) & 0xf)
+
 #if defined(__LP64__)
 #define SEARCH_NAME(x) x
 #else
@@ -364,12 +368,12 @@
 //
 // This function is exposed via dlfcn.cpp and libdl.so.
 _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) {
-  unsigned addr = (unsigned)pc;
+  uintptr_t addr = reinterpret_cast<uintptr_t>(pc);
 
   for (soinfo* si = solist; si != 0; si = si->next) {
     if ((addr >= si->base) && (addr < (si->base + si->size))) {
         *pcount = si->ARM_exidx_count;
-        return (_Unwind_Ptr)si->ARM_exidx;
+        return reinterpret_cast<_Unwind_Ptr>(si->ARM_exidx);
     }
   }
   *pcount = 0;
@@ -2090,7 +2094,7 @@
         break;
 
       case DT_INIT_ARRAYSZ:
-        init_array_count_ = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr));
+        init_array_count_ = static_cast<uint32_t>(d->d_un.d_val) / sizeof(ElfW(Addr));
         break;
 
       case DT_FINI_ARRAY:
@@ -2099,7 +2103,7 @@
         break;
 
       case DT_FINI_ARRAYSZ:
-        fini_array_count_ = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr));
+        fini_array_count_ = static_cast<uint32_t>(d->d_un.d_val) / sizeof(ElfW(Addr));
         break;
 
       case DT_PREINIT_ARRAY:
@@ -2108,7 +2112,7 @@
         break;
 
       case DT_PREINIT_ARRAYSZ:
-        preinit_array_count_ = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr));
+        preinit_array_count_ = static_cast<uint32_t>(d->d_un.d_val) / sizeof(ElfW(Addr));
         break;
 
       case DT_TEXTREL: