Commit Graph

938 Commits

Author SHA1 Message Date
Tatsuyuki Ishi
8ecbec1dba Use mprotect instead of mmap 2018-03-28 18:47:16 +09:00
Diggory Blake
04f6692aaf Implement shrink_to method on collections 2018-03-27 01:39:11 +01:00
Tatsuyuki Ishi
d39b02c2c9 Use a more conservative way to deinit stack guard 2018-03-25 16:08:03 +09:00
bors
482a913fb3 Auto merge of #49315 - TheDan64:smaller_unsafe_block, r=joshtriplett
Reduce scope of unsafe block in sun_path_offset

I reduced the scope of the unsafe block to the `uninitialized` call which is the only actual unsafe bit.
2018-03-25 05:26:58 +00:00
Tatsuyuki Ishi
9127990434 Fix build on non-Unix platforms 2018-03-24 13:49:08 +09:00
Daniel Kolsoi
fdde09c70c Reduce scope of unsafe block in sun_path_offset 2018-03-23 17:01:34 -04:00
Bryan Drewery
70559c54ce Command::env_saw_path() may be unused on platforms not using posix_spawn() 2018-03-22 09:49:20 -07:00
Tatsuyuki Ishi
2928c7a8a2 Refactor the stack addr aligning code into a function 2018-03-20 22:53:38 +09:00
Bryan Drewery
6212904dd8 Don't use posix_spawn() if PATH was modified in the environment.
The expected behavior is that the environment's PATH should be used
to find the process.  posix_spawn() could be used if we iterated
PATH to search for the binary to execute.  For now just skip
posix_spawn() if PATH is modified.
2018-03-19 15:40:09 -07:00
Bryan Drewery
00dac20e01 Merge branch 'update-beta-freebsd' into freebsd-posix-spawn 2018-03-19 13:11:55 -07:00
Tatsuyuki Ishi
a185b56b7c Address review comments 2018-03-19 11:41:28 +09:00
Alex Crichton
de3a63d663 Rollup merge of #48618 - scottmcm:elaborate-exitcode, r=alexcrichton
Better docs and associated SUCCESS/FAILURE for process::ExitCode

Follow-up to https://github.com/rust-lang/rust/pull/48497#discussion_r170676525, since that PR was the minimal thing to unblock https://github.com/rust-lang/rust/issues/48453#issuecomment-368155082.

r? @nikomatsakis
2018-03-06 23:38:06 -08:00
Scott McMurray
74c5c6e6cb Move process::ExitCode internals to sys
Now begins the saga of fixing compilation errors on other platforms...
2018-03-03 18:44:44 -08:00
Manish Goregaokar
8bf026df5b Rollup merge of #48328 - frewsxcv:frewsxcv-clarify-error-zero-duration, r=sfackler
Fixes #47311.
r? @nrc
2018-03-02 22:01:20 -08:00
Bryan Drewery
d740083fc8 Support posix_spawn() for Linux glibc 2.24+.
The relevant support was added in https://sourceware.org/bugzilla/show_bug.cgi?id=10354#c12
2018-03-02 13:08:04 -08:00
Bryan Drewery
5ba6b3a728 Move glibc version lookup handling to sys::os and add a simpler glibc_version() 2018-03-02 12:54:03 -08:00
Bryan Drewery
99b50efb6e Use _ 2018-03-02 08:50:37 -08:00
Bryan Drewery
ef73b3ae2e Add comment explaining when posix_spawn() can be supported. 2018-03-01 09:18:16 -08:00
Bryan Drewery
2e2d9260f9 posix_spawn() on OSX supports returning ENOENT. 2018-03-01 09:17:49 -08:00
Bryan Drewery
a9ea876960 posix_spawn() always returns its error rather than setting errno. 2018-02-28 22:16:35 -08:00
Bryan Drewery
85b82f254e Support posix_spawn() for FreeBSD.
spawn() is expected to return an error if the specified file could not be
executed.  FreeBSD's posix_spawn() supports returning ENOENT/ENOEXEC if
the exec() fails, which not all platforms support.  This brings a very
significant performance improvement for FreeBSD, involving heavy use of
Command in threads, due to fork() invoking jemalloc fork handlers and
causing lock contention.  FreeBSD's posix_spawn() avoids this problem
due to using vfork() internally.
2018-02-28 15:36:32 -08:00
Bryan Drewery
b3ecf5f57c Remove excess newline 2018-02-28 15:36:32 -08:00
Bryan Drewery
8e3fa0d3c4 Pass proper pointer for envp. 2018-02-28 15:36:32 -08:00
Bryan Drewery
94630e4ca5 No need to zero when an initializer for the object is already used. 2018-02-28 15:36:32 -08:00
Bryan Drewery
f4633865d3 Avoid error for unused variables 2018-02-28 15:36:31 -08:00
Alex Crichton
11696acd6d Support posix_spawn() when possible. 2018-02-28 15:35:59 -08:00
kennytm
1aa103511b Rollup merge of #48330 - frewsxcv:frewsxcv-tests-zero-duration, r=sfackler
Add tests ensuring zero-Duration timeouts result in errors; fix Redox issues.

