/* annobin - Header file for the annobin package.
Copyright (c) 2019, 2020 Red Hat.
Created by Nick Clifton.
This 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.
It 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. */
#ifdef __cplusplus
extern "C" {
#endif
/* The version of the package.
NB/ This number is expected to be in the form "Nnn" where
"N" is major version number and "nn" is the minor version number. */
#define ANNOBIN_VERSION 923
/* The version of the annotation specification supported. */
#define SPEC_VERSION 3
#if 0 /* This would be the correct thing to do if elf/common.h did not conflict with elf.h. */
#include "elf/common.h"
#else
#define SHF_GNU_BUILD_NOTE (1 << 20) /* Section contains GNU BUILD ATTRIBUTE notes. */
#define NT_GNU_PROPERTY_TYPE_0 5 /* Generated by gcc. */
#define NT_GNU_BUILD_ATTRIBUTE_OPEN 0x100
#define NT_GNU_BUILD_ATTRIBUTE_FUNC 0x101
/* Short-hand versions of the above defines. */
#define OPEN NT_GNU_BUILD_ATTRIBUTE_OPEN
#define FUNC NT_GNU_BUILD_ATTRIBUTE_FUNC
#define GNU_BUILD_ATTRIBUTE_TYPE_NUMERIC '*'
#define GNU_BUILD_ATTRIBUTE_TYPE_STRING '$'
#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_TRUE '+'
#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_FALSE '!'
#define NUMERIC GNU_BUILD_ATTRIBUTE_TYPE_NUMERIC
#define STRING GNU_BUILD_ATTRIBUTE_TYPE_STRING
#define BOOL_T GNU_BUILD_ATTRIBUTE_TYPE_BOOL_TRUE
#define BOOL_F GNU_BUILD_ATTRIBUTE_TYPE_BOOL_FALSE
#define GNU_BUILD_ATTRIBUTE_VERSION 1
#define GNU_BUILD_ATTRIBUTE_STACK_PROT 2
#define GNU_BUILD_ATTRIBUTE_RELRO 3
#define GNU_BUILD_ATTRIBUTE_STACK_SIZE 4
#define GNU_BUILD_ATTRIBUTE_TOOL 5
#define GNU_BUILD_ATTRIBUTE_ABI 6
#define GNU_BUILD_ATTRIBUTE_PIC 7
#define GNU_BUILD_ATTRIBUTE_SHORT_ENUM 8
#define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property"
#define GNU_BUILD_ATTRS_SECTION_NAME ".gnu.build.attributes"
/* Characters used in the GNU_BUILD_ATTRIBUTE_VERSION note to identify the code producer. */
#define ANNOBIN_TOOL_ID_CLANG 'L'
#define ANNOBIN_TOOL_ID_LLVM 'V'
#define ANNOBIN_TOOL_ID_ASSEMBLER 'a'
#define ANNOBIN_TOOL_ID_LINKER 'l'
#define ANNOBIN_TOOL_ID_GCC 'p'
#define ANNOBIN_TOOL_ID_GCC_COLD 'c'
#define ANNOBIN_TOOL_ID_GCC_HOT 'h'
#define ANNOBIN_TOOL_ID_GCC_STARTUP 's'
#define ANNOBIN_TOOL_ID_GCC_EXIT 'e'
/* Values used in GNU .note.gnu.property notes (NT_GNU_PROPERTY_TYPE_0). */
#define GNU_PROPERTY_STACK_SIZE 1
#define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
#endif /* Copy of elf/common.h */
/* Utlity macros to make the code cleaner. */
#define streq(a,b) (strcmp ((a), (b)) == 0)
#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0)
#define const_strneq(a,b) (strncmp ((a), (b), sizeof (b) - 1) == 0)
#ifdef __cplusplus
}
#endif