diff --git a/meta-oe/recipes-support/poco/poco/0004-CheckAtomic-Keep-atomic-test-programs-from-being-opt.patch b/meta-oe/recipes-support/poco/poco/0004-CheckAtomic-Keep-atomic-test-programs-from-being-opt.patch
new file mode 100644
index 0000000000..0cc17d7dbb
--- /dev/null
+++ b/meta-oe/recipes-support/poco/poco/0004-CheckAtomic-Keep-atomic-test-programs-from-being-opt.patch
@@ -0,0 +1,62 @@
+From: Khem Raj <khem.raj@oss.qualcomm.com>
+Date: Tue, 20 Oct 2026 23:30:00 -0700
+Subject: [PATCH] CheckAtomic: Keep atomic test programs from being optimized
+ away
+
+The libatomic checks load from a local std::atomic that never escapes.
+When CMAKE_CXX_FLAGS contain -O2, as distro builds usually do, clang
+folds the load to a constant, so the test program links without
+libatomic even on targets that need it for 64-bit atomics, such as
+riscv32. Poco_ATOMIC_LIBRARIES then stays empty and the build fails
+later when linking against PocoFoundation:
+
+  ld.lld: error: undefined reference: __atomic_fetch_add_8
+  ld.lld: error: undefined symbol: __atomic_load_8
+
+Make the atomic variables global and modify them with a
+read-modify-write operation that depends on argc, so the compiler has
+to emit the atomic operations at any optimization level.
+
+Upstream-Status: Submitted [https://github.com/pocoproject/poco/pull/5585]
+Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
+---
+ cmake/CheckAtomic.cmake | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+--- a/cmake/CheckAtomic.cmake
++++ b/cmake/CheckAtomic.cmake
+@@ -8,12 +8,17 @@
+
+ # MSVC and Apple don't ship/need a separate libatomic.
+ if(NOT MSVC AND NOT APPLE)
++    # The atomic variables in the test programs are global and modified with
++    # a read-modify-write operation, otherwise the compiler can fold them away
++    # when optimizing and the check passes even though libatomic is needed.
++
+     # 1) 32-bit atomics
+     check_cxx_source_compiles("
+ 	#include <atomic>
+-	int main() {
+-	    std::atomic<int> x(0);
+-	    return x.load(std::memory_order_relaxed);
++	std::atomic<int> x(0);
++	int main(int argc, char **) {
++	    x.fetch_add(argc);
++	    return x.load();
+ 	}
+     " POCO_HAVE_CXX_ATOMICS32)
+
+@@ -28,9 +33,10 @@
+     check_cxx_source_compiles("
+ 	#include <atomic>
+ 	#include <cstdint>
+-	int main() {
+-	    std::atomic<uint64_t> x(0);
+-	    return (int)x.load(std::memory_order_relaxed);
++	std::atomic<uint64_t> x(0);
++	int main(int argc, char **) {
++	    x.fetch_add(static_cast<uint64_t>(argc));
++	    return static_cast<int>(x.load());
+ 	}
+     " POCO_HAVE_CXX_ATOMICS64)
+
diff --git a/meta-oe/recipes-support/poco/poco_1.15.4.bb b/meta-oe/recipes-support/poco/poco_1.15.4.bb
index f4c572d4ae..0751165267 100644
--- a/meta-oe/recipes-support/poco/poco_1.15.4.bb
+++ b/meta-oe/recipes-support/poco/poco_1.15.4.bb
@@ -12,6 +12,7 @@ SRC_URI = "git://github.com/pocoproject/poco.git;branch=poco-${PV};protocol=http
            file://0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch \
            file://0002-DataTest-disable-testSQLChannel-test.patch \
            file://0003-quill-rdtsc-fallback-for-32-bit-powerpc.patch \
+           file://0004-CheckAtomic-Keep-atomic-test-programs-from-being-opt.patch \
            file://run-ptest \
            "
 SRCREV = "6a5667f432e1c5fe5591025ab03a2f8df37116b4"
