From fe149628eaae9748be08815d726cc56e8e492c73 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 26 Oct 2022 00:30:00 +0200 Subject: add initial clang support --- include/fortify-headers.h | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'include/fortify-headers.h') diff --git a/include/fortify-headers.h b/include/fortify-headers.h index 5a3c6e5..42c8317 100644 --- a/include/fortify-headers.h +++ b/include/fortify-headers.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2015-2016 Dimitris Papastamos + * Copyright (C) 2022 q66 * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. @@ -16,10 +17,30 @@ #ifndef _FORTIFY_HEADERS_H #define _FORTIFY_HEADERS_H +#ifdef __clang__ + +/* clang uses overloads; see https://github.com/llvm/llvm-project/issues/53516 */ +#define _FORTIFY_POSN(n) const __attribute__((__pass_object_size__(n))) +/* we can't use extern inline with overloads without making them external */ +#define _FORTIFY_INLINE static __inline__ \ + __attribute__((__always_inline__,__artificial__,__overloadable__)) + +#else /* !__clang__ */ + +#define _FORTIFY_POSN(n) +#define _FORTIFY_INLINE extern __inline__ \ + __attribute__((__always_inline__,__gnu_inline__,__artificial__)) + +#endif /* __clang__ */ + +#define _FORTIFY_POS0 _FORTIFY_POSN(0) +#define _FORTIFY_POS1 _FORTIFY_POSN(1) +#define _FORTIFY_POS2 _FORTIFY_POSN(2) + #define _FORTIFY_STR(s) #s #define _FORTIFY_ORIG(p,fn) __typeof__(fn) __orig_##fn __asm__(_FORTIFY_STR(p) #fn) -#define _FORTIFY_FN(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn); \ - extern __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__)) +#define _FORTIFY_FNB(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn) +#define _FORTIFY_FN(fn) _FORTIFY_FNB(fn); _FORTIFY_INLINE /* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */ -- cgit v1.3