Commit Graph

2386 Commits

Author SHA1 Message Date
bors
ac7201bc02 Auto merge of #1070 - redox-os:relibc, r=alexcrichton
Add additional Redox OS functions

This adds `chown`, `fchown`, `setenv`, and `unsetenv` to the `redox` module, and reorders the functions by name
2018-08-24 21:38:38 +00:00
Jeremy Soller
919dd7c8fc Fix style 2018-08-24 14:49:54 -06:00
Jeremy Soller
15085c211e
Merge branch 'master' into relibc 2018-08-24 13:55:14 -06:00
Alex Crichton
1844a772b6
Merge pull request #1069 from cramertj/undo-fuchsia-repr-fix
Undo division of in6_addr on Fuchsia
2018-08-24 11:45:32 -07:00
Taylor Cramer
a0a4f8cc04 Undo division of in6_addr on Fuchsia 2018-08-24 11:41:02 -07:00
bors
f8e6b002b2 Auto merge of #1068 - gnzlbg:patch-1, r=alexcrichton
sparc64 tests are passing again

Closes #1064 .
2018-08-24 16:19:56 +00:00
gnzlbg
381d3e908b
sparc64 tests are passing again
Closes #1064 .
2018-08-24 13:29:30 +02:00
bors
0f2d4f993c Auto merge of #1067 - cramertj:fuchsia-fixes, r=alexcrichton
Fix and cleanup Fuchsia

Remove false support for power and mips.
Fix aarch64 definitions of nlink_t and blksize_t.

r? @alexcrichton

cc @sulanov
2018-08-22 23:14:52 +00:00
Taylor Cramer
2f593709ca Fix and cleanup Fuchsia
Remove false support for power and mips.
Fix aarch64 definitions of nlink_t and blksize_t.
2018-08-22 12:32:10 -07:00
Jeremy Soller
660a4feb87 Add chown/fchown 2018-08-19 11:37:40 -06:00
bors
7a9f031d87 Auto merge of #1065 - eeyun:eeyun/solaris_termios, r=alexcrichton
Add TIOCGWINSZ accessor to solaris module

Signed-off-by: Ian Henry <ihenry@chef.io>

I recently noticed downstream that these request values were unavailable and needed for things like [the pb crate](https://github.com/a8m/pb). To get access to the request value I ran the following simple C code:
```
#include <sys/ioctl.h>
#include <stdio.h>
#include <sys/termios.h>

int main(int argc, char **argv) {
    printf("Code: 0x%04lx\n", TIOCGWINSZ);
    printf("Code: 0x%04lx\n", TIOCSWINSZ);
    return 0;
}
```
To then validate the change I ran the following simple rust:
```
extern crate libc;

use libc::{ioctl, winsize, STDOUT_FILENO, TIOCGWINSZ};

fn main() {
    let mut wsize = winsize {
        ws_row: 0,
        ws_col: 0,
        ws_xpixel: 0,
        ws_ypixel: 0,
    };
    unsafe {
        ioctl(STDOUT_FILENO, TIOCGWINSZ, &mut wsize);
    }
    println!("Sizes: {{ rows: {}, cols: {}, xpixel: {}, ypixel: {} }}",
             wsize.ws_row,
             wsize.ws_col,
             wsize.ws_xpixel,
             wsize.ws_ypixel);
}
```
2018-08-16 17:31:15 +00:00
Ian Henry
a3c843bc7f Add TIOCGWINSZ accessor to solaris module
Signed-off-by: Ian Henry <ihenry@chef.io>
2018-08-16 12:59:52 -04:00
Alex Crichton
b9c613f3dc Fix allow_failures section 2018-08-16 09:33:02 -07:00
Alex Crichton
f31d0f7795 Allow sparc64 to fail on CI 2018-08-15 17:14:37 -07:00
Alex Crichton
b6dacea4e7
Merge pull request #1063 from jakllsch/netbsd-time50-fixes
NetBSD: correct link_name of some time-related functions
2018-08-15 17:13:34 -07:00
Alex Crichton
78f1dd2ce3
Merge pull request #1052 from debris/exchangedata
Add exchangedata for osx
2018-08-15 17:13:04 -07:00
Jonathan A. Kollasch
c0fab38966 NetBSD: correct link_name of some time-related functions
The futimes(), lutimes(), mq_timedreceive(), and mq_timedsend()
functions were linking against legacy library symbols that need 32-bit
time_t in structures, resulting in an ABI mismatch with 64-bit time_t.
2018-08-15 12:20:57 -05:00
debris
504f286960 Push function into lower modules 2018-08-15 10:49:08 +02:00
debris
56dde29582 Two variants of exchangedata 2018-08-14 16:20:15 +02:00
debris
195d63a017 Merge branch 'master' of github.com:rust-lang/libc into exchangedata 2018-08-14 16:13:13 +02:00
debris
c67224eb82 Use u32 for exchangedata 2018-08-14 12:55:55 +02:00
bors
2c063c243f Auto merge of #1062 - alexcrichton:update-ctest, r=alexcrichton
Update ctest to 0.2
2018-08-13 23:59:19 +00:00
Alex Crichton
e72f187cd4 Update ctest to 0.2 2018-08-13 16:58:13 -07:00
Jeremy Soller
81e250f471 Add setenv/unsetenv 2018-08-11 16:44:04 -06:00
bors
9be97c961f Auto merge of #1050 - MegatonHammer:master, r=alexcrichton
Add libc definitions for Megaton-Hammer, a Switch Homebrew toolchain

I'm working on a pure-rust toolchain to write homebrew for the Nintendo Switch called [Megaton-Hammer](http://github.com/megatonhammer/megaton-hammer). I'm hoping to get those definitions upstreamed to simplify my life :).

