diff --git a/src/msgbuf.h b/src/msgbuf.h
index 16e3680..b4fd677 100644
--- a/src/msgbuf.h
+++ b/src/msgbuf.h
@@ -98,8 +98,8 @@
  *         `PLDM_MSGBUF_C_ERRNO`, or the equivalent PLDM completion code if the
  *         error mode is `PLDM_MSGBUF_PLDM_CC`.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_status(struct pldm_msgbuf *ctx, unsigned int err)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_status(struct pldm_msgbuf *ctx,
+						unsigned int err)
 {
 	int rc;
 
@@ -150,7 +150,7 @@
  * @return 0 on success, otherwise an error code appropriate for the current
  *         personality.
  */
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_init(struct pldm_msgbuf *ctx, size_t minsize, const void *buf,
 		  size_t len)
@@ -197,9 +197,9 @@
  *         otherwise PLDM_ERROR_INVALID_DATA if pointer parameters are invalid,
  *         or PLDM_ERROR_INVALID_LENGTH if length constraints are violated.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_init_cc(struct pldm_msgbuf *ctx, size_t minsize, const void *buf,
-		    size_t len)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_init_cc(struct pldm_msgbuf *ctx,
+						 size_t minsize,
+						 const void *buf, size_t len)
 {
 	if (!ctx) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -223,9 +223,9 @@
  *         pointer parameters are invalid, or -EOVERFLOW if length constraints
  *         are violated.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_init_errno(struct pldm_msgbuf *ctx, size_t minsize, const void *buf,
-		       size_t len)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_init_errno(struct pldm_msgbuf *ctx,
+						    size_t minsize,
+						    const void *buf, size_t len)
 {
 	if (!ctx) {
 		return -EINVAL;
@@ -246,8 +246,7 @@
  * PLDM_ERROR_INVALID_DATA indicates that the provided context was not a valid
  * pointer.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_validate(struct pldm_msgbuf *ctx)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_validate(struct pldm_msgbuf *ctx)
 {
 	assert(ctx);
 	if (ctx->remaining < 0) {
@@ -268,8 +267,7 @@
  * PLDM_ERROR_INVALID_DATA indicates that the provided context was not a valid
  * pointer.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_consumed(struct pldm_msgbuf *ctx)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_consumed(struct pldm_msgbuf *ctx)
 {
 	assert(ctx);
 	if (ctx->remaining != 0) {
@@ -289,8 +287,7 @@
  * PLDM_ERROR_INVALID_LENGTH if prior accesses would have occurred beyond the
  * bounds of the buffer.
  */
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_destroy(struct pldm_msgbuf *ctx)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_destroy(struct pldm_msgbuf *ctx)
 {
 	int valid;
 
@@ -314,7 +311,7 @@
  * parameter is invalid, or PLDM_ERROR_INVALID_LENGTH if prior accesses would
  * have occurred byond the bounds of the buffer
  */
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_destroy_consumed(struct pldm_msgbuf *ctx)
 {
 	int consumed;
@@ -428,7 +425,7 @@
 #define pldm_msgbuf_extract_uint8(ctx, dst)                                    \
 	pldm_msgbuf_extract_typecheck(uint8_t, pldm__msgbuf_extract_uint8,     \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_uint8(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -457,7 +454,7 @@
 #define pldm_msgbuf_extract_int8(ctx, dst)                                     \
 	pldm_msgbuf_extract_typecheck(int8_t, pldm__msgbuf_extract_int8, dst,  \
 				      ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_int8(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -485,7 +482,7 @@
 #define pldm_msgbuf_extract_uint16(ctx, dst)                                   \
 	pldm_msgbuf_extract_typecheck(uint16_t, pldm__msgbuf_extract_uint16,   \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_uint16(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -538,7 +535,7 @@
 #define pldm_msgbuf_extract_int16(ctx, dst)                                    \
 	pldm_msgbuf_extract_typecheck(int16_t, pldm__msgbuf_extract_int16,     \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_int16(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -576,7 +573,7 @@
 #define pldm_msgbuf_extract_uint32(ctx, dst)                                   \
 	pldm_msgbuf_extract_typecheck(uint32_t, pldm__msgbuf_extract_uint32,   \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_uint32(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -613,7 +610,7 @@
 #define pldm_msgbuf_extract_int32(ctx, dst)                                    \
 	pldm_msgbuf_extract_typecheck(int32_t, pldm__msgbuf_extract_int32,     \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_int32(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -650,7 +647,7 @@
 #define pldm_msgbuf_extract_real32(ctx, dst)                                   \
 	pldm_msgbuf_extract_typecheck(real32_t, pldm__msgbuf_extract_real32,   \
 				      dst, ctx, dst)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_real32(struct pldm_msgbuf *ctx, void *dst)
 {
@@ -725,7 +722,7 @@
 		int32_t *: pldm__msgbuf_extract_int32,                         \
 		real32_t *: pldm__msgbuf_extract_real32)(ctx, dst)
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_extract_array_void(struct pldm_msgbuf *ctx, void *dst,
 				size_t count)
@@ -761,13 +758,13 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_extract_array_char(struct pldm_msgbuf *ctx, char *dst, size_t count)
 {
 	return pldm__msgbuf_extract_array_void(ctx, dst, count);
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_extract_array_uint8(struct pldm_msgbuf *ctx, uint8_t *dst,
 				size_t count)
 {
@@ -779,8 +776,8 @@
 		uint8_t: pldm_msgbuf_extract_array_uint8,                      \
 		char: pldm_msgbuf_extract_array_char)(ctx, dst, count)
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_uint32(struct pldm_msgbuf *ctx, const uint32_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_uint32(struct pldm_msgbuf *ctx,
+						       const uint32_t src)
 {
 	uint32_t val = htole32(src);
 
@@ -810,8 +807,8 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_uint16(struct pldm_msgbuf *ctx, const uint16_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_uint16(struct pldm_msgbuf *ctx,
+						       const uint16_t src)
 {
 	uint16_t val = htole16(src);
 
@@ -841,8 +838,8 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_uint8(struct pldm_msgbuf *ctx, const uint8_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_uint8(struct pldm_msgbuf *ctx,
+						      const uint8_t src)
 {
 	assert(ctx);
 
@@ -870,8 +867,8 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_int32(struct pldm_msgbuf *ctx, const int32_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_int32(struct pldm_msgbuf *ctx,
+						      const int32_t src)
 {
 	int32_t val = htole32(src);
 
@@ -901,8 +898,8 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_int16(struct pldm_msgbuf *ctx, const int16_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_int16(struct pldm_msgbuf *ctx,
+						      const int16_t src)
 {
 	int16_t val = htole16(src);
 
@@ -932,8 +929,8 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_insert_int8(struct pldm_msgbuf *ctx, const int8_t src)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_insert_int8(struct pldm_msgbuf *ctx,
+						     const int8_t src)
 {
 	assert(ctx);
 
@@ -970,7 +967,7 @@
 		uint32_t: pldm_msgbuf_insert_uint32,                           \
 		int32_t: pldm_msgbuf_insert_int32)(dst, src)
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_insert_array_void(struct pldm_msgbuf *ctx, const void *src,
 			       size_t count)
@@ -1006,14 +1003,14 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_insert_array_char(struct pldm_msgbuf *ctx, const char *src,
 			      size_t count)
 {
 	return pldm__msgbuf_insert_array_void(ctx, src, count);
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_insert_array_uint8(struct pldm_msgbuf *ctx, const uint8_t *src,
 			       size_t count)
 {
@@ -1025,9 +1022,9 @@
 		uint8_t: pldm_msgbuf_insert_array_uint8,                       \
 		char: pldm_msgbuf_insert_array_char)(dst, src, count)
 
-__attribute__((always_inline)) static inline int
-pldm_msgbuf_span_required(struct pldm_msgbuf *ctx, size_t required,
-			  void **cursor)
+LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_span_required(struct pldm_msgbuf *ctx,
+						       size_t required,
+						       void **cursor)
 {
 	assert(ctx);
 
@@ -1056,7 +1053,7 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_span_string_ascii(struct pldm_msgbuf *ctx, void **cursor,
 			      size_t *length)
 {
@@ -1111,7 +1108,7 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_span_string_utf16(struct pldm_msgbuf *ctx, void **cursor,
 			      size_t *length)
 {
@@ -1192,7 +1189,7 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_span_remaining(struct pldm_msgbuf *ctx, void **cursor, size_t *len)
 {
 	assert(ctx);
@@ -1228,7 +1225,7 @@
  */
 #define pldm_msgbuf_copy(dst, src, type, name)                                 \
 	pldm__msgbuf_copy(dst, src, sizeof(type), #name)
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
 pldm__msgbuf_copy(struct pldm_msgbuf *dst, struct pldm_msgbuf *src, size_t size,
 		  const char *description)
@@ -1274,7 +1271,7 @@
 	return 0;
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_copy_string_ascii(struct pldm_msgbuf *dst, struct pldm_msgbuf *src)
 {
 	void *ascii = NULL;
@@ -1289,7 +1286,7 @@
 	return pldm__msgbuf_insert_array_void(dst, ascii, len);
 }
 
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_copy_string_utf16(struct pldm_msgbuf *dst, struct pldm_msgbuf *src)
 {
 	void *utf16 = NULL;
