-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[Docs] Document freestanding requirements #132232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
5008e3c
e6bcd39
537dc66
d593347
6576792
b88b4a0
74bbff4
bcd5db3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1073,6 +1073,27 @@ inputs. Here is some example of ``$``-prefixed options: | |
| Language and Target-Independent Features | ||
| ======================================== | ||
|
|
||
| Freestanding Builds | ||
| ------------------- | ||
| Passing the ``-ffreestanding`` flag causes Clang to build for a freestanding | ||
| (rather than a hosted) environment. The flag has the following effects: | ||
|
|
||
| * the ``__STDC_HOSTED__`` predefined macro will expand to ``0``, | ||
| * builtin functions are disabled (``-fno-builtins``), and | ||
| * unwind tables are disabled (``fno-asynchronous-unwind-tables -fno-unwind-tables``) | ||
|
|
||
| A freestanding environment is not one which has no C standard library support. | ||
|
||
| A conforming freestanding C standard library implementation is required. Clang | ||
| supplies some of the header files needed for a freestanding execution, such as | ||
| ``<stdarg.h>``, ``<limits.h>``, ``<stdint.h>``, etc. However, Clang still | ||
| requires the runtime freestanding library to provide the interfaces required by | ||
| Clause 4 (Conformance) of the C standard. Additionally, Clang requires the | ||
| following runtime interfaces to be provided: | ||
|
|
||
| * `memcpy`, | ||
| * `memmove`, and | ||
| * `memset`. | ||
|
|
||
| Controlling Errors and Warnings | ||
| ------------------------------- | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -534,11 +534,6 @@ <h2 id="c2x">C23 implementation status</h2> | |
| <td class="full" align="center">Clang 16</td> | ||
| </tr> | ||
| <!-- Apr 2021 Papers --> | ||
| <tr> | ||
| <td>String functions for freestanding implementations</td> | ||
| <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2524.htm">N2524</a></td> | ||
| <td class="none" align="center">No</td> | ||
| </tr> | ||
|
Comment on lines
-537
to
-541
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Although the PR description said:
It seem to me that the status will become less clear due to removal of the entry.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We don't typically document anything which the compiler isn't required to provide (for example, we don't really list other things from the C standard library). We could add an WDYT?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. FWIW we list all the LWG papers and issues in the libc++ docs, and IMO it's useful. That makes it clear whether we've considered the paper/issue and what our conclusion was. Since most papers by far require changes, it's also really not cluttering the list too much.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a bit different though -- libc++ lists library issues and papers, not Core issues and papers, because it's an implementation of the library. In this case, Clang doesn't provide any libc functionality, so we typically do not list any C Standard Library papers (just the core wording papers). But freestanding can either be "the compiler provides this" or "the library provides this". In this case, the library provides this, so I don't think it makes sense to list it as a feature the compiler needs to provide.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. N2359 applies to the compiler because it introduces new potentially reserved identifiers we may want to diagnose and it changes behavior of limits.h which Clang provides. N2951 applies to the compiler because it imposes some requirements on freestanding regarding But yes, cleaning these up in a later PR is a good idea. FWIW, I've been removing ones as I realize they don't impact the compiler.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm, yeah. I guess the call what is compiler and library is a bit less explicit in C, since there isn't a CWG/LWG distinction. I guess we also only list CWG papers that affect the library in some way and not all of them. |
||
| <tr> | ||
| <td>Digit separators</td> | ||
| <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2626.pdf">N2626</a></td> | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.