diff --git a/src/compiler.h b/src/compiler.h
index e704518..3657471 100644
--- a/src/compiler.h
+++ b/src/compiler.h
@@ -9,12 +9,15 @@
 #include <assert.h>
 
 static struct {
+	static_assert(__has_attribute(always_inline),
+		      "`always_inline` attribute is required");
 	static_assert(__has_attribute(unused),
 		      "`unused` attribute is required");
 	int compliance;
 } pldm_required_attributes __attribute__((unused));
 
-#define LIBPLDM_CC_UNUSED __attribute__((unused))
+#define LIBPLDM_CC_ALWAYS_INLINE __attribute__((always_inline)) static inline
+#define LIBPLDM_CC_UNUSED	 __attribute__((unused))
 
 // NOLINTBEGIN(bugprone-macro-parentheses)
 /**
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;
diff --git a/src/msgbuf/platform.h b/src/msgbuf/platform.h
index c52a66d..11f0900 100644
--- a/src/msgbuf/platform.h
+++ b/src/msgbuf/platform.h
@@ -2,6 +2,7 @@
 #ifndef PLDM_MSGBUF_PLATFORM_H
 #define PLDM_MSGBUF_PLATFORM_H
 
+#include "../compiler.h"
 #include "../msgbuf.h"
 #include <libpldm/base.h>
 #include <libpldm/platform.h>
@@ -19,14 +20,7 @@
 	return pldm_msgbuf_validate(ctx);
 }
 
-/*
- * We use __attribute__((always_inline)) below so the compiler has visibility of
- * the switch() at the call site. It is often the case that the size of multiple
- * fields depends on the tag. Inlining thus gives the compiler visibility to
- * hoist one tag-based code-path condition to cover all invocations.
- */
-
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_extract_sensor_data(struct pldm_msgbuf *ctx,
 				enum pldm_sensor_readings_data_type tag,
 				union_sensor_data_size *dst)
@@ -54,7 +48,7 @@
  * have used the approach used by callers of pldm_msgbuf_extract_sensor_data()
  * above
  */
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_extract_sensor_value(struct pldm_msgbuf *ctx,
 				 enum pldm_sensor_readings_data_type tag,
 				 void *val)
@@ -81,10 +75,8 @@
 	pldm_msgbuf_extract_typecheck(union_range_field_format,                \
 				      pldm__msgbuf_extract_range_field_format, \
 				      dst, ctx, tag, (void *)&(dst))
-__attribute__((always_inline)) static inline int
-pldm__msgbuf_extract_range_field_format(struct pldm_msgbuf *ctx,
-					enum pldm_range_field_format tag,
-					void *rff)
+LIBPLDM_CC_ALWAYS_INLINE int pldm__msgbuf_extract_range_field_format(
+	struct pldm_msgbuf *ctx, enum pldm_range_field_format tag, void *rff)
 {
 	switch (tag) {
 	case PLDM_RANGE_FIELD_FORMAT_UINT8:
@@ -121,7 +113,7 @@
 }
 
 /* This API is bad, but it's because the caller's APIs are also bad */
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm_msgbuf_extract_effecter_value(struct pldm_msgbuf *ctx,
 				   enum pldm_effecter_data_size tag, void *dst)
 {
@@ -147,7 +139,7 @@
 	pldm_msgbuf_extract_typecheck(union_effecter_data_size,                \
 				      pldm__msgbuf_extract_range_field_format, \
 				      dst, ctx, tag, (void *)&(dst))
-__attribute__((always_inline)) static inline int
+LIBPLDM_CC_ALWAYS_INLINE int
 pldm__msgbuf_extract_effecter_data(struct pldm_msgbuf *ctx,
 				   enum pldm_effecter_data_size tag, void *ed)
 {
