summaryrefslogtreecommitdiff
path: root/src/readelf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/readelf.c')
-rw-r--r--src/readelf.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/readelf.c b/src/readelf.c
index 5f425c974e762..3df0836d7029e 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.138 2017/08/27 07:55:02 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.141 2018/04/12 16:50:52 christos Exp $")
#endif
#ifdef BUILTIN_ELF
@@ -310,18 +310,19 @@ private const char os_style_names[][8] = {
"NetBSD",
};
-#define FLAGS_CORE_STYLE 0x003
+#define FLAGS_CORE_STYLE 0x0003
-#define FLAGS_DID_CORE 0x004
-#define FLAGS_DID_OS_NOTE 0x008
-#define FLAGS_DID_BUILD_ID 0x010
-#define FLAGS_DID_CORE_STYLE 0x020
-#define FLAGS_DID_NETBSD_PAX 0x040
-#define FLAGS_DID_NETBSD_MARCH 0x080
-#define FLAGS_DID_NETBSD_CMODEL 0x100
-#define FLAGS_DID_NETBSD_UNKNOWN 0x200
-#define FLAGS_IS_CORE 0x400
-#define FLAGS_DID_AUXV 0x800
+#define FLAGS_DID_CORE 0x0004
+#define FLAGS_DID_OS_NOTE 0x0008
+#define FLAGS_DID_BUILD_ID 0x0010
+#define FLAGS_DID_CORE_STYLE 0x0020
+#define FLAGS_DID_NETBSD_PAX 0x0040
+#define FLAGS_DID_NETBSD_MARCH 0x0080
+#define FLAGS_DID_NETBSD_CMODEL 0x0100
+#define FLAGS_DID_NETBSD_EMULATION 0x0200
+#define FLAGS_DID_NETBSD_UNKNOWN 0x0400
+#define FLAGS_IS_CORE 0x0800
+#define FLAGS_DID_AUXV 0x1000
private int
dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
@@ -726,11 +727,11 @@ do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
"gid=%u, nlwps=%u, lwp=%u (signal %u/code %u)",
file_printable(sbuf, sizeof(sbuf),
CAST(char *, pi.cpi_name)),
- elf_getu32(swap, pi.cpi_pid),
+ elf_getu32(swap, (uint32_t)pi.cpi_pid),
elf_getu32(swap, pi.cpi_euid),
elf_getu32(swap, pi.cpi_egid),
elf_getu32(swap, pi.cpi_nlwps),
- elf_getu32(swap, pi.cpi_siglwp),
+ elf_getu32(swap, (uint32_t)pi.cpi_siglwp),
elf_getu32(swap, pi.cpi_signo),
elf_getu32(swap, pi.cpi_sigcode)) == -1)
return 1;
@@ -908,6 +909,7 @@ get_string_on_virtaddr(struct magic_set *ms,
}
+/*ARGSUSED*/
private int
do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
int swap, uint32_t namesz __attribute__((__unused__)),
@@ -1134,6 +1136,14 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
(int)descsz, (const char *)&nbuf[doff]) == -1)
return offset;
break;
+ case NT_NETBSD_EMULATION:
+ if (*flags & FLAGS_DID_NETBSD_EMULATION)
+ return offset;
+ *flags |= FLAGS_DID_NETBSD_EMULATION;
+ if (file_printf(ms, ", emulation: %.*s",
+ (int)descsz, (const char *)&nbuf[doff]) == -1)
+ return offset;
+ break;
default:
if (*flags & FLAGS_DID_NETBSD_UNKNOWN)
return offset;
@@ -1570,9 +1580,11 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
protected int
-file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
- size_t nbytes)
+file_tryelf(struct magic_set *ms, const struct buffer *b)
{
+ int fd = b->fd;
+ const unsigned char *buf = b->fbuf;
+ size_t nbytes = b->flen;
union {
int32_t l;
char c[sizeof (int32_t)];