This toolchain does not depend on a C compiler or a libc (it reimplements everything in rust) - but given many crates in the Rust ecosystem rely on the libc crate for the definition of various common types, this is what I came up with.

I was wondering what a good target triple would be ? I currently gate the implementation behind `target_os = "switch"`, but if this goes upstream I figure that might cause trouble for people using the Nintendo SDK (they might already be using `target_os = "switch"` for some things). Would it be better to go with `target_env = "megatonhammer"`?
2018-08-07 14:01:55 +00:00
bors
fc8db9602e Auto merge of #1058 - jakllsch:netbsd-283b36ac-fab0-4e5f-b620-4325f8cedc80, r=alexcrichton
NetBSD: add basic types for aarch64
2018-08-07 05:58:59 +00:00
Jonathan A. Kollasch
0478c6059b NetBSD: add basic types for aarch64 2018-08-06 14:59:35 -05:00
bors
27114a96af Auto merge of #1057 - jakllsch:netbsd-5298beff-d081-4368-ab2a-0987e84c6d02, r=alexcrichton
NetBSD: correct c_char signedness on arm and powerpc
2018-08-06 19:10:09 +00:00
Jonathan A. Kollasch
80f2d7d999 fix syntax error in previous 2018-08-06 13:41:30 -05:00
Jonathan A. Kollasch
174888fd56 NetBSD: correct c_char signedness on arm and powerpc 2018-08-06 12:15:45 -05:00
bors
6bdbf5dc93 Auto merge of #1056 - faern:release, r=alexcrichton
Bump version to 0.2.43

Would be nice to have the new align feature from #1044 available for general use. But mostly I want this released since I have problems using the align feature for a PR on libstd, and I suspect it's somehow because I try to use an unpublished libc (https://github.com/rust-lang/rust/pull/52872).
2018-08-06 01:25:19 +00:00
Linus Färnstrand
add1a320b4 Bump version to 0.2.43 2018-08-06 01:35:46 +02:00
roblabla
8ff70b6a4c Add some switch-related libc typedefs 2018-08-02 13:46:37 +02:00
bors
8318a3ec1c Auto merge of #1053 - papertigers:illumos-epoll-event, r=alexcrichton
illumos epoll_event struct should be packed

While attempting to run `cargo test` within the mio crate on illumos I noticed a number of the tests fail. Digging into the various epoll calls I discovered that the epoll_event struct was misaligned due to extra padding. The fix is to pack the epoll_event struct with the same compiler setting that the linux variant is using.

