/* * Copyright (C) 2014, Red Hat Inc, Arnaldo Carvalho de Melo * * Released under the GPL v2. (and only v2, not any later version) */ #include "array.h" #include #include #include #include #include void fdarray__init(struct fdarray *fda, int nr_autogrow) { fda->entries = NULL; fda->priv = NULL; fda->nr = fda->nr_alloc = 0; fda->nr_autogrow = nr_autogrow; } int fdarray__grow(struct fdarray *fda, int nr) { void *priv; int nr_alloc = fda->nr_alloc + nr; size_t psize = sizeof(fda->priv[0]) * nr_alloc; size_t size = sizeof(struct pollfd) * nr_alloc; struct pollfd *entries = realloc(fda->entries, size); if (entries == NULL) return -ENOMEM; priv = realloc(fda->priv, psize); if (priv == NULL) { free(entries); return -ENOMEM; } fda->nr_alloc = nr_alloc; fda->entries = entries; fda->priv = priv; return 0; } struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow) { struct fdarray *fda = calloc(1, sizeof(*fda)); if (fda != NULL) { if (fdarray__grow(fda, nr_alloc)) { free(fda); fda = NULL; } else { fda->nr_autogrow = nr_autogrow; } } return fda; } void fdarray__exit(struct fdarray *fda) { free(fda->entries); free(fda->priv); fdarray__init(fda, 0); } void fdarray__delete(struct fdarray *fda) { fdarray__exit(fda); free(fda); } int fdarray__add(struct fdarray *fda, int fd, short revents) { int pos = fda->nr; if (fda->nr == fda->nr_alloc && fdarray__grow(fda, fda->nr_autogrow) < 0) return -ENOMEM; fda->entries[fda->nr].fd = fd; fda->entries[fda->nr].events = revents; fda->nr++; return pos; } int fdarray__filter(struct fdarray *fda, short revents, void (*entry_destructor)(struct fdarray *fda, int fd, void *arg), void *arg) { int fd, nr = 0; if (fda->nr == 0) return 0; for (fd = 0; fd < fda->nr; ++fd) { if (fda->entries[fd].revents & revents) { if (entry_destructor) entry_destructor(fda, fd, arg); continue; } if (fd != nr) { fda->entries[nr] = fda->entries[fd]; fda->priv[nr] = fda->priv[fd]; } ++nr; } return fda->nr = nr; } int fdarray__poll(struct fdarray *fda, int timeout) { return poll(fda->entries, fda->nr, timeout); } int fdarray__fprintf(struct fdarray *fda, FILE *fp) { int fd, printed = fprintf(fp, "%d [ ", fda->nr); for (fd = 0; fd < fda->nr; ++fd) printed += fprintf(fp, "%s%d", fd ? ", " : "", fda->entries[fd].fd); return printed + fprintf(fp, " ]"); } g msg
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2017-01-18 14:29:21 +0100
committerIngo Molnar <mingo@kernel.org>2017-01-19 08:39:44 +0100
commitb5b46c4740aed1538544f0fa849c5b76c7823469 (patch)
tree125e7aced4835bad6f6a0c0d02d012f333caf922 /tools/perf/arch/x86/tests/insn-x86-dat-32.c
parentfa19a769f82fb9a5ca000b83cacd13fcaeda51ac (diff)
objtool: Fix IRET's opcode
The IRET opcode is 0xcf according to the Intel manual and also to objdump of my vmlinux: 1ea8: 48 cf iretq Fix the opcode in arch_decode_instruction(). The previous value (0xc5) seems to correspond to LDS. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20170118132921.19319-1-jslaby@suse.cz Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/arch/x86/tests/insn-x86-dat-32.c')