[llvm-dev] RFC: Adding support for the z/OS platform to LLVM and clang

Kai Peter Nacke via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 18 05:02:07 PDT 2020


Thanks for the feedback!

As summary,
- some concerns about added complexity and testability were expressed
- details of the encoding conversion in the clang frontend were discussed

For these kinds of discussion, it's best to have a look at the source, so 
I created the first Phabricator review: https://reviews.llvm.org/D82081 

Thanks again!

Best regards,
Kai Nacke
IT Architect

IBM Deutschland GmbH
Vorsitzender des Aufsichtsrats: Sebastian Krause
Geschäftsführung: Gregor Pillen (Vorsitzender), Agnes Heftberger, Norbert 
Janzen, Markus Koerner, Christian Noll, Nicole Reimer
Sitz der Gesellschaft: Ehningen / Registergericht: Amtsgericht Stuttgart, 
HRB 14562 / WEEE-Reg.-Nr. DE 99369940

"llvm-dev" <llvm-dev-bounces at lists.llvm.org> wrote on 10.06.2020 21:11:05:

> From: Kai Peter Nacke via llvm-dev <llvm-dev at lists.llvm.org>
> To: llvm-dev at lists.llvm.org
> Date: 10.06.2020 21:11
> Subject: [EXTERNAL] [llvm-dev] RFC: Adding support for the z/OS 
> platform to LLVM and clang
> Sent by: "llvm-dev" <llvm-dev-bounces at lists.llvm.org>
> 
> As part of IBM’s ongoing efforts to improve the z/OS ecosystem, our 
> current plans involve adding support for the z/OS platform to LLVM and 
> Clang. Our goal is to have a viable C and C++ LLVM compiler and runtime 
> library that generates code for, and runs on z/OS.
> 
> Long term, we expect to have a compiler and library that supports the 
> platform more fully. We intend to support the native character encoding 
> (EBCDIC), file system - z/OS UNIX System Services (z/OS UNIX) files and 
> datasets, addressing modes (31-bit and 64-bit, and possibly 24-bit), 
> different floating and fixed point formats, systems programming 
> capabilities, language co-processors, and generating code output in the 
> z/OS object file formats (GOFF and XOBJ).
> 
> The tentative plan is to initially support the z/OS Unix System Services 

> (z/OS UNIX) interface with EBCDIC and ASCII 64-bit code generation. In 
> particular, our intent would be to focus on:
> 1) C++ standard library support. We would be making changes to the 
library 
> so it can work on z/OS.  We would need some design discussions with the 
> community for issues such as character encodings.
> 2) EBCDIC source file input. We would need reviews at the Clang level 
when 
> dealing with reading source files and dealing with multiple code pages.
> 3) GOFF object file output. We would need reviews in LLVM to add a new 
> object file output format.
> Our plans include setting up z/OS build bots and we will update the list 

> when we have them ready to go.
> 
> To begin, we plan to add patches that would:
> - Set the new triple for z/OS
> - Make changes to the build recipes and tools (cmake, etc.) as needed to 

> allow building for z/OS
> Following that, we intend to start on the focus areas listed above:
> 
> 1) Add patches to enable building and using the C++ standard library on 
> z/OS. In particular, issues dealing with EBCDIC would need to be 
> addressed. We would need to have functions in the headers (e.g. 
iostream) 
> that work on ASCII encoded strings, and functions that work on EBCDIC 
> encoded strings. These would need to work with the underlying system C 
> library (e.g. printf) that provides the actual functionality. For 
example, 
> currently, the z/OS C library has (at least) two sets of functions 
(ASCII 
> and EBCDIC versions). The one used by the application is selected at 
> compile time during the system header file processing which selects the 
> correct function via mapping the programmer function name (e.g. printf) 
> into one that the application will link to (e.g. __printf for EBCDIC and 

> \174\174A00118 for ASCII). We would also add patches to disable 
> functionality when on z/OS where there is no support for the 
> functionality. For example, thread specific locales would be disabled 
when 
> in a non-POSIX mode.
>   Our intent is that follow on patches would incrementally add support 
in 
> tandem with the compiler for features that require it and for other z/OS 

> specifics such as various floating/fixed point formats.
> 
> 2) Add patches to Clang to allow EBCDIC and ASCII (ISO-8859-1) encoded 
> input source files. This would be done at the file open time to allow 
the 
> rest of Clang to operate as if the source was UTF-8 and so require no 
> changes downstream. Feedback on this plan is welcome from the Clang 
> community.
>   Our intent is that later patches would handle execution character set 
> differences. Collaboration with the community here would be useful in 
> areas such as adding in exec-charset and library selection options and 
> strategies.
>   Our intent is also to make changes to support any platform issues, 
> processing native C header files, and idiosyncrasies on z/OS such as 
> having no native strnlen function. We would update test tooling to 
handle 
> character encoding issues as needed. Further design discussion will take 

> place on the Clang mailing list.
> 
> 3) Add patches to LLVM that will stub out GOFF object binary generation. 

> We would not be generating assembly (HLASM in z/OS), and instead only 
> generate the binary object directly for the initial round of changes. 
> Assembly generation would follow in later stages once we have a working 
> compiler on z/OS. Feedback on this plan of direction is appreciated.
>   Our intent is that patches that incrementally add support for GOFF 
> object generation such as code sections and records would follow. The 
next 
> steps after support for the object file format would be handling the 
z/OS 
> XPLINK calling convention. This would involve changes to both Clang and 
> LLVM and we intend to follow the same style of functional component 
> responsibility as is done for other platforms calling conventions. If we 

> believe deviations from this is necessary, we plan on notifying the 
> community and ensuring the reasons behind the deviations are valid and 
> accepted.
> 
> Any feedback or comments are welcome.
> 
> Notice: IBM’s statements regarding its plans, directions, and intent are 

> subject to change or withdrawal without notice at IBM’s sole discretion. 

> Information regarding potential future products is intended to outline 
our 
> general product direction and it should not be relied on in making a 
> purchasing decision. The information mentioned regarding potential 
future 
> products is not a commitment, promise, or legal obligation to deliver 
any 
> material, code or functionality. Information about potential future 
> products may not be incorporated into any contract. The development, 
> release, and timing of any future features or functionality described 
for 
> our products remains at our sole discretion.
> 
> Best regards,
> Kai Nacke
> IT Architect
> 
> IBM Deutschland GmbH
> Vorsitzender des Aufsichtsrats: Sebastian Krause
> Geschäftsführung: Gregor Pillen (Vorsitzender), Agnes Heftberger, 
Norbert 
> Janzen, Markus Koerner, Christian Noll, Nicole Reimer
> Sitz der Gesellschaft: Ehningen / Registergericht: Amtsgericht 
Stuttgart, 
> HRB 14562 / WEEE-Reg.-Nr. DE 99369940
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://urldefense.proofpoint.com/v2/url?
> 
u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIGaQ&c=jf_iaSHvJObTbx-
> siA1ZOg&r=43FMMTMN1rMQYLfzcfWYI9JmFbjyCLLZVkpxUNJkDuQ&m=yMqyEWU-
> 
Y3yQdOvsfp9HBkSwlDeLE5A9ZydkH_73SZk&s=ymE6YLFHNgGyUlKieWzvyvY5QV4ycTojjrma8Uz_rhs&e=
> 




More information about the llvm-dev mailing list