A simple rust example that demonstrates the issue:
```rust
extern crate libc;
use libc::epoll_event;
use std::mem;
fn main() {
    println!("{}", mem::size_of::<u64>());
    println!("{}", mem::size_of::<epoll_event>());
}
```
Running the above code on Linux results in:
```
8
12
```
while on illumos it currently results in:
```
8
16
```
Looking at the `test_close_on_drop` test from mio I traced the `epoll_ctl`
calls and saw the following:
```
[root@rustdev ~/src/mio]# dtrace -wn 'pid$target::epoll_ctl:entry {this->ev = arg3; printf("%d\n", arg2); print((struct epoll_event *)this->ev); stop()}' -c "/root/src/mio/target/debug/deps/test-109e1422fb40f621 test_close_on_drop"
dtrace: description 'pid$target::epoll_ctl:entry ' matched 1 probe
dtrace: allowing destructive actions
running 1 test
CPU     ID                    FUNCTION:NAME
  6  92874                  epoll_ctl:entry 4
struct epoll_event * 0xfffffc7fee7feda8
test test_close_on_drop::test_close_on_drop ... test test_close_on_drop::test_close_on_drop has been running for over 60 seconds
  6  92874                  epoll_ctl:entry 6
struct epoll_event * 0xfffffc7fee7fee18
^[[A  6  92874                  epoll_ctl:entry 7
struct epoll_event * 0xfffffc7fee7fee18
```
I dumped each of the epoll_event's with mdb:
```
[root@rustdev ~/src/mio]# mdb -Fp 219856
Loading modules: [ libumem.so.1 libc.so.1 ]
> 0xfffffc7fee7feda8::print
mdb: no symbol information for 0xfffffc7fee7feda8: no symbol corresponds to address
> 0xfffffc7fee7feda8::print struct epoll_event
{
    events = 0x80000001
    data = {
        ptr = 0xfffffffffffffc7f
        fd = 0xfffffc7f
        u32 = 0xfffffc7f
        u64 = 0xfffffffffffffc7f
    }
}
>
[root@rustdev ~/src/mio]# prun 219856
[root@rustdev ~/src/mio]# mdb -Fp 219856
Loading modules: [ libumem.so.1 libc.so.1 ]
> 0xfffffc7fee7fee18::print struct epoll_event
{
    events = 0x80000001
    data = {
        ptr = 0
        fd = 0
        u32 = 0
        u64 = 0
    }
}
>
[root@rustdev ~/src/mio]# prun 219856
[root@rustdev ~/src/mio]# mdb -Fp 2198
Loading modules: [ libumem.so.1 libc.so.1 ]
> 0xfffffc7fee7fee18::print struct epoll_event
{
    events = 0x80000004
    data = {
        ptr = 0x100000000
        fd = 0
        u32 = 0
        u64 = 0x100000000
    }
}
```
The output from the last two `epoll_event`'s represent `Token(0)` the Client and `Token(1)` from the mio test. The first one however is from `AWAKEN` which is defined as `usize::MAX`.  This value should be 18446744073709551615. However if we convert the hex value we see something else:
```
> 0xfffffffffffffc7f=E
                18446744073709550719
```
Because of the extra 4 bytes of padding currently present in the illumos `epoll_event` definition the low order bits are picking up some junk from other memory.

