[clang] [llvm] Implement a more seamless way to provide missing functions on z/OS (PR #167703)
Sean Perry via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 18 10:59:01 PST 2025
https://github.com/perry-ca updated https://github.com/llvm/llvm-project/pull/167703
>From 6db3e611fd5799d102572dd16c612b0d560a0f95 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 11 Nov 2025 00:36:10 -0500
Subject: [PATCH 1/6] Use wrapper to get for strnlen/strsignal
---
clang/lib/AST/ByteCode/Context.cpp | 1 -
llvm/CMakeLists.txt | 5 ++
.../include/llvm/Support/SystemZ/zOSSupport.h | 47 -------------------
.../Support/SystemZ/zos_wrappers/string.h | 35 ++++++++++++++
llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp | 1 -
llvm/lib/ObjCopy/MachO/MachOObject.cpp | 1 -
llvm/lib/ObjCopy/MachO/MachOReader.cpp | 1 -
llvm/lib/ObjectYAML/MachOEmitter.cpp | 1 -
llvm/lib/ObjectYAML/MachOYAML.cpp | 1 -
llvm/lib/Support/CMakeLists.txt | 6 +++
llvm/lib/Support/Unix/Program.inc | 1 -
llvm/lib/Support/zOSLibFunctions.cpp | 37 +++++++++++++++
.../llvm-exegesis/lib/BenchmarkRunner.cpp | 1 -
llvm/tools/llvm-exegesis/lib/Error.cpp | 1 -
llvm/tools/llvm-readobj/ELFDumper.cpp | 1 -
llvm/tools/llvm-readobj/ObjDumper.cpp | 1 -
llvm/tools/obj2yaml/macho2yaml.cpp | 1 -
17 files changed, 83 insertions(+), 59 deletions(-)
delete mode 100644 llvm/include/llvm/Support/SystemZ/zOSSupport.h
create mode 100644 llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
create mode 100644 llvm/lib/Support/zOSLibFunctions.cpp
diff --git a/clang/lib/AST/ByteCode/Context.cpp b/clang/lib/AST/ByteCode/Context.cpp
index 12bf3a3954b1b..74ec986e49ca7 100644
--- a/clang/lib/AST/ByteCode/Context.cpp
+++ b/clang/lib/AST/ByteCode/Context.cpp
@@ -21,7 +21,6 @@
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Expr.h"
#include "clang/Basic/TargetInfo.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
using namespace clang;
using namespace clang::interp;
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index f192cd05b5a34..eac38f3e17572 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -1294,6 +1294,11 @@ if(LLVM_TARGET_IS_CROSSCOMPILE_HOST)
# (this is a variable that CrossCompile sets on recursive invocations)
endif()
+# Special hack for z/OS for missing POSIX functions
+if (CMAKE_SYSTEM_NAME MATCHES "OS390")
+ include_directories(SYSTEM "${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/SystemZ/zos_wrappers" )
+endif()
+
if( "${CMAKE_SYSTEM_NAME}" MATCHES SunOS )
# special hack for Solaris to handle crazy system sys/regset.h
include_directories("${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/Solaris")
diff --git a/llvm/include/llvm/Support/SystemZ/zOSSupport.h b/llvm/include/llvm/Support/SystemZ/zOSSupport.h
deleted file mode 100644
index f9a61f887d5dd..0000000000000
--- a/llvm/include/llvm/Support/SystemZ/zOSSupport.h
+++ /dev/null
@@ -1,47 +0,0 @@
-//===- zOSSupport.h - Common z/OS Include File ------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines z/OS implementations for common functions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_SUPPORT_ZOSSUPPORT_H
-#define LLVM_SUPPORT_ZOSSUPPORT_H
-
-#ifdef __MVS__
-#include <sys/resource.h>
-#include <sys/wait.h>
-
-// z/OS Unix System Services does not have strsignal() support, so the
-// strsignal() function is implemented here.
-inline char *strsignal(int sig) {
- static char msg[256];
- sprintf(msg, "%d", sig);
- return msg;
-}
-
-// z/OS Unix System Services does not have wait4() support, so the wait4
-// function is implemented here.
-inline pid_t wait4(pid_t pid, int *wstatus, int options,
- struct rusage *rusage) {
- pid_t Result = waitpid(pid, wstatus, options);
- int GetrusageRC = getrusage(RUSAGE_CHILDREN, rusage);
- assert(!GetrusageRC && "Must have valid measure of the resources!");
- return Result;
-}
-
-// z/OS Unix System Services does not have strnlen() support, so the strnlen()
-// function is implemented here.
-inline std::size_t strnlen(const char *S, std::size_t MaxLen) {
- const char *PtrToNullChar =
- static_cast<const char *>(std::memchr(S, '\0', MaxLen));
- return PtrToNullChar ? PtrToNullChar - S : MaxLen;
-}
-
-#endif
-#endif
diff --git a/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h b/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
new file mode 100644
index 0000000000000..5b998e16431bd
--- /dev/null
+++ b/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
@@ -0,0 +1,35 @@
+//===- string.h - Common z/OS Include File ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares z/OS implementations for common functions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_ZOSWRAPPER_STRING_H
+#define LLVM_SUPPORT_ZOSWRAPPER_STRING_H
+
+#include_next <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// z/OS Unix System Services does not have support for:
+// - strsignal()
+// - strnlen()
+// Implementations are provided for z/OS.
+
+char *strsignal(int sig) asm("llvm_zos_strsignal");
+
+size_t strnlen(const char *S, size_t MaxLen) asm("llvm_zos_strnlen");
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp b/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp
index 93bc6631e64c8..8660c903c617d 100644
--- a/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp
+++ b/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp
@@ -10,7 +10,6 @@
#include "llvm/Support/Alignment.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
using namespace llvm;
using namespace llvm::objcopy::macho;
diff --git a/llvm/lib/ObjCopy/MachO/MachOObject.cpp b/llvm/lib/ObjCopy/MachO/MachOObject.cpp
index 8d2c02dc37c99..8f7f54c99bddc 100644
--- a/llvm/lib/ObjCopy/MachO/MachOObject.cpp
+++ b/llvm/lib/ObjCopy/MachO/MachOObject.cpp
@@ -8,7 +8,6 @@
#include "MachOObject.h"
#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include <unordered_set>
using namespace llvm;
diff --git a/llvm/lib/ObjCopy/MachO/MachOReader.cpp b/llvm/lib/ObjCopy/MachO/MachOReader.cpp
index 2b344f36d8e78..dd4d60deccbb8 100644
--- a/llvm/lib/ObjCopy/MachO/MachOReader.cpp
+++ b/llvm/lib/ObjCopy/MachO/MachOReader.cpp
@@ -10,7 +10,6 @@
#include "MachOObject.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/Object/MachO.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include <memory>
using namespace llvm;
diff --git a/llvm/lib/ObjectYAML/MachOEmitter.cpp b/llvm/lib/ObjectYAML/MachOEmitter.cpp
index 35d442e8e3437..e32de0b288fe4 100644
--- a/llvm/lib/ObjectYAML/MachOEmitter.cpp
+++ b/llvm/lib/ObjectYAML/MachOEmitter.cpp
@@ -20,7 +20,6 @@
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/YAMLTraits.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp
index 133358d395928..32015ddeb3618 100644
--- a/llvm/lib/ObjectYAML/MachOYAML.cpp
+++ b/llvm/lib/ObjectYAML/MachOYAML.cpp
@@ -15,7 +15,6 @@
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/TargetParser/Host.h"
#include <cstdint>
#include <cstring>
diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
index 671a5fe941cef..9c6abf7a292e5 100644
--- a/llvm/lib/Support/CMakeLists.txt
+++ b/llvm/lib/Support/CMakeLists.txt
@@ -125,6 +125,10 @@ if(LLVM_INTEGRATED_CRT_ALLOC)
endif()
endif()
+#if (CMAKE_SYSTEM_NAME MATCHES "OS390")
+ set(ZOSLIB_FILES "zOSLibFunctions.cpp")
+#endif()
+
# FIXME: We are currently guarding AIX headers with _XOPEN_SOURCE=700.
# See llvm/CMakeLists.txt. However, we need _SC_NPROCESSORS_ONLN in
# unistd.h and it is guarded by _ALL_SOURCE, so we remove the _XOPEN_SOURCE
@@ -294,6 +298,8 @@ add_llvm_component_library(LLVMSupport
xxhash.cpp
Z3Solver.cpp
+ ${ZOSLIB_FILES}
+
${ALLOCATOR_FILES}
$<TARGET_OBJECTS:LLVMSupportBlake3>
diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc
index 4f17b2257a756..1b5e7bd6403a1 100644
--- a/llvm/lib/Support/Unix/Program.inc
+++ b/llvm/lib/Support/Unix/Program.inc
@@ -26,7 +26,6 @@
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/StringSaver.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
#include <sys/stat.h>
#include <sys/resource.h>
diff --git a/llvm/lib/Support/zOSLibFunctions.cpp b/llvm/lib/Support/zOSLibFunctions.cpp
new file mode 100644
index 0000000000000..f24bdd475f7ad
--- /dev/null
+++ b/llvm/lib/Support/zOSLibFunctions.cpp
@@ -0,0 +1,37 @@
+//===-- zOSLibFunctions.cpp -----------------------------------------------===//
+////
+//// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+//// See https://llvm.org/LICENSE.txt for license information.
+//// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+////
+////===--------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+//
+// This file defines z/OS implementations for common functions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifdef __MVS__
+#include <stdio.h>
+#include <string.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+
+
+// z/OS Unix System Services does not have strsignal() support, so the
+// strsignal() function is implemented here.
+char *strsignal(int sig) {
+ static char msg[256];
+ sprintf(msg, "%d", sig);
+ return msg;
+}
+
+// z/OS Unix System Services does not have strnlen() support, so the strnlen()
+// function is implemented here.
+size_t strnlen(const char *S, size_t MaxLen) {
+ const char *PtrToNullChar =
+ static_cast<const char *>(memchr(S, '\0', MaxLen));
+ return PtrToNullChar ? PtrToNullChar - S : MaxLen;
+}
+#endif
diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
index 12fad7d57444f..a86be13f24882 100644
--- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
+++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
@@ -27,7 +27,6 @@
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/Signals.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include <cmath>
#include <memory>
#include <string>
diff --git a/llvm/tools/llvm-exegesis/lib/Error.cpp b/llvm/tools/llvm-exegesis/lib/Error.cpp
index 2908df25ddb1a..9024ba5ceb524 100644
--- a/llvm/tools/llvm-exegesis/lib/Error.cpp
+++ b/llvm/tools/llvm-exegesis/lib/Error.cpp
@@ -10,7 +10,6 @@
#include "llvm/Config/llvm-config.h" // for LLVM_ON_UNIX
#ifdef LLVM_ON_UNIX
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include <string.h>
#endif // LLVM_ON_UNIX
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 6f09da5a4099f..2b5bc631afd8d 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -61,7 +61,6 @@
#include "llvm/Support/RISCVAttributeParser.h"
#include "llvm/Support/RISCVAttributes.h"
#include "llvm/Support/ScopedPrinter.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <array>
diff --git a/llvm/tools/llvm-readobj/ObjDumper.cpp b/llvm/tools/llvm-readobj/ObjDumper.cpp
index 20e027aa5a5ef..1d193573b4776 100644
--- a/llvm/tools/llvm-readobj/ObjDumper.cpp
+++ b/llvm/tools/llvm-readobj/ObjDumper.cpp
@@ -21,7 +21,6 @@
#include "llvm/Support/Error.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/ScopedPrinter.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
#include <map>
diff --git a/llvm/tools/obj2yaml/macho2yaml.cpp b/llvm/tools/obj2yaml/macho2yaml.cpp
index 00220123e8189..f78ec8f3c265a 100644
--- a/llvm/tools/obj2yaml/macho2yaml.cpp
+++ b/llvm/tools/obj2yaml/macho2yaml.cpp
@@ -15,7 +15,6 @@
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/LEB128.h"
-#include "llvm/Support/SystemZ/zOSSupport.h"
#include <string.h> // for memcpy
>From 2afefdc256414b39627b3d77ee21e63b31727af4 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 11 Nov 2025 13:47:11 -0500
Subject: [PATCH 2/6] Add names for signals
---
llvm/lib/Support/zOSLibFunctions.cpp | 47 +++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Support/zOSLibFunctions.cpp b/llvm/lib/Support/zOSLibFunctions.cpp
index f24bdd475f7ad..32f496f7d450e 100644
--- a/llvm/lib/Support/zOSLibFunctions.cpp
+++ b/llvm/lib/Support/zOSLibFunctions.cpp
@@ -19,11 +19,56 @@
#include <sys/wait.h>
+char *signalName[] = {
+ /* 0 */ nullptr,
+ /* 1 */ "Hangup", // SIGHUP - Posix
+ /* 2 */ "Interrupt", // SIGINT
+ /* 3 */ "Aborted", // SIGABRT
+ /* 4 */ "Illegal instruction", // SIGILL
+ /* 5 */ "Polling event", // SIGPOLL
+ /* 6 */ "Socket data available", // SIGURG
+ /* 7 */ "Stopped (signal)", // SIGSTOP - Posix
+ /* 8 */ "Floating point exception", // SIGFPE
+ /* 9 */ "Killed", // SIGKILL - Posix
+ /* 10 */ "Bus error", // SIGBUS
+ /* 11 */ "Segmentation fault", // SIGSEGV
+ /* 12 */ "Bad system call", // SIGSYS
+ /* 13 */ "Broken pipe", // SIGPIPE - Posix
+ /* 14 */ "Alarm clock", // SIGALRM - Posix
+ /* 15 */ "Terminated", // SIGTERM
+ /* 16 */ "User defined signal 1", // SIGUSR1
+ /* 17 */ "User defined signal 2", // SIGUSR2
+ /* 18 */ "Abend", // SIGABND
+ /* 19 */ "Continued", // SIGCONT - Posix
+ /* 20 */ "Child exited", // SIGCHLD - Posix
+ /* 21 */ "Stopped (tty input)", // SIGTTIN - Posix
+ /* 22 */ "Stopped (tty output)", // SIGTTOU - Posix
+ /* 23 */ "I/O complete", // SIGIO
+ /* 24 */ "Quit", // SIGQUIT - Posix
+ /* 25 */ "Stopped", // SIGTSTP - Posix
+ /* 26 */ "Trace/breakpoint trap", // SIGTRAP
+ /* 27 */ "I/O error", // SIGIOERR
+ /* 28 */ "Window changed", // SIGWINCH
+ /* 29 */ "CPU time limit exceeded", // SIGXCPU
+ /* 30 */ "File size limit exceeded", // SIGXFSZ
+ /* 31 */ "Virtual timer expired", // SIGVTALRM
+ /* 32 */ "Profiling timer expired",
+ /* 33 */ "OMVS subsystem shutdown", // SIGDANGER
+ /* 34 */ "Thread stop", // SIGTHSTOP
+ /* 35 */ "Thread resume", // SIGTHCONT
+ /* 36 */ nullptr,
+ /* 37 */ "Toggle syscall trace", // SIGTRACE
+ /* 38 */ nullptr, // SIGDCE
+ /* 39 */ "System dump", // SIGDUMP - Posix
+};
+
// z/OS Unix System Services does not have strsignal() support, so the
// strsignal() function is implemented here.
char *strsignal(int sig) {
+ if (sig < sizeof(signalName)/sizeof(signalName[0]) && signalName[sig])
+ return signalName[sig];
static char msg[256];
- sprintf(msg, "%d", sig);
+ sprintf(msg, "Unknown signal %d", sig);
return msg;
}
>From bb5329da04a28b6a4e7c7d43d6482029d468f95f Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 11 Nov 2025 22:18:41 +0000
Subject: [PATCH 3/6] build on z/OS
---
llvm/lib/Support/zOSLibFunctions.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Support/zOSLibFunctions.cpp b/llvm/lib/Support/zOSLibFunctions.cpp
index 32f496f7d450e..acbcaa3ac522c 100644
--- a/llvm/lib/Support/zOSLibFunctions.cpp
+++ b/llvm/lib/Support/zOSLibFunctions.cpp
@@ -19,7 +19,7 @@
#include <sys/wait.h>
-char *signalName[] = {
+const char *signalName[] = {
/* 0 */ nullptr,
/* 1 */ "Hangup", // SIGHUP - Posix
/* 2 */ "Interrupt", // SIGINT
@@ -65,8 +65,8 @@ char *signalName[] = {
// z/OS Unix System Services does not have strsignal() support, so the
// strsignal() function is implemented here.
char *strsignal(int sig) {
- if (sig < sizeof(signalName)/sizeof(signalName[0]) && signalName[sig])
- return signalName[sig];
+ if (static_cast<size_t>(sig) < sizeof(signalName)/sizeof(signalName[0]) && signalName[sig])
+ return const_cast<char *>(signalName[sig]);
static char msg[256];
sprintf(msg, "Unknown signal %d", sig);
return msg;
>From 14a2af363130b821b1393e12b6d6e0262495f489 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 12 Nov 2025 14:59:10 +0000
Subject: [PATCH 4/6] clean up make file & source
---
llvm/lib/Support/CMakeLists.txt | 7 +--
llvm/lib/Support/zOSLibFunctions.cpp | 76 ++++++++++++++--------------
2 files changed, 39 insertions(+), 44 deletions(-)
diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
index 9c6abf7a292e5..a0980bda2a212 100644
--- a/llvm/lib/Support/CMakeLists.txt
+++ b/llvm/lib/Support/CMakeLists.txt
@@ -125,10 +125,6 @@ if(LLVM_INTEGRATED_CRT_ALLOC)
endif()
endif()
-#if (CMAKE_SYSTEM_NAME MATCHES "OS390")
- set(ZOSLIB_FILES "zOSLibFunctions.cpp")
-#endif()
-
# FIXME: We are currently guarding AIX headers with _XOPEN_SOURCE=700.
# See llvm/CMakeLists.txt. However, we need _SC_NPROCESSORS_ONLN in
# unistd.h and it is guarded by _ALL_SOURCE, so we remove the _XOPEN_SOURCE
@@ -298,8 +294,6 @@ add_llvm_component_library(LLVMSupport
xxhash.cpp
Z3Solver.cpp
- ${ZOSLIB_FILES}
-
${ALLOCATOR_FILES}
$<TARGET_OBJECTS:LLVMSupportBlake3>
@@ -317,6 +311,7 @@ add_llvm_component_library(LLVMSupport
Threading.cpp
Valgrind.cpp
Watchdog.cpp
+ zOSLibFunctions.cpp
ADDITIONAL_HEADER_DIRS
Unix
diff --git a/llvm/lib/Support/zOSLibFunctions.cpp b/llvm/lib/Support/zOSLibFunctions.cpp
index acbcaa3ac522c..c80d80633de5d 100644
--- a/llvm/lib/Support/zOSLibFunctions.cpp
+++ b/llvm/lib/Support/zOSLibFunctions.cpp
@@ -21,45 +21,45 @@
const char *signalName[] = {
/* 0 */ nullptr,
- /* 1 */ "Hangup", // SIGHUP - Posix
- /* 2 */ "Interrupt", // SIGINT
- /* 3 */ "Aborted", // SIGABRT
- /* 4 */ "Illegal instruction", // SIGILL
- /* 5 */ "Polling event", // SIGPOLL
- /* 6 */ "Socket data available", // SIGURG
- /* 7 */ "Stopped (signal)", // SIGSTOP - Posix
- /* 8 */ "Floating point exception", // SIGFPE
- /* 9 */ "Killed", // SIGKILL - Posix
- /* 10 */ "Bus error", // SIGBUS
- /* 11 */ "Segmentation fault", // SIGSEGV
- /* 12 */ "Bad system call", // SIGSYS
- /* 13 */ "Broken pipe", // SIGPIPE - Posix
- /* 14 */ "Alarm clock", // SIGALRM - Posix
- /* 15 */ "Terminated", // SIGTERM
- /* 16 */ "User defined signal 1", // SIGUSR1
- /* 17 */ "User defined signal 2", // SIGUSR2
- /* 18 */ "Abend", // SIGABND
- /* 19 */ "Continued", // SIGCONT - Posix
- /* 20 */ "Child exited", // SIGCHLD - Posix
- /* 21 */ "Stopped (tty input)", // SIGTTIN - Posix
- /* 22 */ "Stopped (tty output)", // SIGTTOU - Posix
- /* 23 */ "I/O complete", // SIGIO
- /* 24 */ "Quit", // SIGQUIT - Posix
- /* 25 */ "Stopped", // SIGTSTP - Posix
- /* 26 */ "Trace/breakpoint trap", // SIGTRAP
- /* 27 */ "I/O error", // SIGIOERR
- /* 28 */ "Window changed", // SIGWINCH
- /* 29 */ "CPU time limit exceeded", // SIGXCPU
- /* 30 */ "File size limit exceeded", // SIGXFSZ
- /* 31 */ "Virtual timer expired", // SIGVTALRM
- /* 32 */ "Profiling timer expired",
- /* 33 */ "OMVS subsystem shutdown", // SIGDANGER
- /* 34 */ "Thread stop", // SIGTHSTOP
- /* 35 */ "Thread resume", // SIGTHCONT
+ /* 1 */ "Hangup", // SIGHUP
+ /* 2 */ "Interrupt", // SIGINT
+ /* 3 */ "Aborted", // SIGABRT
+ /* 4 */ "Illegal instruction", // SIGILL
+ /* 5 */ "Polling event", // SIGPOLL
+ /* 6 */ "Socket data available", // SIGURG
+ /* 7 */ "Stopped (signal)", // SIGSTOP
+ /* 8 */ "Floating point exception", // SIGFPE
+ /* 9 */ "Killed", // SIGKILL
+ /* 10 */ "Bus error", // SIGBUS
+ /* 11 */ "Segmentation fault", // SIGSEGV
+ /* 12 */ "Bad system call", // SIGSYS
+ /* 13 */ "Broken pipe", // SIGPIPE
+ /* 14 */ "Alarm clock", // SIGALRM
+ /* 15 */ "Terminated", // SIGTERM
+ /* 16 */ "User defined signal 1", // SIGUSR1
+ /* 17 */ "User defined signal 2", // SIGUSR2
+ /* 18 */ "Abend", // SIGABND
+ /* 19 */ "Continued", // SIGCONT
+ /* 20 */ "Child exited", // SIGCHLD
+ /* 21 */ "Stopped (tty input)", // SIGTTIN
+ /* 22 */ "Stopped (tty output)", // SIGTTOU
+ /* 23 */ "I/O complete", // SIGIO
+ /* 24 */ "Quit", // SIGQUIT
+ /* 25 */ "Stopped", // SIGTSTP
+ /* 26 */ "Trace/breakpoint trap", // SIGTRAP
+ /* 27 */ "I/O error", // SIGIOERR
+ /* 28 */ "Window changed", // SIGWINCH
+ /* 29 */ "CPU time limit exceeded", // SIGXCPU
+ /* 30 */ "File size limit exceeded", // SIGXFSZ
+ /* 31 */ "Virtual timer expired", // SIGVTALRM
+ /* 32 */ "Profiling timer expired", // SIGPROF
+ /* 33 */ "OMVS subsystem shutdown", // SIGDANGER
+ /* 34 */ "Thread stop", // SIGTHSTOP
+ /* 35 */ "Thread resume", // SIGTHCONT
/* 36 */ nullptr,
- /* 37 */ "Toggle syscall trace", // SIGTRACE
- /* 38 */ nullptr, // SIGDCE
- /* 39 */ "System dump", // SIGDUMP - Posix
+ /* 37 */ "Toggle syscall trace", // SIGTRACE
+ /* 38 */ nullptr, // SIGDCE
+ /* 39 */ "System dump", // SIGDUMP
};
// z/OS Unix System Services does not have strsignal() support, so the
>From be245cf5756afc200ccde9b7f36150328fa8f42b Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 12 Nov 2025 16:10:42 +0000
Subject: [PATCH 5/6] fix formatting
---
llvm/lib/Support/Unix/Program.inc | 6 +-
llvm/lib/Support/zOSLibFunctions.cpp | 96 ++++++++++++++--------------
2 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc
index 1b5e7bd6403a1..489ca03b30670 100644
--- a/llvm/lib/Support/Unix/Program.inc
+++ b/llvm/lib/Support/Unix/Program.inc
@@ -27,10 +27,10 @@
#include "llvm/Support/Path.h"
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/raw_ostream.h"
-#include <sys/stat.h>
-#include <sys/resource.h>
-#include <signal.h>
#include <fcntl.h>
+#include <signal.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
diff --git a/llvm/lib/Support/zOSLibFunctions.cpp b/llvm/lib/Support/zOSLibFunctions.cpp
index c80d80633de5d..755b44fecba86 100644
--- a/llvm/lib/Support/zOSLibFunctions.cpp
+++ b/llvm/lib/Support/zOSLibFunctions.cpp
@@ -1,10 +1,10 @@
//===-- zOSLibFunctions.cpp -----------------------------------------------===//
-////
-//// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-//// See https://llvm.org/LICENSE.txt for license information.
-//// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-////
-////===--------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
//
@@ -18,54 +18,54 @@
#include <sys/resource.h>
#include <sys/wait.h>
-
const char *signalName[] = {
- /* 0 */ nullptr,
- /* 1 */ "Hangup", // SIGHUP
- /* 2 */ "Interrupt", // SIGINT
- /* 3 */ "Aborted", // SIGABRT
- /* 4 */ "Illegal instruction", // SIGILL
- /* 5 */ "Polling event", // SIGPOLL
- /* 6 */ "Socket data available", // SIGURG
- /* 7 */ "Stopped (signal)", // SIGSTOP
- /* 8 */ "Floating point exception", // SIGFPE
- /* 9 */ "Killed", // SIGKILL
- /* 10 */ "Bus error", // SIGBUS
- /* 11 */ "Segmentation fault", // SIGSEGV
- /* 12 */ "Bad system call", // SIGSYS
- /* 13 */ "Broken pipe", // SIGPIPE
- /* 14 */ "Alarm clock", // SIGALRM
- /* 15 */ "Terminated", // SIGTERM
- /* 16 */ "User defined signal 1", // SIGUSR1
- /* 17 */ "User defined signal 2", // SIGUSR2
- /* 18 */ "Abend", // SIGABND
- /* 19 */ "Continued", // SIGCONT
- /* 20 */ "Child exited", // SIGCHLD
- /* 21 */ "Stopped (tty input)", // SIGTTIN
- /* 22 */ "Stopped (tty output)", // SIGTTOU
- /* 23 */ "I/O complete", // SIGIO
- /* 24 */ "Quit", // SIGQUIT
- /* 25 */ "Stopped", // SIGTSTP
- /* 26 */ "Trace/breakpoint trap", // SIGTRAP
- /* 27 */ "I/O error", // SIGIOERR
- /* 28 */ "Window changed", // SIGWINCH
- /* 29 */ "CPU time limit exceeded", // SIGXCPU
- /* 30 */ "File size limit exceeded", // SIGXFSZ
- /* 31 */ "Virtual timer expired", // SIGVTALRM
- /* 32 */ "Profiling timer expired", // SIGPROF
- /* 33 */ "OMVS subsystem shutdown", // SIGDANGER
- /* 34 */ "Thread stop", // SIGTHSTOP
- /* 35 */ "Thread resume", // SIGTHCONT
- /* 36 */ nullptr,
- /* 37 */ "Toggle syscall trace", // SIGTRACE
- /* 38 */ nullptr, // SIGDCE
- /* 39 */ "System dump", // SIGDUMP
+ /* 0 */ nullptr,
+ /* 1 */ "Hangup", // SIGHUP
+ /* 2 */ "Interrupt", // SIGINT
+ /* 3 */ "Aborted", // SIGABRT
+ /* 4 */ "Illegal instruction", // SIGILL
+ /* 5 */ "Polling event", // SIGPOLL
+ /* 6 */ "Socket data available", // SIGURG
+ /* 7 */ "Stopped (signal)", // SIGSTOP
+ /* 8 */ "Floating point exception", // SIGFPE
+ /* 9 */ "Killed", // SIGKILL
+ /* 10 */ "Bus error", // SIGBUS
+ /* 11 */ "Segmentation fault", // SIGSEGV
+ /* 12 */ "Bad system call", // SIGSYS
+ /* 13 */ "Broken pipe", // SIGPIPE
+ /* 14 */ "Alarm clock", // SIGALRM
+ /* 15 */ "Terminated", // SIGTERM
+ /* 16 */ "User defined signal 1", // SIGUSR1
+ /* 17 */ "User defined signal 2", // SIGUSR2
+ /* 18 */ "Abend", // SIGABND
+ /* 19 */ "Continued", // SIGCONT
+ /* 20 */ "Child exited", // SIGCHLD
+ /* 21 */ "Stopped (tty input)", // SIGTTIN
+ /* 22 */ "Stopped (tty output)", // SIGTTOU
+ /* 23 */ "I/O complete", // SIGIO
+ /* 24 */ "Quit", // SIGQUIT
+ /* 25 */ "Stopped", // SIGTSTP
+ /* 26 */ "Trace/breakpoint trap", // SIGTRAP
+ /* 27 */ "I/O error", // SIGIOERR
+ /* 28 */ "Window changed", // SIGWINCH
+ /* 29 */ "CPU time limit exceeded", // SIGXCPU
+ /* 30 */ "File size limit exceeded", // SIGXFSZ
+ /* 31 */ "Virtual timer expired", // SIGVTALRM
+ /* 32 */ "Profiling timer expired", // SIGPROF
+ /* 33 */ "OMVS subsystem shutdown", // SIGDANGER
+ /* 34 */ "Thread stop", // SIGTHSTOP
+ /* 35 */ "Thread resume", // SIGTHCONT
+ /* 36 */ nullptr, // n/a
+ /* 37 */ "Toggle syscall trace", // SIGTRACE
+ /* 38 */ nullptr, // SIGDCE
+ /* 39 */ "System dump", // SIGDUMP
};
// z/OS Unix System Services does not have strsignal() support, so the
// strsignal() function is implemented here.
char *strsignal(int sig) {
- if (static_cast<size_t>(sig) < sizeof(signalName)/sizeof(signalName[0]) && signalName[sig])
+ if (static_cast<size_t>(sig) < (sizeof(signalName) / sizeof(signalName[0])) &&
+ signalName[sig])
return const_cast<char *>(signalName[sig]);
static char msg[256];
sprintf(msg, "Unknown signal %d", sig);
>From 625d015b1e797ae49afc91a774b6546c902a0fe8 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 12 Nov 2025 11:48:55 -0500
Subject: [PATCH 6/6] Update
llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
Co-authored-by: Zibi Sarbinowski <zibi at ca.ibm.com>
---
llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h b/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
index 5b998e16431bd..865eb8800397f 100644
--- a/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
+++ b/llvm/include/llvm/Support/SystemZ/zos_wrappers/string.h
@@ -10,8 +10,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_SUPPORT_ZOSWRAPPER_STRING_H
-#define LLVM_SUPPORT_ZOSWRAPPER_STRING_H
+#ifndef LLVM_SUPPORT_ZOSWRAPPERS_STRING_H
+#define LLVM_SUPPORT_ZOSWRAPPERS_STRING_H
#include_next <string.h>
More information about the llvm-commits
mailing list