1 /* 2 * This library is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU Lesser General Public 4 * License as published by the Free Software Foundation; 5 * version 2.1 of the License. 6 * 7 * This library is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 10 * Lesser General Public License for more details. 11 * 12 * You should have received a copy of the GNU Lesser General Public 13 * License along with this library; If not, see <http://www.gnu.org/licenses/>. 14 */ 15 #ifndef __LIBELF_PRIVATE_H__ 16 #define __LIBELF_PRIVATE_H__ 17 18 #ifdef __XEN__ 19 20 #include <xen/lib.h> 21 #include <xen/libelf.h> 22 #include <xen/softirq.h> 23 #include <asm/byteorder.h> 24 #include <public/elfnote.h> 25 26 /* we would like to use elf->log_callback but we can't because 27 * there is no vprintk in Xen */ 28 #define elf_msg(elf, fmt, args ... ) \ 29 if (elf->verbose) printk(fmt, ## args ) 30 #define elf_err(elf, fmt, args ... ) \ 31 printk(fmt, ## args ) 32 33 #define strtoull(str, end, base) simple_strtoull(str, end, base) 34 #define bswap_16(x) swab16(x) 35 #define bswap_32(x) swab32(x) 36 #define bswap_64(x) swab64(x) 37 38 #else /* !__XEN__ */ 39 40 #include <stdarg.h> 41 #include <stdio.h> 42 #include <stdlib.h> 43 #include <string.h> 44 #include <stddef.h> 45 #include <inttypes.h> 46 #include <limits.h> 47 #ifdef __sun__ 48 #include <sys/byteorder.h> 49 #define bswap_16(x) BSWAP_16(x) 50 #define bswap_32(x) BSWAP_32(x) 51 #define bswap_64(x) BSWAP_64(x) 52 #elif defined(__NetBSD__) 53 #include <sys/bswap.h> 54 #define bswap_16(x) bswap16(x) 55 #define bswap_32(x) bswap32(x) 56 #define bswap_64(x) bswap64(x) 57 #elif defined(__OpenBSD__) 58 #include <machine/endian.h> 59 #define bswap_16(x) swap16(x) 60 #define bswap_32(x) swap32(x) 61 #define bswap_64(x) swap64(x) 62 #elif defined(__FreeBSD__) 63 #include <sys/endian.h> 64 #define bswap_16(x) bswap16(x) 65 #define bswap_32(x) bswap32(x) 66 #define bswap_64(x) bswap64(x) 67 #elif defined(__linux__) || defined(__Linux__) || defined(__MINIOS__) 68 #include <byteswap.h> 69 #else 70 #error Unsupported OS 71 #endif 72 #include <xen/elfnote.h> 73 #include <xen/libelf/libelf.h> 74 75 #ifndef FUZZ_NO_LIBXC 76 #include "xenctrl.h" 77 #include "xc_private.h" 78 #endif 79 80 #define elf_msg(elf, fmt, args ... ) \ 81 elf_call_log_callback(elf, 0, fmt , ## args ); 82 #define elf_err(elf, fmt, args ... ) \ 83 elf_call_log_callback(elf, 1, fmt , ## args ); 84 85 void elf_call_log_callback(struct elf_binary*, bool iserr, const char *fmt,...); 86 87 #define safe_strcpy(d,s) \ 88 do { strncpy((d),(s),sizeof((d))-1); \ 89 (d)[sizeof((d))-1] = '\0'; \ 90 } while (0) 91 92 #endif 93 94 #undef memcpy 95 #undef memset 96 #undef memmove 97 #undef strcpy 98 99 #define memcpy MISTAKE_unspecified_memcpy 100 #define memset MISTAKE_unspecified_memset 101 #define memmove MISTAKE_unspecified_memmove 102 #define strcpy MISTAKE_unspecified_strcpy 103 /* This prevents libelf from using these undecorated versions 104 * of memcpy, memset, memmove and strcpy. Every call site 105 * must either use elf_mem*_unchecked, or elf_mem*_safe. */ 106 107 #endif /* __LIBELF_PRIVATE_H__ */ 108 109 /* 110 * Local variables: 111 * mode: C 112 * c-file-style: "BSD" 113 * c-basic-offset: 4 114 * tab-width: 4 115 * indent-tabs-mode: nil 116 * End: 117 */ 118