mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
d0eb2625bf
bdfio.c is defining bfd_get_current_time which is returning a time_t. This type is defined in time.h and thus, must be included in bfd main header to avoid undefined type when include bfd.h. Note that most of the time, <time.h> is pulled by <sys/stat.h> already included in bfd.h. That's why it went unnoticed.
162 lines
5.2 KiB
C
162 lines
5.2 KiB
C
/* Main header file for the bfd library -- portable access to object files.
|
|
|
|
Copyright (C) 1990-2024 Free Software Foundation, Inc.
|
|
|
|
Contributed by Cygnus Support.
|
|
|
|
This file is part of BFD, the Binary File Descriptor library.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
|
|
#ifndef __BFD_H_SEEN__
|
|
#define __BFD_H_SEEN__
|
|
|
|
/* PR 14072: Ensure that config.h is included first. */
|
|
#if !defined PACKAGE && !defined PACKAGE_VERSION
|
|
#error config.h must be included before this header
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "ansidecl.h"
|
|
#include "symcat.h"
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <time.h>
|
|
#include "diagnostics.h"
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <sys/stat.h>
|
|
|
|
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
|
#ifndef SABER
|
|
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
|
The problem is, "32_" is not a valid preprocessing token, and we don't
|
|
want extra underscores (e.g., "nlm_32_"). The XCONCAT2 macro will
|
|
cause the inner CONCAT2 macros to be evaluated first, producing
|
|
still-valid pp-tokens. Then the final concatenation can be done. */
|
|
#undef CONCAT4
|
|
#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
|
|
#endif
|
|
#endif
|
|
|
|
/* This is a utility macro to handle the situation where the code
|
|
wants to place a constant string into the code, followed by a
|
|
comma and then the length of the string. Doing this by hand
|
|
is error prone, so using this macro is safer. */
|
|
#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
|
|
|
|
#define BFD_SUPPORTS_PLUGINS @supports_plugins@
|
|
|
|
/* The word size used by BFD on the host. This may be 64 with a 32
|
|
bit target if the host is 64 bit, or if other 64 bit targets have
|
|
been selected with --enable-targets, or if --enable-64-bit-bfd. */
|
|
#define BFD_ARCH_SIZE @wordsize@
|
|
|
|
/* The word size of the default bfd target. */
|
|
#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
|
|
|
|
#include <inttypes.h>
|
|
|
|
#if BFD_ARCH_SIZE >= 64
|
|
#define BFD64
|
|
#endif
|
|
|
|
/* Boolean type used in bfd.
|
|
General rule: Functions which are bfd_boolean return TRUE on
|
|
success and FALSE on failure (unless they're a predicate). */
|
|
|
|
#ifdef POISON_BFD_BOOLEAN
|
|
# pragma GCC poison bfd_boolean
|
|
#else
|
|
# define bfd_boolean bool
|
|
# undef FALSE
|
|
# undef TRUE
|
|
# define FALSE 0
|
|
# define TRUE 1
|
|
#endif
|
|
|
|
/* Silence "applying zero offset to null pointer" UBSAN warnings. */
|
|
#define PTR_ADD(P,A) ((A) != 0 ? (P) + (A) : (P))
|
|
/* Also prevent non-zero offsets from being applied to a null pointer. */
|
|
#define NPTR_ADD(P,A) ((P) != NULL ? (P) + (A) : (P))
|
|
|
|
#ifdef BFD64
|
|
|
|
/* Represent a target address. Also used as a generic unsigned type
|
|
which is guaranteed to be big enough to hold any arithmetic types
|
|
we need to deal with. */
|
|
typedef uint64_t bfd_vma;
|
|
|
|
/* A generic signed type which is guaranteed to be big enough to hold any
|
|
arithmetic types we need to deal with. Can be assumed to be compatible
|
|
with bfd_vma in the same way that signed and unsigned ints are compatible
|
|
(as parameters, in assignment, etc). */
|
|
typedef int64_t bfd_signed_vma;
|
|
|
|
typedef uint64_t bfd_size_type;
|
|
typedef uint64_t symvalue;
|
|
|
|
#else /* not BFD64 */
|
|
|
|
typedef uint32_t bfd_vma;
|
|
typedef int32_t bfd_signed_vma;
|
|
typedef uint32_t bfd_size_type;
|
|
typedef uint32_t symvalue;
|
|
|
|
#endif /* not BFD64 */
|
|
|
|
#define HALF_BFD_SIZE_TYPE \
|
|
(((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
|
|
|
|
/* An offset into a file. BFD always uses the largest possible offset
|
|
based on the build time availability of fseek, fseeko, or fseeko64. */
|
|
typedef @bfd_file_ptr@ file_ptr;
|
|
typedef @bfd_ufile_ptr@ ufile_ptr;
|
|
|
|
typedef uint32_t flagword; /* 32 bits of flags */
|
|
typedef uint8_t bfd_byte;
|
|
|
|
/* Forward declarations. */
|
|
typedef struct bfd bfd;
|
|
struct bfd_link_info;
|
|
struct bfd_link_hash_entry;
|
|
typedef struct bfd_section *sec_ptr;
|
|
typedef struct reloc_cache_entry arelent;
|
|
struct orl;
|
|
|
|
#define align_power(addr, align) \
|
|
(((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
|
|
|
|
/* Align an address upward to a boundary, expressed as a number of bytes.
|
|
E.g. align to an 8-byte boundary with argument of 8. Take care never
|
|
to wrap around if the address is within boundary-1 of the end of the
|
|
address space. */
|
|
#define BFD_ALIGN(this, boundary) \
|
|
((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \
|
|
? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
|
|
: ~ (bfd_vma) 0)
|
|
|
|
/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise. */
|
|
|
|
static inline bool
|
|
startswith (const char *str, const char *prefix)
|
|
{
|
|
return strncmp (str, prefix, strlen (prefix)) == 0;
|
|
}
|
|
|