All of the poll-related mio tests pass with this change. Two other tests are still failing, which appears to be caused by an OS bug, not a problem with mio or libc.
2018-08-01 19:39:05 +00:00
bors
7b45a7cb55 Auto merge of #1048 - ColinFinck:master, r=alexcrichton
Add libc definitions for HermitCore (https://hermitcore.org)

HermitCore is based on lwIP, newlib, and pthread-embedded.
Some definitions are similar to other targets using newlib, however some are different enough to justify an own "hermit" port and not base on the existing "newlib" port.
2018-08-01 18:03:13 +00:00
Alex Crichton
5090477133
Merge pull request #1051 from alexcrichton/fix-apple
Fix OSX builders on CI
2018-08-01 12:22:33 -05:00
Alex Crichton
e6bc44b540 Allow iOS to fail 2018-08-01 07:51:33 -07:00
Alex Crichton
83f78df8c6 Fix OSX builders on CI
Looks like Travis has moved on from our old images, so we're forced to
update.
2018-08-01 07:49:22 -07:00
debris
e131bd1b1d change exchangedata param c_long -> c_ulong 2018-08-01 13:29:15 +02:00
debris
3d5c968b20 exchangedata is osx only, fix the function signature 2018-08-01 10:36:41 +02:00
debris
019f429ee9 Merge branch 'master' into exchangedata 2018-08-01 10:29:38 +02:00
Mike Zeller
d213c3acbd illumos epoll_event struct should be packed 2018-08-01 00:30:45 -04:00
Colin Finck
086bdf9643 Fix coding style. 2018-07-31 09:43:23 +02:00
bors
e1ebfafc2f Auto merge of #1049 - alecmocatta:master, r=alexcrichton
Add the FIO* consts for *-apple-*

Previously only FIONREAD was implemented for x86_64 apple. The constant is shared between i{3..6}86 and x86_64, so I've moved it into the shared module rather than the 64 bit specific one.

They're defined like this in sys/filio.h:
```
#define FIOCLEX	     _IO('f', 1)        /* set close on exec on fd */
#define FIONCLEX     _IO('f', 2)        /* remove close on exec */
#define FIONREAD    _IOR('f', 127, int) /* get # bytes to read */
#define FIONBIO     _IOW('f', 126, int) /* set/clear non-blocking i/o */
#define FIOASYNC    _IOW('f', 125, int) /* set/clear async i/o */
#define FIOSETOWN   _IOW('f', 124, int) /* set owner */
#define FIOGETOWN   _IOR('f', 123, int) /* get owner */
#define FIODTYPE    _IOR('f', 122, int) /* get d_type */
```

Rather than decipher the C macros I got the values like so:
```
#include <stdio.h>
#include <sys/ioctl.h>

int main() {
	printf("pub const FIOCLEX: ::c_uint = 0x%x;\n", FIOCLEX);
	printf("pub const FIONCLEX: ::c_uint = 0x%x;\n", FIONCLEX);
	printf("pub const FIONREAD: ::c_ulong = 0x%lx;\n", FIONREAD);
	printf("pub const FIONBIO: ::c_ulong = 0x%lx;\n", FIONBIO);
	printf("pub const FIOASYNC: ::c_ulong = 0x%lx;\n", FIOASYNC);
	printf("pub const FIOSETOWN: ::c_ulong = 0x%lx;\n", FIOSETOWN);
	printf("pub const FIOGETOWN: ::c_ulong = 0x%lx;\n", FIOGETOWN);
	printf("pub const FIODTYPE: ::c_ulong = 0x%lx;\n", FIODTYPE);
}

$ gcc --target=i686-apple-darwin -o x x.c && file ./x && ./x
./x: Mach-O executable i386
pub const FIOCLEX: ::c_uint = 0x20006601;
pub const FIONCLEX: ::c_uint = 0x20006602;
pub const FIONREAD: ::c_ulong = 0x4004667f;
pub const FIONBIO: ::c_ulong = 0x8004667e;
pub const FIOASYNC: ::c_ulong = 0x8004667d;
pub const FIOSETOWN: ::c_ulong = 0x8004667c;
pub const FIOGETOWN: ::c_ulong = 0x4004667b;
pub const FIODTYPE: ::c_ulong = 0x4004667a;

$ gcc --target=x86_64-apple-darwin -o x x.c && file ./x && ./x
./x: Mach-O 64-bit executable x86_64
pub const FIOCLEX: ::c_uint = 0x20006601;
pub const FIONCLEX: ::c_uint = 0x20006602;
pub const FIONREAD: ::c_ulong = 0x4004667f;
pub const FIONBIO: ::c_ulong = 0x8004667e;
pub const FIOASYNC: ::c_ulong = 0x8004667d;
pub const FIOSETOWN: ::c_ulong = 0x8004667c;
pub const FIOGETOWN: ::c_ulong = 0x4004667b;
pub const FIODTYPE: ::c_ulong = 0x4004667a;
```

I'm just awaiting an XCode install to check they're the same on arm.
2018-07-31 01:25:13 +00:00
alecmocatta
86e83947ae
remove FIOCLEX and FIONBIO which were shadowing a bsd-wide declaration 2018-07-30 20:40:38 +01:00
alecmocatta
25498ef54e
FIO* for *-apple-* 2018-07-30 19:46:52 +01:00
bors
8565755356 Auto merge of #1044 - faern:modern-alignment, r=alexcrichton
Add alignment feature and use #[repr(align(x))]

Trying to solve #1042.

Here I introduce the discussed feature that will allow going from struct alignment with a private `__align` field to using `#[repr(align(x))]`. However, I have not implemented it for all structs that require alignment yet, only `in6_addr`. This because I did not want to spend too much time before we have discussed and solved the remaining questions regarding this.

One thing to discuss is testing. I have so far not done anything to the CI scripts. So currently they will still test the crate only with the `align` feature disabled. Thus they will make sure the `__align` fields are still correct. But no automatic tests make sure everything is correct when the `align` feature is turned on. What do we want to do about that? Can we insert another `cargo test` with `--features align` to make all the Travis jobs run the test suite twice, or will that slow things down too much?

I have tried using this version of libc in rustc and the standard library. And successfully changed `Ipv6Addr::new` to not use any `unsafe` and to become a `const fn`. Whether or not we want that is out of scope for this PR, but my point was that the changes introduced with this PR allow much more flexible usage of the libc structs that have alignment.
2018-07-30 17:52:17 +00:00
Linus Färnstrand
e167a73564 Describe the align feature in the readme 2018-07-30 16:57:55 +02:00
Colin Finck
5801a08e3f Add libc definitions for HermitCore (https://hermitcore.org)
HermitCore is based on lwIP, newlib, and pthread-embedded.
2018-07-30 11:48:52 +02:00
Linus Färnstrand
2819634696 Add align feature to pthread structs 2018-07-29 18:54:45 +02:00