Part of #48311
2018-02-25 22:47:56 +08:00
Corey Farwell
0700bd12d0 Clarify "It is an error to..." wording for zero-duration behaviors.
Documentation fix side of https://github.com/rust-lang/rust/issues/48311.
2018-02-24 08:56:36 -05:00
Corey Farwell
d17d645ad7 Add tests ensuring zero-Duration timeouts result in errors.
Part of https://github.com/rust-lang/rust/issues/48311
2018-02-18 21:42:02 -05:00
Corey Farwell
472dcdb4ec Fix broken documentation link. 2018-02-17 20:57:00 -05:00
Josh Stone
55b54a999b Use a range to identify SIGSEGV in stack guards
Previously, the `guard::init()` and `guard::current()` functions were
returning a `usize` address representing the top of the stack guard,
respectively for the main thread and for spawned threads.  The `SIGSEGV`
handler on `unix` targets checked if a fault was within one page below
that address, if so reporting it as a stack overflow.

Now `unix` targets report a `Range<usize>` representing the guard
memory, so it can cover arbitrary guard sizes.  Non-`unix` targets which
always return `None` for guards now do so with `Option<!>`, so they
don't pay any overhead.

For `linux-gnu` in particular, the previous guard upper-bound was
`stackaddr + guardsize`, as the protected memory was *inside* the stack.
This was a glibc bug, and starting from 2.27 they are moving the guard
*past* the end of the stack.  However, there's no simple way for us to
know where the guard page actually lies, so now we declare it as the
whole range of `stackaddr ± guardsize`, and any fault therein will be
called a stack overflow.  This fixes #47863.
2018-01-31 11:41:29 -08:00
kennytm
4dbfc8ddbf Rollup merge of #47760 - little-dude:master, r=alexcrichton
implement Send for process::Command on unix

