blob: 5b339b31dfc7e1210cff3e4080d95074aee85eff [file] [log] [blame]
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00001/* Internal definitions for interface for libebl.
Mark Wielaardc1c1c062014-06-14 17:15:37 +02002 Copyright (C) 2000-2009, 2013, 2014 Red Hat, Inc.
Mark Wielaardde2ed972012-06-05 17:15:16 +02003 This file is part of elfutils.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00004
Mark Wielaardde2ed972012-06-05 17:15:16 +02005 This file is free software; you can redistribute it and/or modify
6 it under the terms of either
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00007
Mark Wielaardde2ed972012-06-05 17:15:16 +02008 * the GNU Lesser General Public License as published by the Free
9 Software Foundation; either version 3 of the License, or (at
10 your option) any later version
11
12 or
13
14 * the GNU General Public License as published by the Free
15 Software Foundation; either version 2 of the License, or (at
16 your option) any later version
17
18 or both in parallel, as here.
19
20 elfutils is distributed in the hope that it will be useful, but
Ulrich Drepper361df7d2006-04-04 21:38:57 +000021 WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 General Public License for more details.
24
Mark Wielaardde2ed972012-06-05 17:15:16 +020025 You should have received copies of the GNU General Public License and
26 the GNU Lesser General Public License along with this program. If
27 not, see <http://www.gnu.org/licenses/>. */
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000028
29#ifndef _LIBEBLP_H
30#define _LIBEBLP_H 1
31
32#include <gelf.h>
Ulrich Drepper3cbdd382008-01-02 17:44:39 +000033#include <libasm.h>
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000034#include <libebl.h>
35#include <libintl.h>
36
37
38/* Backend handle. */
39struct ebl
40{
41 /* Machine name. */
42 const char *name;
43
44 /* Emulation name. */
45 const char *emulation;
46
Ulrich Dreppera38998e2005-08-03 02:05:39 +000047 /* ELF machine, class, and data encoding. */
Roland McGrathcd60ea82005-11-16 01:57:40 +000048 uint_fast16_t machine;
49 uint_fast8_t class;
50 uint_fast8_t data;
Ulrich Dreppera38998e2005-08-03 02:05:39 +000051
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000052 /* The libelf handle (if known). */
53 Elf *elf;
54
Roland McGrathcd60ea82005-11-16 01:57:40 +000055 /* See ebl-hooks.h for the declarations of the hook functions. */
56# define EBLHOOK(name) (*name)
57# include "ebl-hooks.h"
58# undef EBLHOOK
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000059
Ulrich Drepper28ed8952006-07-07 03:43:47 +000060 /* Size of entry in Sysv-style hash table. */
61 int sysvhash_entrysize;
62
Jan Kratochvil0b867462013-05-30 14:37:38 +020063 /* Number of registers to allocate for ebl_set_initial_registers_tid.
64 Ebl architecture can unwind iff FRAME_NREGS > 0. */
65 size_t frame_nregs;
66
Jose E. Marchesi42f0df12015-12-08 19:10:40 +010067 /* Offset to apply to the value of the return_address_register, as
68 fetched from a Dwarf CFI. This is used by some backends, where
69 the return_address_register actually contains the call
70 address. */
71 int ra_offset;
72
Mark Wielaardc1c1c062014-06-14 17:15:37 +020073 /* Mask to use to turn a function value into a real function address
74 in case the architecture adds some extra non-address bits to it.
75 If not initialized (0) then ebl_func_addr_mask will return ~0,
76 otherwise it should be the actual mask to use. */
77 GElf_Addr func_addr_mask;
78
Mark Wielaard159ac522013-12-18 11:05:54 +010079 /* Function descriptor load address and table as used by
80 ebl_resolve_sym_value if available for this arch. */
81 GElf_Addr fd_addr;
82 Elf_Data *fd_data;
83
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000084 /* Internal data. */
85 void *dlhandle;
86};
87
88
89/* Type of the initialization functions in the backend modules. */
90typedef const char *(*ebl_bhinit_t) (Elf *, GElf_Half, Ebl *, size_t);
91
92
93/* gettext helper macros. */
Ulrich Drepper28ed8952006-07-07 03:43:47 +000094#undef _
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000095#define _(Str) dgettext ("elfutils", Str)
96
Roland McGrath3c84db32009-06-24 17:41:40 -070097
98/* LEB128 constant helper macros. */
99#define ULEB128_7(x) (BUILD_BUG_ON_ZERO ((x) >= (1U << 7)) + (x))
100
101#define BUILD_BUG_ON_ZERO(x) (sizeof (char [(x) ? -1 : 1]) - 1)
102
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000103#endif /* libeblP.h */