Commit Graph

167 Commits

Author SHA1 Message Date
Gabor Greif
2408ea94aa Fix references to musl version 2020-04-01 11:25:51 -07:00
Dan Gohman
41af0db30f
Makefile refactoring; NFC (#186)
* Use ?= for variables intended to be overridable.

* Use `override` consistently for variables not meant to be overridden.

* Omit miscellaneous comments from the build output.

* Tidy up some comments.

* Use `addprefix` to factor out a common prefix.

* Add a comment.

* Reorganize.

* Adjust indentation.

* Simplify the logic for the `check` rule.

* Remove the `override` keywords.

They theoretically protect what the Makefile considers to be
implementation details from being overridden on the command-line,
but in practice this isn't super important, and they add a lot of
clutter.

* Put source file names on their own lines.
2020-03-20 15:45:37 -07:00
Dan Gohman
9efc2f4283
Lazy-initialize the environment variables. (#184)
* Lazy-initialize the environment variables.

This is the first in a series of PRs to make it easier to use WASI libc
in Wasm modules that don't have a `main` function. By initializing the
environment on demand, we avoid depending on having `__wasm_call_ctors`
run.

This uses weak symbols strategically to ensure that if `environ` is
used, it is initialized eagerly, but if only `getenv` and friends
are used, the environment is initialized lazily.

Eventually, I expect we'll have a convention for wasm modules without
main functions which will allow the `__wasm_call_ctors` function to be
called automatically, but this helps in simple cases for now.

Fixes #180.

* Add comments explaining the libc-environ-compat.h header usage.
2020-03-19 09:32:41 -07:00
Sam Clegg
38b930a26b
Fix -std=gnu17 when generating predefined_macros.txt (#187)
* Fix -std=gnu11 when generating predefined_macros.txt

The default recently changed in upstream clang:
https://reviews.llvm.org/D75383

We want to be immune to such things when generating this list so that
we can build wasi-libc with any recent clang version.

* 17
2020-03-18 04:26:57 -07:00
Dan Gohman
42e6901e58 Mention libcxx and libcxxabi too. 2020-03-17 17:44:08 -07:00
Dan Gohman
c33ea73e0e Update WASI Libc's README.md.
Update the description, point users to wasi-sdk as a simpler place to
get started using this library, and remove old text about being a
"reference" implementation.
2020-03-17 17:44:08 -07:00
Dan Gohman
0cc57ac7b4
Multi-license wasi-libc under Apache and MIT licenses. (#174)
Multi-license wasi-libc under the Apache-2.0 WITH LLVM-exception,
Apache-2.0, and MIT licenses.
2020-02-29 10:52:28 +01:00
Dan Gohman
d9066a87c0 Add support for __main_argc_argv.
This adds support for the `__main_argc_argv` change, while preserving
compatibility with `__original_main`. This is needed by the LTO build
because the `__original_main` hack works in LLVM codegen, which is after
LTO. The `__main_argc_argv` change is implemented in clang, which makes
it properly visible to LTO.
2020-02-27 13:09:38 -08:00
Dan Gohman
575e1579a4 Update to musl 1.2.0.
See the WHATSNEW file for details. The biggest change in musl is the
switch to 64-bit time_t for 32-bit targets, however WASI libc was already
using 64-bit time_t. The main change affecting WASI is an update to
Unicode 12.1.0.
2020-02-26 10:23:05 -08:00
Dan Gohman
79a9b40837 Update to musl 1.1.24.
See the WHATSNEW file for details; this doesn't have any major changes
for wasi-libc; in particular, the new catgets and GLOB_TILDE features
are disabled.
2020-02-26 10:23:05 -08:00
Pat Hickey
e1149ab067 point at WASI with tagged unions merged into master 2020-02-24 11:36:05 -08:00
Pat Hickey
ec63fd5e9c rebased wasi repo branch 2020-02-24 11:36:05 -08:00
Pat Hickey
b3c57f19a3 main: get more useful help by requiring subcommand
fake required arguments are no good
2020-02-24 11:36:05 -08:00
Pat Hickey
d415ae65e1 minor change in union AST in wasi- tag is namedtype 2020-02-24 11:36:05 -08:00
Pat Hickey
3de8c71d06 libc: change to flattened event struct 2020-02-24 11:36:05 -08:00
Pat Hickey
7f8930168f update to WASI where snashot event_u flattened to struct 2020-02-24 11:36:05 -08:00
Pat Hickey
c2ae180dee cloudlibc & libpreopen: changes for tagged unions
we decided to abandon the upstream code guarded by
 #ifdef __wasilibc_unmodified_upstream // non-anonymous unions
because these changes are sprawling and those guards are of diminishing
importance
2020-02-24 11:36:05 -08:00
Pat Hickey
852d093a3c wasi/api.h: regenerated with tagged unions 2020-02-24 11:36:05 -08:00
Pat Hickey
4f03c9bbe7 WASI: tagged unions PR wip 2020-02-24 11:36:05 -08:00
Pat Hickey
71d279a4b0 wasi-headers: unions are tagged now 2020-02-24 11:36:05 -08:00
Dan Gohman
3af77075aa
Define a_clz_32 for musl so that it doesn't use a software version. (#171) 2020-02-21 11:41:05 -08:00
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