Commit Graph

146 Commits

Author SHA1 Message Date
Dan Gohman
af92c5f9b3
WASI libc supports environment variables; update the README. (#172) 2020-02-21 11:40:41 -08:00
Dan Gohman
870a25121b
Remove unused cloudlibc headers. (#170) 2020-02-21 11:40:23 -08:00
Pat Hickey
5933c205df fix macos filename, use https 2020-02-20 09:23:32 -08:00
Pat Hickey
7c39519ec4 CI: upgrade to llvm 9.0.0 2020-02-20 09:23:32 -08:00
Pat Hickey
9ca5187170 remove no-self-update workaround for windows azure 2020-02-19 14:12:43 -08:00
Pat Hickey
9580a25927 deprecate azure pipelines CI, build libc on GH Actions 2020-02-19 14:12:43 -08:00
Dan Gohman
2c2fc9a2fd
Don't call free on paths which are about to call _Exit. (#161)
This is a minor code-size optimization.
2020-02-14 14:02:59 -08:00
Pat Hickey
c6f2c0517f
gen-headers: Generate assertions of layout from witx (#149)
* use pch/layout branch for witx; generate assertions of layout

* address review comments, add asserts for handle

* change wasm32 support comment to a preprocessor error

* expose `to_c_header` in wasi-headers crate for use in external test harness

* main.rs: inputs and output arguments are optional

so that generate-libc command works

* regen header
2020-02-07 13:21:18 -08:00
Daniel Bevenius
37c663f2f0
Correct minor typo in c_headers.rs (#166)
The header api.h was update using the following command:
$ cd tools/wasi-headers
$ cargo run -- WASI/phases/snapshot/witx/typenames.witx \
  WASI/phases/snapshot/witx/wasi_snapshot_preview1.witx \
  --output ../../libc-bottom-half/headers/public/wasi/api.h
2020-02-07 05:18:10 -08:00
Dan Gohman
12f5832b45
Convert more wasi-libc code to //-style comments. (#153)
This is purely a style change, in accordance with #116.
2020-01-16 16:00:37 -08:00
Pat Hickey
ec86d4dec4
Improvements to wasi-headers tool (#160)
* wasi-headers: update WASI submodule, handle changes to witx ast

* wasi-headers: restructure lib and exe to be more flexible

just factor out some of the hard-coded stuff
2020-01-14 14:24:12 -08:00
Dan Gohman
1fad33890a
Fix environment variable init to exit successfully. (#159)
This fixes https://github.com/bytecodealliance/wasmtime/issues/783.
2020-01-14 09:56:58 -08:00
Dan Gohman
a280fead2a
Move math source files. (#151)
This is split out from the LTO change. It's needed by the LTO build so
that we can easily build these files in non-LTO mode, since they satisfy
calls emitted by LLVM codegen after LTO.
2019-12-20 15:43:31 -08:00
Dan Gohman
dd010beea5
Avoid using cast expressions in WASI API constants. (#148)
Cast expressions aren't valid to use in some preprocessor constants, so
change the constants to use `UINT32_C` etc. instead of casts.

Fixes #146.
2019-12-16 13:29:06 -08:00
Sam Clegg
f645f498df Update signal macros after upgrade to snapshot1 (#144)
This should probably have been part of #140 but we don't actually
support signals so this doesn't get much testing I imagine.

The old names like `__WASI_SIGBUS` no longer exist and the new names
look like `__WASI_SIGNAL_BUS`.
2019-12-03 09:23:40 -08:00
Sam Clegg
8b3266db92
github actions: pin checkout action to v1 (#145)
master now contains a new v2 beta version of this action that no longer
supports "submodules".   We can update to v2 later once it stabilizes.
2019-12-03 11:15:26 -06:00
Dan Gohman
410c66070a
Use constructor functions for optional init routines. (#142)
* Use constructor functions for optional init routines.

Instead of using weak symbols, use constructor function attributes for the
environment and preopen initialization routines. This is simpler, uses
less code, and is more LTO-friendly.

* Change the constructor priorities to start at 50.

We don't currently have specific plans for other levels in the reserved
range (0-100), so leave room for both lower and higher priorities.
2019-11-25 14:04:45 -08:00
Pat Hickey
fe130532ae
c header generation updated for reorganized witx ast (#139) 2019-11-22 13:06:12 -05:00
Dan Gohman
cd74e1d988
Correct the version of #136 on master (#141)
* Add the WASI repo as a submodule.

Also, add the witx filenames to the generated output, and just have
`cargo run` auto-generate the api.h header, rather than using clap.

* Switch witx to a path dependency.

* Add a test.

* Add a test that the generated file is in sync with the generator.

* Enable CI testing with Github Actions.

* Fix the name of the wasi-headers directory.

* Enable submodules.

* Add a diff mechanism to help explain failures.

* Sort the inputs for display.

* More debugging.

* More debugging.

* Add a .gitattributes file forcing text files to be eol=lf.

Most editors these days can deal with eof=lf files, even on Windows, and
this avoids trouble with headers and other generated files differing in
line endings.
2019-11-21 20:55:26 -08:00
Dan Gohman
446cb3f1aa
Wasi snapshot preview1 (#140)
* Make __wasi_linkcount_t a uint64_t (#134)

Refs: https://github.com/WebAssembly/WASI/pull/127

* Generate the WASI interface from witx.

This replaces the hand-maintained <wasi/core.h> header with a
<wasi/api.h> generated from witx.

Most of the churn here is caused by upstream WASI renamings; hopefully
in the future ABI updates will be less noisy.
2019-11-21 20:06:00 -08:00
Dan Gohman
54102f06a9
Ignore rights in libpreopen. (#129)
Don't ignore paths which don't have the required rights. This means
that if the lookup finds a path that doesn't have the required
rights, it'll just proceed to the actual operation which will fail
with `ENOTCAPABLE`.

Intuitively, use cases which would depend on having multiple
overlapping matching paths for a given lookup and intelligently
picking the one with the required rights seems like they should
be uncommon.

This is simpler overall, and requires less code.
2019-11-21 15:49:51 -08:00
Dan Gohman
8c9e1c64a8
Make the __original_main definition weak, fixing -flto. (#138) 2019-11-20 11:35:47 -08:00
Dan Gohman
cf81683e77
Optimize fmin, fmax, etc. (#120)
Use wasm's builtin min and max operators to implement libc `fmin`,
`fmax, `fminf`, and `fmaxf`, by handling the NaN cases explicitly.

Credit to https://github.com/emscripten-core/emscripten/pull/9689
for spotting this opportunity!
2019-11-20 11:13:45 -08:00
Dan Gohman
deb8eae418
Don't pre-check capabilities in openat. (#130)
Rely on the WASI implementation to check capabilities flags, rather
than also checking them in the userspace `openat` implementation.

This code is admittedly getting fairly dense with `#ifdef`s, so it
may soon make sense to move this file out of the `cloudlibc`
directory and removing the upstream change markers.
2019-11-10 06:39:00 -08:00
Dan Gohman
ca9046d872
Use consistent style for wasi-libc C source files. (#131)
For now, this means using `//`-style comments in .c source files (though
not public header files), and spaces rather than tabs. No strong opinion
here; this is just what the majority of the current code is using.

This also synchronizes basics/crt/crt1.c with libc-bottom-half's
version, though this is just a cleanup as the former isn't currently used
by the main wasi-libc build.
2019-11-08 11:59:57 -08:00
Dan Gohman
951cc3eceb
Fix unintended recursion in __wasilibc_register_preopened_fd. (#133) 2019-11-08 11:44:18 -08:00
Dan Gohman
5216983ad7
Avoid a strdup call in __wasilibc_populate_libpreopen. (#128)
* Avoid a `strdup` call in `__wasilibc_populate_libpreopen`.

Optimize `__wasilibc_populate_libpreopen` to avoid calling `strdup` in
the common case where it's called from `__wasilibc_populate_libpreopen`.

* Convert an if into a ?:.
2019-11-08 11:31:44 -08:00
Dan Gohman
70099d4d1c
Don't link in libpreopen initialization code when it isn't needed. (#127)
* Avoid linking in `populate_libpreopen` when it isn't needed.

* Merge adjacent `if`s using `&&`.
2019-11-08 11:08:22 -08:00
Dan Gohman
ec4549dabc
Temporarily disable the use of __heap_base. (#132)
This temporarily disables the feature in
a214f1c0b1, since it hits LLVM bug
43613, which is fixed on LLVM master and awaiting a backport to
the 9.0 branch.

https://bugs.llvm.org/show_bug.cgi?id=43613
2019-11-07 13:09:31 -08:00
vms
a214f1c0b1 Use __heap_base by dlmalloc (#114)
* add explicit allocator initialization

* move init to a better place

* fix warnings

* add __wasilibc_try_init_allocator

* move initialization to dlmalloc()

* fix typos

* fix identations

* follow style guide

* review changes
2019-11-05 12:52:51 -08:00
Dan Gohman
a94d2d04e7
Avoid varargs conventions when calling open (#126)
* Add an entrypoint for calling open that bypasses the varargs.

* Add an entrypoint for calling openat that bypasses the varargs.
2019-11-04 16:37:45 -08:00
Dan Gohman
7fcc4f29df
Revamp and simplify the libpreopen code. (#110)
wasi-libc's copy of libpreopen has evolved so many local changes that
it's no longer worth keeping the upstream code structure and marking
changes with __wasilibc_unmodified_upstream.

This PR merges the source files into a single file, removes all
__wasilibc_unmodified_upstream code, eliminates the ability to
allocate multiple preopen lists, eliminates the need for
__wasilibc_init_preopen, eliminates the non-standard eaccess, and
makes several other cleanups. It also enables NDEBUG so that internal
assertions are disabled in release builds.
2019-11-04 14:56:35 -08:00
Dan Gohman
eb7230cf94
Remove more unsupported headers. (#123)
utime.h, sysmacros.h, and libintl.h are all currently unsupported.
Removing them helps programs that autodetect features based on the
existence of headers.
2019-11-04 13:17:03 -08:00
Dan Gohman
ec3ee5e985
Avoid using user identifiers in function declarations. (#124)
MultiSource/Benchmarks/McCat in llvm-test-suite has a macro named
`n`, so rename function parameters to avoid colliding.
2019-10-28 11:08:12 -07:00
Dan Gohman
8048aeb500
Don't build bind_textdomain_codeset.c (#122)
`bind_textdomain_codeset` without the rest of libintl.h isn't useful
without the rest of gettext.
2019-10-28 10:35:45 -07:00
Dan Gohman
a8a5dbcf91
Ensure __environ is initialized even when it's empty. (#125)
POSIX requires `environ` to be a pointer to a NULL-terminated array of
pointers, so it itself can't be NULL.

This fixes a regression in src/functional/env.c in wasi-libc-test.
2019-10-28 10:34:57 -07:00
Dan Gohman
afbf94c39e
Call populate_args only if we actually need command-line arguments (#112)
* Link `populate_args` only if we actually need command-line arguments.

This avoids linking in the argv/argc initialization code,
and the __wasi_args_sizes_get and __wasi_args_get imports, in
programs that don't use command-line arguments. The way this works is,
if the user writes `int main(int argc, char *argv[])`, the argument
initialization code is loaded, and if they write `int main(void)`,
it's not loaded.

This promotes the `__original_main` mechanism into an effective contract
between the compiler and libc, which wasn't its original purpose,
however it seems to fit this purpose quite well.

* Document that `__original_main` may be the user's zero-arg `main`.
2019-10-24 17:30:46 -07:00
Dan Gohman
1f11b91e7f
Fix corner cases and style in the argv/argc code. (#118)
This fixes some potential memory leaks in pathological situations, and
updates the code to use `//`-style comments.
2019-10-22 11:25:19 -07:00
Dan Gohman
289fdce22b
Workaround a bug causing Windows CI failures. (#119)
This works around [this bug], which manifests as

```
error: could not remove 'setup' file: 'C:\Users\VssAdministrator\.cargo\bin/rustup-init.exe'
info: caused by: Access is denied. (os error 5)
```

as suggested by [this comment].

[this bug]: https://github.com/microsoft/azure-pipelines-image-generation/issues/1224
[this comment]: https://github.com/CraneStation/wasi-libc/pull/118#issuecomment-544978683
2019-10-22 08:00:48 -07:00
Dan Gohman
bdfbb54520
Call populate_environ only if we actually need environment variables. (#109)
* Link `populate_environ` only if we actually need environment variables.

This avoids linking in the environment variable initialization code,
and the __wasi_environ_sizes_get and __wasi_environ_get imports, in
programs that don't use environment variables.

This also removes the "___environ" (three underscores) alias symbol,
which is only in musl for backwards compatibility.

* Switch to //-style comments.

* If malloc fails, don't leave `__environ` pointing to an uninitialized buffer.

* Fix a memory leak if one malloc succeeds and the other fails.

* Use calloc to handle multiplication overflow.

This also handles the NULL terminator.

* Don't initialize __environ until everything has succeeded.

* Avoid leaking in case __wasi_environ_get fails.

* Handle overflow in the add too.

* Add #include <stdlib.h> for malloc etc.

* If the environment is empty, don't allocate any memory.
2019-10-22 06:02:44 -07:00
vms
d253aa3de2 Make sbrk(0) deterministic (#115)
* fix the behavior of sbrk(0)

* review changes
2019-10-21 15:44:23 -07:00
Dan Gohman
b59b83cbc2
Miscellaneous cleanups (#113)
* Tidy up some #include names.

* Move non-cloudlibc sources out of the cloudlibc directory.
2019-10-18 13:53:13 -07:00
vms
c54004fcce fix the typo (#108)
* fix the typo
2019-10-14 14:52:10 -07:00
Dan Gohman
78b8651224
Remove -fno-builtin. (#104)
* Remove -fno-builtin.

-fno-builtin suppresses optimizations such as turning calls to `sqrt`
or `fabs` into `f64.sqrt` or `f64.abs` instructions inline. Libc code
itself benefits from these optimizations.

I originally added this flag because historically it was needed when
building libc to avoid the compiler pattern-matching the body of memcpy
into a memcpy call, however clang no longer requires this.

* Expand the comment about why we use USE_DL_PREFIX in dlmalloc.
2019-10-11 05:07:34 -07:00
Dan Gohman
472b213bb6 Don't define readdir64_r.
wasi-libc doesn't define readdir_r, so don't define readdir64_r as an
alias for it.
2019-10-07 08:59:55 -07:00
Dan Gohman
33e8b5189b Omit musl's stdarg.h and stddef.h from the sysroot.
We already use the compiler's versions of these; this just moves from
having libc #include_next them to having libc just omit them entirely,
which is simpler.

This removes the special code to define musl's include guard, however
I originally added that when I was still working out how WASI's stddef.h
would interact with other code. I believe it's no longer important.
2019-10-07 08:59:24 -07:00
Dan Gohman
1f40984219 Factor out the include-file exclude list into a variable.
This also starts categorizing these headers into groups and adding
comments explaining their purpose.
2019-10-07 08:59:24 -07:00
Dan Gohman
447ea829a9 Add a CODE_OF_CONDUCT.md file. (#101) 2019-10-03 14:15:49 +02:00
Dan Gohman
c9a573306f Set the MALLOC_ALIGNMENT to 16.
This isn't strictly required, as wasm SIMD loads and stores work on
unaligned memory. However, it may provide better performance. That said,
this isn't currently studied by any benchmarking.
2019-09-07 07:22:18 -07:00
Sam Clegg
c35f0f5dd6 When checking undefined symbol list, ignore certain llvm buildins
These can vary between llvm version.  For example a recent upstream
change recently added __multi3 to the list:
https://reviews.llvm.org/D65143

Fixes #98
2019-08-29 20:39:11 -07:00