summaryrefslogtreecommitdiffstats
path: root/vppinfra/vppinfra/elf.h
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2016-08-15 11:12:27 -0400
committerDave Barach <dave@barachs.net>2016-08-15 11:12:40 -0400
commitc379999665febd12ec55bfb3a7545224f2b39d3d (patch)
tree8bf0c11e52c2162e1239b6c3f4a5f74b62a07409 /vppinfra/vppinfra/elf.h
parentb3d93dacfde8ab21bbce171fff2971b2ed7bce6a (diff)
VPP-327 Coding standards cleanup for vppinfra
Fix additional a few additional deviations reported elsewhere by checkstyle Change-Id: I026a8ae1c5b1856bbe3c4a555e1b690e7501b045 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'vppinfra/vppinfra/elf.h')
-rw-r--r--vppinfra/vppinfra/elf.h295
1 files changed, 167 insertions, 128 deletions
diff --git a/vppinfra/vppinfra/elf.h b/vppinfra/vppinfra/elf.h
index 52989166a5b..008ea284b31 100644
--- a/vppinfra/vppinfra/elf.h
+++ b/vppinfra/vppinfra/elf.h
@@ -161,50 +161,54 @@
#define _(f) ELF_##f,
-typedef enum {
- foreach_elf_file_class
- ELF_N_FILE_CLASS,
+typedef enum
+{
+ foreach_elf_file_class ELF_N_FILE_CLASS,
} elf_file_class_t;
-typedef enum {
- foreach_elf_data_encoding
- ELF_N_DATA_ENCODING,
+typedef enum
+{
+ foreach_elf_data_encoding ELF_N_DATA_ENCODING,
} elf_data_encoding_t;
#undef _
#define _(f,i) ELF_##f = i,
-typedef enum {
+typedef enum
+{
foreach_elf_abi
} elf_abi_t;
-typedef enum {
+typedef enum
+{
foreach_elf_file_type
} elf_file_type_t;
#undef _
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_ARCH_##f = i,
foreach_elf_architecture
#undef _
} elf_architecture_t;
-typedef struct {
+typedef struct
+{
/* 0x7f ELF */
u8 magic[4];
- elf_file_class_t file_class : 8;
- elf_data_encoding_t data_encoding : 8;
+ elf_file_class_t file_class:8;
+ elf_data_encoding_t data_encoding:8;
u8 file_version_ident;
- elf_abi_t abi : 8;
+ elf_abi_t abi:8;
u8 abi_version;
u8 pad[7];
- elf_file_type_t file_type : 16;
- elf_architecture_t architecture : 16;
+ elf_file_type_t file_type:16;
+ elf_architecture_t architecture:16;
u32 file_version;
} elf_first_header_t;
@@ -300,37 +304,37 @@ typedef struct {
#define _(t,f) t f;
-typedef struct {
- foreach_elf32_file_header
-} elf32_file_header_t;
+typedef struct
+{
+foreach_elf32_file_header} elf32_file_header_t;
-typedef struct {
- foreach_elf64_file_header
-} elf64_file_header_t;
+typedef struct
+{
+foreach_elf64_file_header} elf64_file_header_t;
-typedef struct {
- foreach_elf32_section_header
-} elf32_section_header_t;
+typedef struct
+{
+foreach_elf32_section_header} elf32_section_header_t;
-typedef struct {
- foreach_elf64_section_header
-} elf64_section_header_t;
+typedef struct
+{
+foreach_elf64_section_header} elf64_section_header_t;
-typedef struct {
- foreach_elf32_segment_header
-} elf32_segment_header_t;
+typedef struct
+{
+foreach_elf32_segment_header} elf32_segment_header_t;
-typedef struct {
- foreach_elf64_segment_header
-} elf64_segment_header_t;
+typedef struct
+{
+foreach_elf64_segment_header} elf64_segment_header_t;
-typedef struct {
- foreach_elf32_symbol_header
-} elf32_symbol_t;
+typedef struct
+{
+foreach_elf32_symbol_header} elf32_symbol_t;
-typedef struct {
- foreach_elf64_symbol_header
-} elf64_symbol_t;
+typedef struct
+{
+foreach_elf64_symbol_header} elf64_symbol_t;
#undef _
/* Special section names. */
@@ -376,7 +380,7 @@ typedef struct {
_ (ARCH_SPECIFIC_LO, 0x70000000) /* Start of processor-specific */ \
_ (ARCH_SPECIFIC_HI, 0x7fffffff) /* End of processor-specific */ \
_ (APP_SPECIFIC_LO, 0x80000000) /* Start of application-specific */ \
- _ (APP_SPECIFIC_HI, 0x8fffffff) /* End of application-specific */
+ _ (APP_SPECIFIC_HI, 0x8fffffff) /* End of application-specific */
/* Section flags. */
#define foreach_elf_section_flag \
@@ -395,20 +399,23 @@ typedef struct {
_ (ARCH_SPECIFIC_LO, 28) \
_ (ARCH_SPECIFIC_HI, 31)
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SECTION_##f = i,
foreach_elf_section_type
#undef _
- ELF_SECTION_OS_SPECIFIC_HI = 0x6fffffff,
+ ELF_SECTION_OS_SPECIFIC_HI = 0x6fffffff,
} elf_section_type_t;
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SECTION_FLAG_BIT_##f = i,
foreach_elf_section_flag
#undef _
} elf_section_flag_bit_t;
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SECTION_FLAG_##f = 1 << ELF_SECTION_FLAG_BIT_##f,
foreach_elf_section_flag
#undef _
@@ -447,7 +454,8 @@ typedef enum {
/* The syminfo section if available contains additional
information about every dynamic symbol. */
-typedef struct {
+typedef struct
+{
u16 bound_to;
u16 flags;
} elf_symbol_info_t;
@@ -467,19 +475,22 @@ typedef struct {
_ (LAZY_LOAD) /* Symbol bound to object to be lazy loaded */
/* Relocation table entry with/without addend. */
-typedef struct {
+typedef struct
+{
u32 address;
u32 symbol_and_type; /* high 24 symbol, low 8 type. */
i32 addend[0];
} elf32_relocation_t;
-typedef struct {
+typedef struct
+{
u64 address;
u64 symbol_and_type; /* high 32 symbol, low 32 type. */
i64 addend[0];
} elf64_relocation_t;
-typedef struct {
+typedef struct
+{
u64 address;
u64 symbol_and_type;
u64 addend;
@@ -506,7 +517,7 @@ typedef struct {
_ (SUNW_STACK, 0x6ffffffb) /* Sun specific stack */ \
_ (OS_SPECIFIC_HI, 0x6fffffff) /* End of OS-specific */ \
_ (ARCH_SPECIFIC_LO, 0x70000000) /* Start of processor-specific */ \
- _ (ARCH_SPECIFIC_HI, 0x7fffffff) /* End of processor-specific */
+ _ (ARCH_SPECIFIC_HI, 0x7fffffff) /* End of processor-specific */
/* Segment flags. */
#define foreach_elf_segment_flag \
@@ -518,19 +529,22 @@ typedef struct {
_ (ARCH_SPECIFIC_LO, 28) \
_ (ARCH_SPECIFIC_HI, 31)
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SEGMENT_##f = i,
foreach_elf_segment_type
#undef _
} elf_segment_type_t;
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SEGMENT_FLAG_BIT_##f = i,
foreach_elf_segment_flag
#undef _
} elf_segment_flag_bit_t;
-typedef enum {
+typedef enum
+{
#define _(f,i) ELF_SEGMENT_FLAG_##f = 1 << ELF_SEGMENT_FLAG_BIT_##f,
foreach_elf_segment_flag
#undef _
@@ -543,16 +557,16 @@ typedef enum {
#define foreach_elf64_dynamic_entry_header \
_ (u64, type) \
_ (u64, data)
-
+
#define _(t,f) t f;
-typedef struct {
- foreach_elf32_dynamic_entry_header
-} elf32_dynamic_entry_t;
+typedef struct
+{
+foreach_elf32_dynamic_entry_header} elf32_dynamic_entry_t;
-typedef struct {
- foreach_elf64_dynamic_entry_header
-} elf64_dynamic_entry_t;
+typedef struct
+{
+foreach_elf64_dynamic_entry_header} elf64_dynamic_entry_t;
#undef _
@@ -620,17 +634,18 @@ typedef struct {
_ (VERSION_NEED, 0x6ffffffe) /* Address of table with needed versions */ \
_ (VERSION_NEED_COUNT, 0x6fffffff) /* Number of needed versions */ \
_ (AUXILIARY, 0x7ffffffd) /* Shared object to load before self */ \
- _ (FILTER, 0x7fffffff) /* Shared object to get values from */
+ _ (FILTER, 0x7fffffff) /* Shared object to get values from */
-typedef enum {
+typedef enum
+{
#define _(f,n) ELF_DYNAMIC_ENTRY_##f = (n),
foreach_elf_dynamic_entry_type
#undef _
} elf_dynamic_entry_type_t;
/* Values of `d_un.d_val' in the DT_FLAGS entry. */
-#define ELF_DYNAMIC_FLAGS_ORIGIN (1 << 0) /* Object may use DF_ORIGIN */
-#define ELF_DYNAMIC_FLAGS_SYMBOLIC (1 << 1) /* Symbol resolutions starts here */
+#define ELF_DYNAMIC_FLAGS_ORIGIN (1 << 0) /* Object may use DF_ORIGIN */
+#define ELF_DYNAMIC_FLAGS_SYMBOLIC (1 << 1) /* Symbol resolutions starts here */
#define ELF_DYNAMIC_FLAGS_TEXT_RELOCATIONS (1 << 2) /* Object contains text relocations */
#define ELF_DYNAMIC_FLAGS_BIND_NOW (1 << 3) /* No lazy binding for this object */
#define ELF_DYNAMIC_FLAGS_STATIC_TLS (1 << 4) /* Module uses the static TLS model */
@@ -640,9 +655,9 @@ typedef enum {
#define DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */
#define DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */
#define DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */
-#define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/
-#define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/
-#define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/
+#define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object. */
+#define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime. */
+#define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object */
#define DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */
#define DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */
#define DF_1_DIRECT 0x00000100 /* Direct binding enabled. */
@@ -650,7 +665,7 @@ typedef enum {
#define DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */
#define DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */
#define DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */
-#define DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/
+#define DF_1_CONFALT 0x00002000 /* Configuration alternative created. */
#define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */
#define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */
#define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */
@@ -676,19 +691,20 @@ typedef struct
u32 byte_offset_next_version_definition;
} elf_dynamic_version_definition_t;
-typedef struct {
+typedef struct
+{
u32 name;
- u32 next_offset; /* byte offset of ver def aux next entry */
+ u32 next_offset; /* byte offset of ver def aux next entry */
} elf_dynamic_version_definition_aux_t;
/* Version definition flags. */
-#define ELF_DYNAMIC_VERSION_FILE (1 << 0) /* Version definition of file itself */
-#define ELF_DYNAMIC_VERSION_WEAK (1 << 1) /* Weak version identifier */
+#define ELF_DYNAMIC_VERSION_FILE (1 << 0) /* Version definition of file itself */
+#define ELF_DYNAMIC_VERSION_WEAK (1 << 1) /* Weak version identifier */
/* Version symbol index. */
#define ELF_DYNAMIC_VERSYM_LOCAL 0 /* Symbol is local. */
#define ELF_DYNAMIC_VERSYM_GLOBAL 1 /* Symbol is global. */
-#define ELF_DYNAMIC_VERSYM_RESERVED_LO 0xff00 /* Beginning of reserved entries. */
+#define ELF_DYNAMIC_VERSYM_RESERVED_LO 0xff00 /* Beginning of reserved entries. */
#define ELF_DYNAMIC_VERSYM_ELIMINATE 0xff01 /* Symbol is to be eliminated. */
/* Version dependency section. */
@@ -797,14 +813,15 @@ typedef struct
_ (GOTTPOFF, 22) /* 32 bit signed PC relative offset to GOT entry for IE symbol */ \
_ (TPOFF32, 23) /* Offset in initial TLS, block) */
-typedef struct {
- elf64_symbol_t * symbols;
+typedef struct
+{
+ elf64_symbol_t *symbols;
u32 section_index;
- u8 * string_table;
+ u8 *string_table;
- uword * symbol_by_name;
+ uword *symbol_by_name;
} elf_symbol_table_t;
always_inline void
@@ -816,10 +833,13 @@ elf_symbol_table_free (elf_symbol_table_t * s)
always_inline u8 *
elf_symbol_name (elf_symbol_table_t * t, elf64_symbol_t * sym)
-{ return vec_elt_at_index (t->string_table, sym->name); }
+{
+ return vec_elt_at_index (t->string_table, sym->name);
+}
-typedef struct {
- elf_relocation_with_addend_t * relocations;
+typedef struct
+{
+ elf_relocation_with_addend_t *relocations;
u32 section_index;
} elf_relocation_table_t;
@@ -830,13 +850,14 @@ elf_relocation_table_free (elf_relocation_table_t * r)
vec_free (r->relocations);
}
-typedef struct {
+typedef struct
+{
elf64_section_header_t header;
u32 index;
/* Index of segments containing this section. */
- uword * segment_index_bitmap;
+ uword *segment_index_bitmap;
/* Aligned size (included padding not included in
header.file_size). */
@@ -844,52 +865,54 @@ typedef struct {
i64 exec_address_change;
- u8 * contents;
+ u8 *contents;
} elf_section_t;
-typedef struct {
+typedef struct
+{
elf64_segment_header_t header;
/* Sections contained in this segment. */
- uword * section_index_bitmap;
+ uword *section_index_bitmap;
u32 index;
- u8 * contents;
+ u8 *contents;
} elf_segment_t;
-typedef struct {
+typedef struct
+{
u8 need_byte_swap;
u8 parsed_symbols;
- char * file_name;
+ char *file_name;
elf_first_header_t first_header;
elf64_file_header_t file_header;
- elf_segment_t * segments;
+ elf_segment_t *segments;
- elf_section_t * sections;
+ elf_section_t *sections;
- uword * section_by_name;
- uword * section_by_start_address;
+ uword *section_by_name;
+ uword *section_by_start_address;
- elf_symbol_table_t * symbol_tables;
- elf_relocation_table_t * relocation_tables;
+ elf_symbol_table_t *symbol_tables;
+ elf_relocation_table_t *relocation_tables;
- char * interpreter;
+ char *interpreter;
- elf64_dynamic_entry_t * dynamic_entries;
- u8 * dynamic_string_table;
+ elf64_dynamic_entry_t *dynamic_entries;
+ u8 *dynamic_string_table;
u32 dynamic_string_table_section_index;
u32 dynamic_symbol_table_section_index;
u32 dynamic_symbol_table_index;
u32 dynamic_section_index;
- u16 * versym;
+ u16 *versym;
u32 versym_section_index;
- elf_dynamic_version_need_union_t * verneed;
+ elf_dynamic_version_need_union_t *verneed;
u32 verneed_section_index;
} elf_main_t;
@@ -923,22 +946,20 @@ elf_main_free (elf_main_t * em)
}
always_inline void
-elf_get_segment_contents (elf_main_t * em,
- void * data,
- uword segment_index)
+elf_get_segment_contents (elf_main_t * em, void *data, uword segment_index)
{
- elf_segment_t * g = vec_elt_at_index (em->segments, segment_index);
- if (! g->contents)
- vec_add (g->contents, data + g->header.file_offset, g->header.memory_size);
+ elf_segment_t *g = vec_elt_at_index (em->segments, segment_index);
+ if (!g->contents)
+ vec_add (g->contents, data + g->header.file_offset,
+ g->header.memory_size);
}
always_inline void *
elf_get_section_contents (elf_main_t * em,
- uword section_index,
- uword elt_size)
+ uword section_index, uword elt_size)
{
- elf_section_t * s;
- void * result;
+ elf_section_t *s;
+ void *result;
s = vec_elt_at_index (em->sections, section_index);
@@ -960,10 +981,9 @@ elf_get_section_contents (elf_main_t * em,
always_inline void
elf_set_section_contents (elf_main_t * em,
uword section_index,
- void * new_contents,
- uword n_content_bytes)
+ void *new_contents, uword n_content_bytes)
{
- elf_section_t * s;
+ elf_section_t *s;
s = vec_elt_at_index (em->sections, section_index);
vec_free (s->contents);
@@ -973,25 +993,35 @@ elf_set_section_contents (elf_main_t * em,
always_inline u8 *
elf_section_name (elf_main_t * em, elf_section_t * s)
{
- elf_section_t * es = vec_elt_at_index (em->sections, em->file_header.section_header_string_table_index);
+ elf_section_t *es = vec_elt_at_index (em->sections,
+ em->
+ file_header.section_header_string_table_index);
return vec_elt_at_index (es->contents, s->header.name);
}
always_inline u8
elf_swap_u8 (elf_main_t * em, u8 x)
-{ return x; }
+{
+ return x;
+}
always_inline u16
elf_swap_u16 (elf_main_t * em, u16 x)
-{ return em->need_byte_swap ? clib_byte_swap_u16 (x) : x; }
+{
+ return em->need_byte_swap ? clib_byte_swap_u16 (x) : x;
+}
always_inline u32
elf_swap_u32 (elf_main_t * em, u32 x)
-{ return em->need_byte_swap ? clib_byte_swap_u32 (x) : x; }
+{
+ return em->need_byte_swap ? clib_byte_swap_u32 (x) : x;
+}
always_inline u64
elf_swap_u64 (elf_main_t * em, u64 x)
-{ return em->need_byte_swap ? clib_byte_swap_u64 (x) : x; }
+{
+ return em->need_byte_swap ? clib_byte_swap_u64 (x) : x;
+}
#define FORMAT_ELF_MAIN_SYMBOLS (1 << 0)
#define FORMAT_ELF_MAIN_RELOCATIONS (1 << 1)
@@ -1000,24 +1030,33 @@ elf_swap_u64 (elf_main_t * em, u64 x)
format_function_t format_elf_main;
format_function_t format_elf_symbol;
-clib_error_t * elf_read_file (elf_main_t * em, char * file_name);
-clib_error_t * elf_write_file (elf_main_t * em, char * file_name);
-clib_error_t * elf_delete_named_section (elf_main_t * em, char * section_name);
-clib_error_t * elf_parse (elf_main_t * em, void * data, uword data_bytes);
+clib_error_t *elf_read_file (elf_main_t * em, char *file_name);
+clib_error_t *elf_write_file (elf_main_t * em, char *file_name);
+clib_error_t *elf_delete_named_section (elf_main_t * em, char *section_name);
+clib_error_t *elf_parse (elf_main_t * em, void *data, uword data_bytes);
void elf_parse_symbols (elf_main_t * em);
-clib_error_t *
-elf_get_section_by_name (elf_main_t * em, char * section_name, elf_section_t ** result);
-clib_error_t *
-elf_get_section_by_start_address (elf_main_t * em, uword start_address, elf_section_t ** result);
+clib_error_t *elf_get_section_by_name (elf_main_t * em, char *section_name,
+ elf_section_t ** result);
+clib_error_t *elf_get_section_by_start_address (elf_main_t * em,
+ uword start_address,
+ elf_section_t ** result);
void
elf_create_section_with_contents (elf_main_t * em,
- char * section_name,
+ char *section_name,
elf64_section_header_t * header,
- void * contents,
- uword n_content_bytes);
-uword elf_delete_segment_with_type (elf_main_t * em, elf_segment_type_t segment_type);
+ void *contents, uword n_content_bytes);
+uword elf_delete_segment_with_type (elf_main_t * em,
+ elf_segment_type_t segment_type);
void elf_set_dynamic_entries (elf_main_t * em);
#endif /* included_clib_elf_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */