summaryrefslogtreecommitdiffstats
path: root/libelf
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2017-04-20 15:55:47 +0200
committerMark Wielaard <[email protected]>2017-05-02 13:07:28 +0200
commitc73a00d82bbb7196c517f61cdf14c09b2b16a668 (patch)
tree24cee57d746d82fae3cc18672c145e36ac00c727 /libelf
parentab293bfbc76a0fa5461bcbdb105332a9f1d85892 (diff)
Make __attribute__ conditional in all installed headers
__attribute__ is a GNU extension. If we want to link against the libraries using a different compiler, it needs to be disabled. It was already disabled in libdw.h, and this patch extends this to the other headers. We move the defines to libelf.h as that is included in all the others. Signed-off-by: Ulf Hermann <[email protected]>
Diffstat (limited to 'libelf')
-rw-r--r--libelf/ChangeLog5
-rw-r--r--libelf/libelf.h38
2 files changed, 36 insertions, 7 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 4f232289..dd82a433 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,5 +1,10 @@
2017-04-20 Ulf Hermann <[email protected]>
+ * libelf.h: Define macros for various function attributes and use
+ them.
+
+2017-04-20 Ulf Hermann <[email protected]>
+
* elf_update.c: Set ELF_F_MMAPPED flag if we mmap from elf_update.
2017-04-19 Mark Wielaard <[email protected]>
diff --git a/libelf/libelf.h b/libelf/libelf.h
index c0d6389f..547c0f50 100644
--- a/libelf/libelf.h
+++ b/libelf/libelf.h
@@ -64,6 +64,30 @@
#define ELFCOMPRESS_HIPROC 0x7fffffff /* End of processor-specific. */
#endif
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+# define __nonnull_attribute__(...) __attribute__ ((__nonnull__ (__VA_ARGS__)))
+# define __deprecated_attribute__ __attribute__ ((__deprecated__))
+# define __pure_attribute__ __attribute__ ((__pure__))
+# define __const_attribute__ __attribute__ ((__const__))
+#else
+# define __nonnull_attribute__(...)
+# define __deprecated_attribute__
+# define __pure_attribute__
+# define __const_attribute__
+#endif
+
+#if __GNUC__ < 4
+#define __noreturn_attribute__
+#else
+#define __noreturn_attribute__ __attribute__ ((noreturn))
+#endif
+
+#ifdef __GNUC_STDC_INLINE__
+# define __libdw_extern_inline extern __inline __attribute__ ((__gnu_inline__))
+#else
+# define __libdw_extern_inline extern __inline
+#endif
+
/* Known translation types. */
typedef enum
{
@@ -216,7 +240,7 @@ extern int elf_end (Elf *__elf);
extern int64_t elf_update (Elf *__elf, Elf_Cmd __cmd);
/* Determine what kind of file is associated with ELF. */
-extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
+extern Elf_Kind elf_kind (Elf *__elf) __pure_attribute__;
/* Get the base offset for an object file. */
extern int64_t elf_getbase (Elf *__elf);
@@ -282,7 +306,7 @@ extern int elf_getshdrnum (Elf *__elf, size_t *__dst);
It was agreed to make the same functionality available under a different
name and obsolete the old name. */
extern int elf_getshnum (Elf *__elf, size_t *__dst)
- __attribute__ ((__deprecated__));
+ __deprecated_attribute__;
/* Get the section index of the section header string table in the ELF
@@ -294,7 +318,7 @@ extern int elf_getshdrstrndx (Elf *__elf, size_t *__dst);
It was agreed to make the same functionality available under a different
name and obsolete the old name. */
extern int elf_getshstrndx (Elf *__elf, size_t *__dst)
- __attribute__ ((__deprecated__));
+ __deprecated_attribute__;
/* Retrieve section header of ELFCLASS32 binary. */
@@ -429,11 +453,11 @@ extern char *elf_rawfile (Elf *__elf, size_t *__nbytes);
The result is based on version VERSION of the ELF standard. */
extern size_t elf32_fsize (Elf_Type __type, size_t __count,
unsigned int __version)
- __attribute__ ((__const__));
+ __const_attribute__;
/* Similar but this time the binary calls is ELFCLASS64. */
extern size_t elf64_fsize (Elf_Type __type, size_t __count,
unsigned int __version)
- __attribute__ ((__const__));
+ __const_attribute__;
/* Convert data structure from the representation in the file represented
@@ -472,11 +496,11 @@ extern void elf_fill (int __fill);
/* Compute hash value. */
extern unsigned long int elf_hash (const char *__string)
- __attribute__ ((__pure__));
+ __pure_attribute__;
/* Compute hash value using the GNU-specific hash function. */
extern unsigned long int elf_gnu_hash (const char *__string)
- __attribute__ ((__pure__));
+ __pure_attribute__;
/* Compute simple checksum from permanent parts of the ELF file. */