Thanks for links to bugs. Is there anything to read on the whole morestack thing? I thought that it's connected to segmented stacks that are (are they?) going away.
It seems that I can use #[no_split_stack] before each and every function to generate a valid freestanding binary. If I just could use that in header... On Sun, Mar 23, 2014 at 6:24 PM, Corey Richardson <co...@octayn.net> wrote: > No. See https://github.com/mozilla/rust/pull/8955 and > https://github.com/mozilla/rust/issues/11871 for discussion. You can > stub out > morestack but that won't remove the stack size checks. It's sanest to > just compile the IR yourself (the stack checking is a target-specific > machine pass, which is why it shows up with --emit asm but not --emit > bc) > > On Sun, Mar 23, 2014 at 2:09 PM, Vladimir Pouzanov <farcal...@gmail.com> > wrote: > > So it doesn't work in the end. > > > > rustc --emit bc with flags set for cortex-m0 provides exact same bc with > > only difference in target triple (which makes perfect sense) > > > > However, replacing llc step with rustc --emit asm provides a different > > assembler file, which requires __morestack. > > > > Should I expect rustc to generate freestanding code given some additional > > options? > > > > > > On Sun, Mar 23, 2014 at 5:55 PM, Vladimir Pouzanov <farcal...@gmail.com> > > wrote: > >> > >> Nevermind, I lost -O somewhere in between copying and pasting command > line > >> flags. Optimised version doesn't have any morestack references (which is > >> strange concept though). > >> > >> > >> On Sun, Mar 23, 2014 at 5:44 PM, Vladimir Pouzanov <farcal...@gmail.com > > > >> wrote: > >>> > >>> Figured out I can use --target thumbv6m-linux-eabi, which implies > >>> -mthumb. Now the problem is that if I use > >>> > >>> rustc --target thumbv6m-linux-eabi -O --emit obj main.rs -o main.o > >>> > >>> instead of three-step process I mentioned before, I get a valid object > >>> file for cortex-m0, but functions have big prologues and symbol table > is > >>> much bigger: > >>> > >>> U STACK_LIMIT > >>> U _GLOBAL_OFFSET_TABLE_ > >>> 00000000 D _ZN20_rust_crate_map_main16ad67637f924a5c794v0.0E > >>> 00000008 r _ZN2hw11GPIO_PIN_NO20hb0b70c1482b61788Gaa4v0.0E > >>> 00000000 r _ZN2hw12GPIO_DIR_REG20hb0b70c1482b61788yaa4v0.0E > >>> 00000004 r _ZN2hw12GPIO_REG_VAL20hb0b70c1482b61788Caa4v0.0E > >>> 00000078 t _ZN4main10__rust_abiE > >>> 00000000 t _ZN4wait20h53ffb23463e08f19Maa4v0.0E > >>> U __aeabi_unwind_cpp_pr0 > >>> U __morestack > >>> 0000004c T main > >>> > >>> vs. > >>> > >>> 00000000 D _ZN23_rust_crate_map_main.c016ad67637f924a5c794v0.0E > >>> 00000000 T main > >>> > >>> in the initial version. Also, I now need to provide __morestack (no > idea > >>> what's that about). > >>> > >>> > >>> On Sun, Mar 23, 2014 at 5:17 PM, Alex Crichton <a...@crichton.co> > wrote: > >>>> > >>>> You should be able to assemble standalone objects for any triple > >>>> through rustc itself, you'll likely have to specify a different linker > >>>> or assembler though: > >>>> > >>>> rustc foo.rs --target arm-non-linux-gnueabi \ > >>>> -C linker=arm-non-linux-gnueabi-ld \ > >>>> -C ar=arm-non-linux-gnueabi-ar > >>>> > >>>> As you discovered, you can pass through arguments to LLVM via the "-C > >>>> llvm-args=foo" command line option to rustc. If you get complaints > >>>> that it's an unknown command line argument, it's LLVM telling you > >>>> those complaints, not rustc. > >>>> > >>>> On Sun, Mar 23, 2014 at 8:54 AM, Vladimir Pouzanov < > farcal...@gmail.com> > >>>> wrote: > >>>> > I'm trying to experiment with rust and some embedded code. > Currently I > >>>> > have > >>>> > to do a three-pass compilation: > >>>> > > >>>> > rustc --target arm-linux-eabi -O --emit bc main.rs -o main.bc > >>>> > llc -mtriple arm-none-eabi -march=thumb -mcpu=cortex-m0 main.bc -o > >>>> > main.s > >>>> > arm-none-linux-gnueabi-as main.s -o main.o > >>>> > > >>>> > First, I'm not sure how relevant is --target flag for rustc. I seems > >>>> > to > >>>> > change target datalayout/triple in generated bc, but that should be > >>>> > overriden by llc -mtriple anyway, right? > >>>> > > >>>> > Second, I can pass -Ctarget-cpu=cortex-m0, but I cannot pass down > >>>> > -march=thumb, tried this way: -Cllvm-args='--march=thumb', failed > with > >>>> > "rustc: Unknown command line argument '--march=thumb'". > >>>> > > >>>> > Any hints on how can I drop explicit llc and as steps here? > >>>> > > >>>> > -- > >>>> > Sincerely, > >>>> > Vladimir "Farcaller" Pouzanov > >>>> > http://farcaller.net/ > >>>> > > >>>> > _______________________________________________ > >>>> > Rust-dev mailing list > >>>> > Rust-dev@mozilla.org > >>>> > https://mail.mozilla.org/listinfo/rust-dev > >>>> > > >>> > >>> > >>> > >>> > >>> -- > >>> Sincerely, > >>> Vladimir "Farcaller" Pouzanov > >>> http://farcaller.net/ > >> > >> > >> > >> > >> -- > >> Sincerely, > >> Vladimir "Farcaller" Pouzanov > >> http://farcaller.net/ > > > > > > > > > > -- > > Sincerely, > > Vladimir "Farcaller" Pouzanov > > http://farcaller.net/ > > > > _______________________________________________ > > Rust-dev mailing list > > Rust-dev@mozilla.org > > https://mail.mozilla.org/listinfo/rust-dev > > > > > > -- > http://octayn.net/ > -- Sincerely, Vladimir "Farcaller" Pouzanov http://farcaller.net/
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev