diff options
author | Igor Kudrin <ikudrin@accesssoftek.com> | 2016-11-21 09:59:37 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2016-11-21 09:59:37 -0800 |
commit | b32e1756d9932eebcca5f276290841a859ef2d6d (patch) | |
tree | 1e8860d01496f94f1eccc91caa4b1b164d897d10 /gold/layout.cc | |
parent | b6ddcd85e3c0ae1f12af60efd6d1b97ac4bfa771 (diff) | |
download | binutils-b32e1756d9932eebcca5f276290841a859ef2d6d.zip binutils-b32e1756d9932eebcca5f276290841a859ef2d6d.tar.gz binutils-b32e1756d9932eebcca5f276290841a859ef2d6d.tar.bz2 |
Add --build-id=uuid support for MinGW32.
2016-11-21 Igor Kudrin <ikudrin@accesssoftek.com>
gold/
* layout.cc: Include windows.h and rpcdce.h (for MinGW32).
(Layout::create_build_id): Generate uuid using UuidCreate().
Diffstat (limited to 'gold/layout.cc')
-rw-r--r-- | gold/layout.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gold/layout.cc b/gold/layout.cc index d14f27b..c9ea9eb 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -34,6 +34,10 @@ #include "libiberty.h" #include "md5.h" #include "sha1.h" +#ifdef __MINGW32__ +#include <windows.h> +#include <rpcdce.h> +#endif #include "parameters.h" #include "options.h" @@ -3067,6 +3071,7 @@ Layout::create_build_id() descsz = 160 / 8; else if (strcmp(style, "uuid") == 0) { +#ifndef __MINGW32__ const size_t uuidsz = 128 / 8; char buffer[uuidsz]; @@ -3089,6 +3094,26 @@ Layout::create_build_id() desc.assign(buffer, uuidsz); descsz = uuidsz; +#else // __MINGW32__ + UUID uuid; + typedef RPC_STATUS (RPC_ENTRY *UuidCreateFn)(UUID *Uuid); + + HMODULE rpc_library = LoadLibrary("rpcrt4.dll"); + if (!rpc_library) + gold_error(_("--build-id=uuid failed: could not load rpcrt4.dll")); + else + { + UuidCreateFn uuid_create = reinterpret_cast<UuidCreateFn>( + GetProcAddress(rpc_library, "UuidCreate")); + if (!uuid_create) + gold_error(_("--build-id=uuid failed: could not find UuidCreate")); + else if (uuid_create(&uuid) != RPC_S_OK) + gold_error(_("__build_id=uuid failed: call UuidCreate() failed")); + FreeLibrary(rpc_library); + } + desc.assign(reinterpret_cast<const char *>(&uuid), sizeof(UUID)); + descsz = sizeof(UUID); +#endif // __MINGW32__ } else if (strncmp(style, "0x", 2) == 0) { |