closes https://github.com/rust-lang/rust/issues/47751
2018-01-30 17:10:53 +08:00
Corentin Henry
9e6ed17c4f make Command.argv Send on unix platforms
Implementing Send for a specific field rather than the whole struct is
safer: if a field is changed/modified and becomes non-Send, we can catch
it.
2018-01-26 07:22:58 -08:00
John Kåre Alsaker
634f8cc06a Print inlined functions on Windows 2018-01-26 04:49:54 +01:00
Corentin Henry
831ff77570 implement Send for process::Command on unix
closes https://github.com/rust-lang/rust/issues/47751
2018-01-25 15:14:38 -08:00
Guillaume Gomez
ab54a9c73c Rollup merge of #47334 - etaoins:only-call-res-init-on-gnu-unix, r=alexcrichton
Only link res_init() on GNU/*nix

To workaround a bug in glibc <= 2.26 lookup_host() calls res_init() based on the glibc version detected at runtime. While this avoids calling res_init() on platforms where it's not required we will still end up linking against the symbol.

This causes an issue on macOS where res_init() is implemented in a separate library (libresolv.9.dylib) from the main libc. While this is harmless for standalone programs it becomes a problem if Rust code is statically linked against another program. If the linked program doesn't already specify -lresolv it will cause the link to fail. This is captured in issue #46797

Fix this by hooking in to the glibc workaround in `cvt_gai` and only activating it for the "gnu" environment on Unix This should include all glibc platforms while excluding musl, windows-gnu, macOS, FreeBSD, etc.

This has the side benefit of removing the #[cfg] in sys_common; only unix.rs has code related to the workaround now.

Before this commit:
```shell
> cat main.rs
use std::net::ToSocketAddrs;

#[no_mangle]
pub extern "C" fn resolve_test() -> () {
    let addr_list = ("google.com.au", 0).to_socket_addrs().unwrap();
    println!("{:?}", addr_list);
}
> rustc --crate-type=staticlib main.rs
> clang libmain.a test.c -o combined
Undefined symbols for architecture x86_64:
  "_res_9_init", referenced from:
      std::net::lookup_host::h93c17fe9ad38464a in libmain.a(std-826c8d3b356e180c.std0.rcgu.o)
ld: symbol(s) not found for architecture x86_64
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)
```

Afterwards:
```shell
> rustc --crate-type=staticlib main.rs
> clang libmain.a test.c -o combined
> ./combined
IntoIter([V4(172.217.25.131:0)])
```

Fixes  #46797
2018-01-21 23:11:38 +01:00
Zack M. Davis
14982db2d6 in which the unused-parens lint comes to cover function and method args
Resolves #46137.
2018-01-18 08:33:58 -08:00
Ryan Cumming
090a968fe7 Only link res_init() on GNU/*nix
To workaround a bug in glibc <= 2.26 lookup_host() calls res_init()
based on the glibc version detected at runtime. While this avoids
calling res_init() on platforms where it's not required we will still
end up linking against the symbol.

This causes an issue on macOS where res_init() is implemented in a
separate library (libresolv.9.dylib) from the main libc. While this is
harmless for standalone programs it becomes a problem if Rust code is
statically linked against another program. If the linked program doesn't
already specify -lresolv it will cause the link to fail. This is
captured in issue #46797

Fix this by hooking in to the glibc workaround in `cvt_gai` and only
activating it for the "gnu" environment on Unix This should include all
glibc platforms while excluding musl, windows-gnu, macOS, FreeBSD, etc.

This has the side benefit of removing the #[cfg] in sys_common; only
unix.rs has code related to the workaround now.
2018-01-16 06:30:44 +11:00
Matt Brubeck
91c3eee173 [unix] Don't clone command-line args on startup 2018-01-04 15:11:39 -08:00
bors
8c59418962 Auto merge of #46713 - Manishearth:memchr, r=bluss
Use memchr to speed up [u8]::contains 3x

None
2017-12-31 16:38:10 +00:00
bors
a6fc84440f Auto merge of #46914 - mikeyhew:raw_pointer_self, r=arielb1
Convert warning about `*const _` to a future-compat lint

#46664 was merged before I could convert the soft warning about method lookup on `*const _` into a future-compatibility lint. This PR makes that change.

fixes #46837
tracking issue for the future-compatibility lint: #46906

r? @arielb1
2017-12-25 04:55:57 +00:00
bors
c284f8807e Auto merge of #46789 - Diggsey:command-env-capture, r=dtolnay
Capture `Command` environment at spawn

Fixes #28975

This tracks a set of changes to the environment and then replays them at spawn time.
2017-12-24 20:57:20 +00:00
Diggory Blake
ccc91d7b48 Capture environment at spawn 2017-12-24 14:24:31 +00:00
Michael Hewson
e94b29065f fix some errors in libstd 2017-12-22 12:40:39 -05:00
Vitaly _Vi Shukela
1d5ead453d Add Hash impl for SystemTime and Instant
Closes #46670.
2017-12-19 00:35:43 +03:00
Diggory Blake
8fac7d95bc Add lossless debug implementation for unix OsStrs 2017-12-18 01:52:56 +00:00
Manish Goregaokar
2bf0df777b Move rust memchr impl to libcore 2017-12-13 01:15:18 -06:00
Matt Brubeck
3024c1434a Use Try syntax for Option in place of macros or match 2017-12-09 14:18:33 -08:00
Jonathan A. Kollasch
ccef9696f1 NetBSD: add sysctl backend for std::env::current_exe
Use the CTL_KERN.KERN_PROC_ARGS.-1.KERN_PROC_PATHNAME sysctl in
preference over the /proc/curproc/exe symlink.

Additionally, perform more validation of aformentioned symlink.
Particularly on pre-8.x NetBSD this symlink will point to '/' when
accurate information is unavailable.
2017-11-30 12:17:44 -06:00
Murarth
1bbc776446 Implement Rc/Arc conversions for string-like types
Provides the following conversion implementations:

* `From<`{`CString`,`&CStr`}`>` for {`Arc`,`Rc`}`<CStr>`
* `From<`{`OsString`,`&OsStr`}`>` for {`Arc`,`Rc`}`<OsStr>`
* `From<`{`PathBuf`,`&Path`}`>` for {`Arc`,`Rc`}`<Path>`
2017-11-25 22:13:11 -07:00