diff options
author | Christos Zoulas <christos@zoulas.com> | 2016-10-04 21:43:10 +0000 |
---|---|---|
committer | Christos Zoulas <christos@zoulas.com> | 2016-10-04 21:43:10 +0000 |
commit | c52f5df893e0cef025debbb2deb8c54c4980a167 (patch) | |
tree | e1fce9ec94ce53f70bf26834625bbae778f0678c | |
parent | 734f5c0302e05eae45fee36a8babbf172ab00b49 (diff) | |
download | file-git-c52f5df893e0cef025debbb2deb8c54c4980a167.tar.gz |
Extend build-id reporting to 8-byte IDs that lld can generate (Ed Maste)
-rw-r--r-- | src/readelf.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/readelf.c b/src/readelf.c index 39598f7a..90dae392 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readelf.c,v 1.127 2015/11/18 12:29:29 christos Exp $") +FILE_RCSID("@(#)$File: readelf.c,v 1.128 2016/10/04 21:43:10 christos Exp $") #endif #ifdef BUILTIN_ELF @@ -509,12 +509,26 @@ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, size_t noff, size_t doff, int *flags) { if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 && - type == NT_GNU_BUILD_ID && (descsz == 16 || descsz == 20)) { + type == NT_GNU_BUILD_ID && (descsz >= 4 || descsz <= 20)) { uint8_t desc[20]; + const char *btype; uint32_t i; *flags |= FLAGS_DID_BUILD_ID; - if (file_printf(ms, ", BuildID[%s]=", descsz == 16 ? "md5/uuid" : - "sha1") == -1) + switch (descsz) { + case 8: + btype = "xxHash"; + break; + case 16: + btype = "md5/uuid"; + break; + case 20: + btype = "sha1"; + break; + default: + btype = "unknown"; + break; + } + if (file_printf(ms, ", BuildID[%s]=", btype) == -1) return 1; (void)memcpy(desc, &nbuf[doff], descsz); for (i = 0; i < descsz; i++) |