diff --git a/include/lib/libc/aarch32/stdint_.h b/include/lib/libc/aarch32/stdint_.h
index 4f494859f488616a166e9e52b7be3161e7f3ccd7..def24aabcbf0883e4c22e7b9f19101d7702e9edb 100644
--- a/include/lib/libc/aarch32/stdint_.h
+++ b/include/lib/libc/aarch32/stdint_.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -111,6 +111,10 @@ typedef unsigned long long uint64_fast_t;
 typedef long intptr_t;
 typedef unsigned long uintptr_t;
 
+/*
+ * Conceptually, these are supposed to be the largest integers representable in C,
+ * but GCC and Clang define them as long long for compatibility.
+ */
 typedef long long intmax_t;
 typedef unsigned long long uintmax_t;
 
diff --git a/include/lib/libc/aarch64/stdint_.h b/include/lib/libc/aarch64/stdint_.h
index b17a435b08b196b323663784d93ef841532b3b21..25680bbd63c732f9953cf7b5352f998b1b8dfc5f 100644
--- a/include/lib/libc/aarch64/stdint_.h
+++ b/include/lib/libc/aarch64/stdint_.h
@@ -75,7 +75,7 @@
 #define UINT32_C(x) x ## U
 #define UINT64_C(x) x ## ULL
 
-#define INTMAX_C(x)  x ## L
+#define INTMAX_C(x)  x ## LL
 #define UINTMAX_C(x) x ## ULL
 
 typedef signed char int8_t;
@@ -111,8 +111,12 @@ typedef unsigned long long uint64_fast_t;
 typedef long intptr_t;
 typedef unsigned long uintptr_t;
 
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
+/*
+ * Conceptually, these are supposed to be the largest integers representable in C,
+ * but GCC and Clang define them as long long for compatibility.
+ */
+typedef long long intmax_t;
+typedef unsigned long long uintmax_t;
 
 typedef long register_t;
 typedef unsigned long u_register_t;