1260684Skaiw/*- 2260684Skaiw * Copyright (c) 2009 Joseph Koshy 3260684Skaiw * All rights reserved. 4260684Skaiw * 5260684Skaiw * Redistribution and use in source and binary forms, with or without 6260684Skaiw * modification, are permitted provided that the following conditions 7260684Skaiw * are met: 8260684Skaiw * 1. Redistributions of source code must retain the above copyright 9260684Skaiw * notice, this list of conditions and the following disclaimer. 10260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright 11260684Skaiw * notice, this list of conditions and the following disclaimer in the 12260684Skaiw * documentation and/or other materials provided with the distribution. 13260684Skaiw * 14260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17260684Skaiw * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24260684Skaiw * SUCH DAMAGE. 25260684Skaiw * 26300311Semaste * $Id: _elftc.h 3446 2016-05-03 01:31:17Z emaste $ 27260684Skaiw */ 28260684Skaiw 29260684Skaiw/** 30300311Semaste ** Miscellaneous definitions needed by multiple components. 31260684Skaiw **/ 32260684Skaiw 33260684Skaiw#ifndef _ELFTC_H 34260684Skaiw#define _ELFTC_H 35260684Skaiw 36260684Skaiw#ifndef NULL 37260684Skaiw#define NULL ((void *) 0) 38260684Skaiw#endif 39260684Skaiw 40260684Skaiw#ifndef offsetof 41260684Skaiw#define offsetof(T, M) ((int) &((T*) 0) -> M) 42260684Skaiw#endif 43260684Skaiw 44260684Skaiw/* --QUEUE-MACROS-- [[ */ 45260684Skaiw 46260684Skaiw/* 47260684Skaiw * Supply macros missing from <sys/queue.h> 48260684Skaiw */ 49260684Skaiw 50260684Skaiw/* 51260684Skaiw * Copyright (c) 1991, 1993 52260684Skaiw * The Regents of the University of California. All rights reserved. 53260684Skaiw * 54260684Skaiw * Redistribution and use in source and binary forms, with or without 55260684Skaiw * modification, are permitted provided that the following conditions 56260684Skaiw * are met: 57260684Skaiw * 1. Redistributions of source code must retain the above copyright 58260684Skaiw * notice, this list of conditions and the following disclaimer. 59260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright 60260684Skaiw * notice, this list of conditions and the following disclaimer in the 61260684Skaiw * documentation and/or other materials provided with the distribution. 62260684Skaiw * 3. Neither the name of the University nor the names of its contributors 63260684Skaiw * may be used to endorse or promote products derived from this software 64260684Skaiw * without specific prior written permission. 65260684Skaiw * 66260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 67260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 68260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 69260684Skaiw * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 70260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 71260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 72260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 73260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 74260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 75260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 76260684Skaiw * SUCH DAMAGE. 77260684Skaiw */ 78260684Skaiw 79278904Semaste#ifndef LIST_FOREACH_SAFE 80278904Semaste#define LIST_FOREACH_SAFE(var, head, field, tvar) \ 81278904Semaste for ((var) = LIST_FIRST((head)); \ 82278904Semaste (var) && ((tvar) = LIST_NEXT((var), field), 1); \ 83278904Semaste (var) = (tvar)) 84278904Semaste#endif 85278904Semaste 86260684Skaiw#ifndef SLIST_FOREACH_SAFE 87278904Semaste#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 88278904Semaste for ((var) = SLIST_FIRST((head)); \ 89278904Semaste (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ 90260684Skaiw (var) = (tvar)) 91260684Skaiw#endif 92260684Skaiw 93260684Skaiw#ifndef STAILQ_CONCAT 94260684Skaiw#define STAILQ_CONCAT(head1, head2) do { \ 95260684Skaiw if (!STAILQ_EMPTY((head2))) { \ 96260684Skaiw *(head1)->stqh_last = (head2)->stqh_first; \ 97260684Skaiw (head1)->stqh_last = (head2)->stqh_last; \ 98260684Skaiw STAILQ_INIT((head2)); \ 99260684Skaiw } \ 100260684Skaiw} while (/*CONSTCOND*/0) 101260684Skaiw#endif 102260684Skaiw 103260684Skaiw#ifndef STAILQ_EMPTY 104260684Skaiw#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) 105260684Skaiw#endif 106260684Skaiw 107260684Skaiw#ifndef STAILQ_ENTRY 108260684Skaiw#define STAILQ_ENTRY(type) \ 109260684Skaiwstruct { \ 110260684Skaiw struct type *stqe_next; /* next element */ \ 111260684Skaiw} 112260684Skaiw#endif 113260684Skaiw 114260684Skaiw#ifndef STAILQ_FIRST 115260684Skaiw#define STAILQ_FIRST(head) ((head)->stqh_first) 116260684Skaiw#endif 117260684Skaiw 118260684Skaiw#ifndef STAILQ_HEAD 119260684Skaiw#define STAILQ_HEAD(name, type) \ 120260684Skaiwstruct name { \ 121260684Skaiw struct type *stqh_first; /* first element */ \ 122260684Skaiw struct type **stqh_last; /* addr of last next element */ \ 123260684Skaiw} 124260684Skaiw#endif 125260684Skaiw 126260684Skaiw#ifndef STAILQ_HEAD_INITIALIZER 127260684Skaiw#define STAILQ_HEAD_INITIALIZER(head) \ 128260684Skaiw { NULL, &(head).stqh_first } 129260684Skaiw#endif 130260684Skaiw 131260684Skaiw#ifndef STAILQ_FOREACH 132260684Skaiw#define STAILQ_FOREACH(var, head, field) \ 133260684Skaiw for ((var) = ((head)->stqh_first); \ 134260684Skaiw (var); \ 135260684Skaiw (var) = ((var)->field.stqe_next)) 136260684Skaiw#endif 137260684Skaiw 138260684Skaiw#ifndef STAILQ_FOREACH_SAFE 139260684Skaiw#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ 140260684Skaiw for ((var) = STAILQ_FIRST((head)); \ 141260684Skaiw (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ 142260684Skaiw (var) = (tvar)) 143260684Skaiw#endif 144260684Skaiw 145260684Skaiw#ifndef STAILQ_INIT 146260684Skaiw#define STAILQ_INIT(head) do { \ 147260684Skaiw (head)->stqh_first = NULL; \ 148260684Skaiw (head)->stqh_last = &(head)->stqh_first; \ 149260684Skaiw} while (/*CONSTCOND*/0) 150260684Skaiw#endif 151260684Skaiw 152260684Skaiw#ifndef STAILQ_INSERT_HEAD 153260684Skaiw#define STAILQ_INSERT_HEAD(head, elm, field) do { \ 154260684Skaiw if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ 155260684Skaiw (head)->stqh_last = &(elm)->field.stqe_next; \ 156260684Skaiw (head)->stqh_first = (elm); \ 157260684Skaiw} while (/*CONSTCOND*/0) 158260684Skaiw#endif 159260684Skaiw 160260684Skaiw#ifndef STAILQ_INSERT_TAIL 161260684Skaiw#define STAILQ_INSERT_TAIL(head, elm, field) do { \ 162260684Skaiw (elm)->field.stqe_next = NULL; \ 163260684Skaiw *(head)->stqh_last = (elm); \ 164260684Skaiw (head)->stqh_last = &(elm)->field.stqe_next; \ 165260684Skaiw} while (/*CONSTCOND*/0) 166260684Skaiw#endif 167260684Skaiw 168260684Skaiw#ifndef STAILQ_INSERT_AFTER 169260684Skaiw#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 170260684Skaiw if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ 171260684Skaiw (head)->stqh_last = &(elm)->field.stqe_next; \ 172260684Skaiw (listelm)->field.stqe_next = (elm); \ 173260684Skaiw} while (/*CONSTCOND*/0) 174260684Skaiw#endif 175260684Skaiw 176260684Skaiw#ifndef STAILQ_LAST 177260684Skaiw#define STAILQ_LAST(head, type, field) \ 178260684Skaiw (STAILQ_EMPTY((head)) ? \ 179260684Skaiw NULL : ((struct type *)(void *) \ 180260684Skaiw ((char *)((head)->stqh_last) - offsetof(struct type, field)))) 181260684Skaiw#endif 182260684Skaiw 183260684Skaiw#ifndef STAILQ_NEXT 184260684Skaiw#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) 185260684Skaiw#endif 186260684Skaiw 187260684Skaiw#ifndef STAILQ_REMOVE 188260684Skaiw#define STAILQ_REMOVE(head, elm, type, field) do { \ 189260684Skaiw if ((head)->stqh_first == (elm)) { \ 190260684Skaiw STAILQ_REMOVE_HEAD((head), field); \ 191260684Skaiw } else { \ 192260684Skaiw struct type *curelm = (head)->stqh_first; \ 193260684Skaiw while (curelm->field.stqe_next != (elm)) \ 194260684Skaiw curelm = curelm->field.stqe_next; \ 195260684Skaiw if ((curelm->field.stqe_next = \ 196260684Skaiw curelm->field.stqe_next->field.stqe_next) == NULL) \ 197260684Skaiw (head)->stqh_last = &(curelm)->field.stqe_next; \ 198260684Skaiw } \ 199260684Skaiw} while (/*CONSTCOND*/0) 200260684Skaiw#endif 201260684Skaiw 202260684Skaiw#ifndef STAILQ_REMOVE_HEAD 203260684Skaiw#define STAILQ_REMOVE_HEAD(head, field) do { \ 204260684Skaiw if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == \ 205260684Skaiw NULL) \ 206260684Skaiw (head)->stqh_last = &(head)->stqh_first; \ 207260684Skaiw} while (/*CONSTCOND*/0) 208260684Skaiw#endif 209260684Skaiw 210260684Skaiw/* 211260684Skaiw * The STAILQ_SORT macro is adapted from Simon Tatham's O(n*log(n)) 212260684Skaiw * mergesort algorithm. 213260684Skaiw */ 214260684Skaiw#ifndef STAILQ_SORT 215260684Skaiw#define STAILQ_SORT(head, type, field, cmp) do { \ 216260684Skaiw STAILQ_HEAD(, type) _la, _lb; \ 217260684Skaiw struct type *_p, *_q, *_e; \ 218260684Skaiw int _i, _sz, _nmerges, _psz, _qsz; \ 219260684Skaiw \ 220260684Skaiw _sz = 1; \ 221260684Skaiw do { \ 222260684Skaiw _nmerges = 0; \ 223260684Skaiw STAILQ_INIT(&_lb); \ 224260684Skaiw while (!STAILQ_EMPTY((head))) { \ 225260684Skaiw _nmerges++; \ 226260684Skaiw STAILQ_INIT(&_la); \ 227260684Skaiw _psz = 0; \ 228260684Skaiw for (_i = 0; _i < _sz && !STAILQ_EMPTY((head)); \ 229260684Skaiw _i++) { \ 230260684Skaiw _e = STAILQ_FIRST((head)); \ 231260684Skaiw if (_e == NULL) \ 232260684Skaiw break; \ 233260684Skaiw _psz++; \ 234260684Skaiw STAILQ_REMOVE_HEAD((head), field); \ 235260684Skaiw STAILQ_INSERT_TAIL(&_la, _e, field); \ 236260684Skaiw } \ 237260684Skaiw _p = STAILQ_FIRST(&_la); \ 238260684Skaiw _qsz = _sz; \ 239260684Skaiw _q = STAILQ_FIRST((head)); \ 240260684Skaiw while (_psz > 0 || (_qsz > 0 && _q != NULL)) { \ 241260684Skaiw if (_psz == 0) { \ 242260684Skaiw _e = _q; \ 243260684Skaiw _q = STAILQ_NEXT(_q, field); \ 244260684Skaiw STAILQ_REMOVE_HEAD((head), \ 245260684Skaiw field); \ 246260684Skaiw _qsz--; \ 247260684Skaiw } else if (_qsz == 0 || _q == NULL) { \ 248260684Skaiw _e = _p; \ 249260684Skaiw _p = STAILQ_NEXT(_p, field); \ 250260684Skaiw STAILQ_REMOVE_HEAD(&_la, field);\ 251260684Skaiw _psz--; \ 252260684Skaiw } else if (cmp(_p, _q) <= 0) { \ 253260684Skaiw _e = _p; \ 254260684Skaiw _p = STAILQ_NEXT(_p, field); \ 255260684Skaiw STAILQ_REMOVE_HEAD(&_la, field);\ 256260684Skaiw _psz--; \ 257260684Skaiw } else { \ 258260684Skaiw _e = _q; \ 259260684Skaiw _q = STAILQ_NEXT(_q, field); \ 260260684Skaiw STAILQ_REMOVE_HEAD((head), \ 261260684Skaiw field); \ 262260684Skaiw _qsz--; \ 263260684Skaiw } \ 264260684Skaiw STAILQ_INSERT_TAIL(&_lb, _e, field); \ 265260684Skaiw } \ 266260684Skaiw } \ 267260684Skaiw (head)->stqh_first = _lb.stqh_first; \ 268260684Skaiw (head)->stqh_last = _lb.stqh_last; \ 269260684Skaiw _sz *= 2; \ 270260684Skaiw } while (_nmerges > 1); \ 271260684Skaiw} while (/*CONSTCOND*/0) 272260684Skaiw#endif 273260684Skaiw 274260684Skaiw#ifndef TAILQ_FOREACH_SAFE 275260684Skaiw#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 276260684Skaiw for ((var) = TAILQ_FIRST((head)); \ 277260684Skaiw (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ 278260684Skaiw (var) = (tvar)) 279260684Skaiw#endif 280260684Skaiw 281260684Skaiw/* ]] --QUEUE-MACROS-- */ 282260684Skaiw 283260684Skaiw/* 284260684Skaiw * VCS Ids. 285260684Skaiw */ 286260684Skaiw 287260684Skaiw#ifndef ELFTC_VCSID 288260684Skaiw 289260684Skaiw#if defined(__DragonFly__) 290260684Skaiw#define ELFTC_VCSID(ID) __RCSID(ID) 291260684Skaiw#endif 292260684Skaiw 293260684Skaiw#if defined(__FreeBSD__) 294260684Skaiw#define ELFTC_VCSID(ID) __FBSDID(ID) 295260684Skaiw#endif 296260684Skaiw 297280932Semaste#if defined(__APPLE__) || defined(__GLIBC__) || defined(__GNU__) || \ 298280932Semaste defined(__linux__) 299260684Skaiw#if defined(__GNUC__) 300260684Skaiw#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") 301260684Skaiw#else 302260684Skaiw#define ELFTC_VCSID(ID) /**/ 303260684Skaiw#endif 304260684Skaiw#endif 305260684Skaiw 306260684Skaiw#if defined(__minix) 307260684Skaiw#if defined(__GNUC__) 308260684Skaiw#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") 309260684Skaiw#else 310260684Skaiw#define ELFTC_VCSID(ID) /**/ 311260684Skaiw#endif /* __GNU__ */ 312260684Skaiw#endif 313260684Skaiw 314260684Skaiw#if defined(__NetBSD__) 315260684Skaiw#define ELFTC_VCSID(ID) __RCSID(ID) 316260684Skaiw#endif 317260684Skaiw 318260684Skaiw#if defined(__OpenBSD__) 319260684Skaiw#if defined(__GNUC__) 320260684Skaiw#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") 321260684Skaiw#else 322260684Skaiw#define ELFTC_VCSID(ID) /**/ 323260684Skaiw#endif /* __GNUC__ */ 324260684Skaiw#endif 325260684Skaiw 326260684Skaiw#endif /* ELFTC_VCSID */ 327260684Skaiw 328260684Skaiw/* 329260684Skaiw * Provide an equivalent for getprogname(3). 330260684Skaiw */ 331260684Skaiw 332260684Skaiw#ifndef ELFTC_GETPROGNAME 333260684Skaiw 334280932Semaste#if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ 335280932Semaste defined(__minix) || defined(__NetBSD__) 336260684Skaiw 337260684Skaiw#include <stdlib.h> 338260684Skaiw 339260684Skaiw#define ELFTC_GETPROGNAME() getprogname() 340260684Skaiw 341260684Skaiw#endif /* __DragonFly__ || __FreeBSD__ || __minix || __NetBSD__ */ 342260684Skaiw 343260684Skaiw 344280932Semaste#if defined(__GLIBC__) || defined(__linux__) 345283616Semaste#ifndef _GNU_SOURCE 346260684Skaiw/* 347260684Skaiw * GLIBC based systems have a global 'char *' pointer referencing 348260684Skaiw * the executable's name. 349260684Skaiw */ 350260684Skaiwextern const char *program_invocation_short_name; 351283616Semaste#endif /* !_GNU_SOURCE */ 352260684Skaiw 353260684Skaiw#define ELFTC_GETPROGNAME() program_invocation_short_name 354260684Skaiw 355280932Semaste#endif /* __GLIBC__ || __linux__ */ 356260684Skaiw 357260684Skaiw 358260684Skaiw#if defined(__OpenBSD__) 359260684Skaiw 360260684Skaiwextern const char *__progname; 361260684Skaiw 362260684Skaiw#define ELFTC_GETPROGNAME() __progname 363260684Skaiw 364260684Skaiw#endif /* __OpenBSD__ */ 365260684Skaiw 366260684Skaiw#endif /* ELFTC_GETPROGNAME */ 367260684Skaiw 368260684Skaiw 369260684Skaiw/** 370260684Skaiw ** Per-OS configuration. 371260684Skaiw **/ 372260684Skaiw 373280932Semaste#if defined(__APPLE__) 374280932Semaste 375289071Semaste#include <libkern/OSByteOrder.h> 376289071Semaste#define htobe32(x) OSSwapHostToBigInt32(x) 377367466Sdim#define htole32(x) OSSwapHostToLittleInt32(x) 378367466Sdim#ifndef roundup2 379280932Semaste#define roundup2 roundup 380367466Sdim#endif 381280932Semaste 382367466Sdim#define ELFTC_BYTE_ORDER __DARWIN_BYTE_ORDER 383367466Sdim#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN 384367466Sdim#define ELFTC_BYTE_ORDER_BIG_ENDIAN __DARWIN_BIG_ENDIAN 385280932Semaste 386280932Semaste#define ELFTC_HAVE_MMAP 1 387280932Semaste#define ELFTC_HAVE_STRMODE 1 388280932Semaste 389289071Semaste#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 390280932Semaste#endif /* __APPLE__ */ 391280932Semaste 392280932Semaste 393260684Skaiw#if defined(__DragonFly__) 394260684Skaiw 395260684Skaiw#include <osreldate.h> 396260684Skaiw#include <sys/endian.h> 397260684Skaiw 398260684Skaiw#define ELFTC_BYTE_ORDER _BYTE_ORDER 399260684Skaiw#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN 400260684Skaiw#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN 401260684Skaiw 402260684Skaiw#define ELFTC_HAVE_MMAP 1 403260684Skaiw 404260684Skaiw#endif 405260684Skaiw 406280932Semaste#if defined(__GLIBC__) || defined(__linux__) 407260684Skaiw 408260684Skaiw#include <endian.h> 409260684Skaiw 410260684Skaiw#define ELFTC_BYTE_ORDER __BYTE_ORDER 411260684Skaiw#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN __LITTLE_ENDIAN 412260684Skaiw#define ELFTC_BYTE_ORDER_BIG_ENDIAN __BIG_ENDIAN 413260684Skaiw 414260684Skaiw#define ELFTC_HAVE_MMAP 1 415260684Skaiw 416260684Skaiw/* 417260684Skaiw * Debian GNU/Linux and Debian GNU/kFreeBSD do not have strmode(3). 418260684Skaiw */ 419260684Skaiw#define ELFTC_HAVE_STRMODE 0 420260684Skaiw 421260684Skaiw/* Whether we need to supply {be,le}32dec. */ 422260684Skaiw#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 423260684Skaiw 424367466Sdim#ifndef roundup2 425260684Skaiw#define roundup2 roundup 426367466Sdim#endif 427260684Skaiw 428280932Semaste#endif /* __GLIBC__ || __linux__ */ 429260684Skaiw 430260684Skaiw 431260684Skaiw#if defined(__FreeBSD__) 432260684Skaiw 433260684Skaiw#include <osreldate.h> 434260684Skaiw#include <sys/endian.h> 435260684Skaiw 436260684Skaiw#define ELFTC_BYTE_ORDER _BYTE_ORDER 437260684Skaiw#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN 438260684Skaiw#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN 439260684Skaiw 440260684Skaiw#define ELFTC_HAVE_MMAP 1 441260684Skaiw#define ELFTC_HAVE_STRMODE 1 442260684Skaiw#if __FreeBSD_version <= 900000 443260684Skaiw#define ELFTC_BROKEN_YY_NO_INPUT 1 444260684Skaiw#endif 445260684Skaiw#endif /* __FreeBSD__ */ 446260684Skaiw 447260684Skaiw 448260684Skaiw#if defined(__minix) 449260684Skaiw#define ELFTC_HAVE_MMAP 0 450260684Skaiw#endif /* __minix */ 451260684Skaiw 452260684Skaiw 453260684Skaiw#if defined(__NetBSD__) 454260684Skaiw 455260684Skaiw#include <sys/param.h> 456260684Skaiw#include <sys/endian.h> 457260684Skaiw 458260684Skaiw#define ELFTC_BYTE_ORDER _BYTE_ORDER 459260684Skaiw#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN 460260684Skaiw#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN 461260684Skaiw 462260684Skaiw#define ELFTC_HAVE_MMAP 1 463260684Skaiw#define ELFTC_HAVE_STRMODE 1 464260684Skaiw#if __NetBSD_Version__ <= 599002100 465260684Skaiw/* from src/doc/CHANGES: flex(1): Import flex-2.5.35 [christos 20091025] */ 466260684Skaiw/* and 5.99.21 was from Wed Oct 21 21:28:36 2009 UTC */ 467260684Skaiw# define ELFTC_BROKEN_YY_NO_INPUT 1 468260684Skaiw#endif 469260684Skaiw#endif /* __NetBSD __ */ 470260684Skaiw 471260684Skaiw 472260684Skaiw#if defined(__OpenBSD__) 473260684Skaiw 474260684Skaiw#include <sys/param.h> 475260684Skaiw#include <sys/endian.h> 476260684Skaiw 477260684Skaiw#define ELFTC_BYTE_ORDER _BYTE_ORDER 478260684Skaiw#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN 479260684Skaiw#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN 480260684Skaiw 481260684Skaiw#define ELFTC_HAVE_MMAP 1 482260684Skaiw#define ELFTC_HAVE_STRMODE 1 483260684Skaiw 484260684Skaiw#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 485260684Skaiw#define roundup2 roundup 486260684Skaiw 487260684Skaiw#endif /* __OpenBSD__ */ 488260684Skaiw 489260684Skaiw#endif /* _ELFTC_H */ 490