Skip to content

Add #[start] attribute to define a new entry point function #5809

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 12, 2013

Conversation

Aatch
Copy link
Contributor

@Aatch Aatch commented Apr 9, 2013

This implements #5158. Currently it takes the command line args and the crate map. Since it doesn't take a main function pointer, you can't actually start the runtime easily, but that seems to be a shim to allow the current rust_start function to call into main.

However, you can do an end-run round the io library and do this:

use core::libc::{write, c_int, c_void, size_t, STDOUT_FILENO};

#[start]
fn my_start(_argc:int, _argv: **u8, _crate_map: *u8) -> int {
    do str::as_buf("Hello World!\n") |s,len| {
        unsafe {
            write(STDOUT_FILENO, s as *c_void, len as size_t);
        }
    }
    return 0;
}

Which is the most basic "Hello World" you can do in rust without starting up the runtime (though that has quite a lot to do with the fact that core::io uses @ everywhere...)

bors added a commit that referenced this pull request Apr 10, 2013
This implements #5158. Currently it takes the command line args and the crate map. Since it doesn't take a `main` function pointer, you can't actually start the runtime easily, but that seems to be a shim to allow the current `rust_start` function to call into main.

However, you can do an end-run round the io library and do this:

```rust
use core::libc::{write, c_int, c_void, size_t, STDOUT_FILENO};

#[start]
fn my_start(_argc:int, _argv: **u8, _crate_map: *u8) -> int {
    do str::as_buf("Hello World!\n") |s,len| {
        unsafe {
            write(STDOUT_FILENO, s as *c_void, len as size_t);
        }
    }
    return 0;
}
```

Which is the most basic "Hello World" you can do in rust without starting up the runtime (though that has quite a lot to do with the fact that `core::io` uses `@` everywhere...)
@Aatch
Copy link
Contributor Author

Aatch commented Apr 10, 2013

Uh, the windows build failed for reasons that I'm fairly sure are unrelated to this commit.

@brson
Copy link
Contributor

brson commented Apr 10, 2013

Since your test case does not have a main function it needs to contain an // xfail-fast line near the top. This will prevent the windows-specific test driver from trying to compile it and call main.

bors added a commit that referenced this pull request Apr 12, 2013
This implements #5158. Currently it takes the command line args and the crate map. Since it doesn't take a `main` function pointer, you can't actually start the runtime easily, but that seems to be a shim to allow the current `rust_start` function to call into main.

However, you can do an end-run round the io library and do this:

```rust
use core::libc::{write, c_int, c_void, size_t, STDOUT_FILENO};

#[start]
fn my_start(_argc:int, _argv: **u8, _crate_map: *u8) -> int {
    do str::as_buf("Hello World!\n") |s,len| {
        unsafe {
            write(STDOUT_FILENO, s as *c_void, len as size_t);
        }
    }
    return 0;
}
```

Which is the most basic "Hello World" you can do in rust without starting up the runtime (though that has quite a lot to do with the fact that `core::io` uses `@` everywhere...)
@bors bors closed this Apr 12, 2013
@bors bors merged commit 35c73c8 into rust-lang:incoming Apr 12, 2013
@Aatch Aatch deleted the start-attr branch April 12, 2013 10:31
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 11, 2020
…anishearth

Stable sort primitive

changelog: Implements rust-lang#5762
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants