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