bcraig added a comment.

> 1. A normal operating system target with a "hosted" libc.
> 2. A baremetal target with an "embedded" libc; basically a stripped down libc 
> which only includes stuff that doesn't require an operating system.  What 
> exactly this includes varies; may include some form of "malloc", some "POSIX" 
> APIs, semihosting, etc.
> 3. A baremetal target with no libc, using custom implementations for 
> everything.  This is what we conventionally referred to as "freestanding", 
> and what -ffreestanding implements.  The user provides memcpy/memmove/memset, 
> and uses the compiler-provided "builtins" lib if neceessary, but nothing we 
> would traditionally call "libc".

In my committee work, I'm targeting option 2.  I think that's what should be 
considered when talking about freestanding in a standards context.

Option 3 is valuable and should continue to exist, but it is non-conforming 
pre-C23 and post-C23.  The standards don't have any provision for requiring the 
user to implement mem* functions that the implementation chooses to invoke 
without the user ever spelling that function call (perhaps because they did 
`char buf[256] = {0}` though).  Post-C23, it doesn't provide enough.  The C 
library authors will likely need this mode to author the C library itself 
though.  I'll suggest calling this mode something like "nodefaultlibs".


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144889/new/

https://reviews.llvm.org/D144889

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to