win: Remove GetModuleFromAddress, deduplicate __ImageBase code.

8 different places were using __ImageBase to get the current module,
create a CURRENT_MODULE() macro that all these places can use.

All but one use of base::GetModuleFromAddress() were used to get
the module of the current file; change all these to use
CURRENT_MODULE() instead.

The (somewhat lame) motivation is that GetModuleFromAddress() took
a void* but was always called with function pointers, and converting
function pointers to void* has undefined behavior. POSIX (dlsym())
requires that conversions between void* and function pointers work
in practice, but on posix an explicit reinterpret_cast is required, and it
seems nice to have compilers behave identically between platforms
here (i.e. we should turn on clang/win's -Wmicrosoft-cast).

In the one place where GetModuleFromAddress() didn't refer to the
current TU's module, add an explicit reinterpret_cast.

BUG=550065
TBR=asvitkine,wez

Review URL: https://codereview.chromium.org/1852143002

Cr-Commit-Position: refs/heads/master@{#384841}


CrOS-Libchrome-Original-Commit: d62f5447b35d5d8d1b3521a05b7ed312ab31dbd1
5 files changed
tree: bc938d21350d1a26df088e7e50e2dfbf1b5dafc8
  1. base/
  2. build/
  3. components/
  4. dbus/
  5. device/
  6. ipc/
  7. mojo/
  8. testing/
  9. third_party/
  10. ui/