aboutsummaryrefslogtreecommitdiff
path: root/libctf/elf.h
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2019-04-23 21:45:30 +0100
committerNick Alcock <nick.alcock@oracle.com>2019-05-28 17:07:19 +0100
commit94585e7f93c9477bcf2835d8245e967053ce2b41 (patch)
treebe6b9dd49c2463d5a72368ce400f19538f06bc9b /libctf/elf.h
parent60da9d955964759b1f52690bff587ad32a198507 (diff)
downloadgdb-94585e7f93c9477bcf2835d8245e967053ce2b41.zip
gdb-94585e7f93c9477bcf2835d8245e967053ce2b41.tar.gz
gdb-94585e7f93c9477bcf2835d8245e967053ce2b41.tar.bz2
libctf: low-level list manipulation and helper utilities
These utilities are a bit of a ragbag of small things needed by more than one TU: list manipulation, ELF32->64 translators, routines to look up strings in string tables, dynamically-allocated string appenders, and routines to set the specialized errno values previously committed in <ctf-api.h>. We do still need to dig around in raw ELF symbol tables in places, because libctf allows the caller to pass in the contents of string and symbol sections without telling it where they come from, so we cannot use BFD to get the symbols (BFD reasonably demands the entire file). So extract minimal ELF definitions from glibc into a private header named libctf/elf.h: later, we use those to get symbols. (The start-of- copyright range on elf.h reflects this glibc heritage.) libctf/ * ctf-util.c: New file. * elf.h: Likewise. * ctf-impl.h: Include it, and add declarations.
Diffstat (limited to 'libctf/elf.h')
-rw-r--r--libctf/elf.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/libctf/elf.h b/libctf/elf.h
new file mode 100644
index 0000000..fee1630
--- /dev/null
+++ b/libctf/elf.h
@@ -0,0 +1,61 @@
+/* This file defines standard ELF types, structures, and macros.
+ Copyright (C) 1995-2019 Free Software Foundation, Inc.
+
+ This file is part of libctf.
+
+ libctf 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, 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; see the file COPYING. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _CTF_ELF_H
+#define _CTF_ELF_H
+
+#include "config.h"
+#include "ansidecl.h"
+#include <stdint.h>
+#include "elf/common.h"
+#include "elf/external.h"
+
+typedef uint32_t Elf32_Word;
+typedef uint32_t Elf64_Word;
+typedef uint32_t Elf32_Addr;
+typedef uint64_t Elf64_Addr;
+typedef uint64_t Elf64_Xword;
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+
+#define SHN_EXTABS 0xFFF1 /* Associated symbol is absolute */
+
+/* Symbol table entry. */
+
+typedef struct
+{
+ Elf32_Word st_name; /* Symbol name (string tbl index) */
+ Elf32_Addr st_value; /* Symbol value */
+ Elf32_Word st_size; /* Symbol size */
+ unsigned char st_info; /* Symbol type and binding */
+ unsigned char st_other; /* Symbol visibility */
+ Elf32_Section st_shndx; /* Section index */
+} Elf32_Sym;
+
+typedef struct
+{
+ Elf64_Word st_name; /* Symbol name (string tbl index) */
+ unsigned char st_info; /* Symbol type and binding */
+ unsigned char st_other; /* Symbol visibility */
+ Elf64_Section st_shndx; /* Section index */
+ Elf64_Addr st_value; /* Symbol value */
+ Elf64_Xword st_size; /* Symbol size */
+} Elf64_Sym;
+
+#endif /* _CTF_ELF_H */