From 294538e323283b4fb07dd7330d768317136674f4 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Thu, 3 Oct 2019 21:12:28 +0200 Subject: [PATCH] Change to new aarch64-unknown-none-softfloat target --- 01_wait_forever/Makefile | 4 ++-- 01_wait_forever/README.md | 2 +- 01_wait_forever/kernel | Bin 66080 -> 66080 bytes 02_runtime_init/Makefile | 4 ++-- 02_runtime_init/kernel | Bin 68512 -> 68560 bytes 02_runtime_init/kernel8.img | Bin 368 -> 368 bytes 03_hacky_hello_world/Makefile | 4 ++-- 03_hacky_hello_world/kernel | Bin 79760 -> 79120 bytes 03_hacky_hello_world/kernel8.img | Bin 7317 -> 6661 bytes 04_zero_overhead_abstraction/Makefile | 4 ++-- 04_zero_overhead_abstraction/kernel | Bin 79728 -> 79088 bytes 04_zero_overhead_abstraction/kernel8.img | Bin 7317 -> 6661 bytes 12 files changed, 9 insertions(+), 9 deletions(-) diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index 8ef00caa..a6ca4d44 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -9,13 +9,13 @@ endif # BSP-specific arguments ifeq ($(BSP),bsp_rpi3) - TARGET = aarch64-unknown-none + TARGET = aarch64-unknown-none-softfloat OUTPUT = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_MISC_ARGS = -d in_asm LINKER_FILE = src/bsp/rpi3/link.ld - RUSTC_MISC_ARGS = -C target-feature=-fp-armv8 -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 endif SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) diff --git a/01_wait_forever/README.md b/01_wait_forever/README.md index 6263c618..8198a9f6 100644 --- a/01_wait_forever/README.md +++ b/01_wait_forever/README.md @@ -5,7 +5,7 @@ Project skeleton is set up; Code just halts all CPU cores. - Toolchain: `cargo xbuild` tools (`xrustc`, `xclippy`) and the - `aarch64-unknown-none` target are used for building `AArch64` bare-metal code. + `aarch64-unknown-none-softfloat` target are used for building `AArch64` bare-metal code. - `Makefile` targets: - `doc`: Generate documentation. - `qemu`: Run the `kernel` in QEMU diff --git a/01_wait_forever/kernel b/01_wait_forever/kernel index 259d4610d841e04261661397c9b7d7a35d30eabd..c4419788dce3fb6b5ff31aa9e14b5aaeda97e63c 100755 GIT binary patch delta 46 vcmZ3`!m^-+rC|!=O1Wf1%Z#)VixS=B^in+ohV0a$ywn^$nCRByjFF50ebf*0 delta 46 vcmZ3`!m^-+rC|!=N;%8i^yIA6;tbv7^in+ohV0a$ywn^$nCRByjFF50jO-Ax diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index 8ef00caa..a6ca4d44 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -9,13 +9,13 @@ endif # BSP-specific arguments ifeq ($(BSP),bsp_rpi3) - TARGET = aarch64-unknown-none + TARGET = aarch64-unknown-none-softfloat OUTPUT = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_MISC_ARGS = -d in_asm LINKER_FILE = src/bsp/rpi3/link.ld - RUSTC_MISC_ARGS = -C target-feature=-fp-armv8 -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 endif SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) diff --git a/02_runtime_init/kernel b/02_runtime_init/kernel index 5341909d9c221a4ec8bb0b68b47d646e80072e9f..0932bd0dbbcdd530b850bb73bbe25bbc4af18386 100644 GIT binary patch literal 68560 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 a?dDJ(kIw&?%;Ne#ye+K!eB|P2|9=3W9|J}J diff --git a/02_runtime_init/kernel8.img b/02_runtime_init/kernel8.img index 4fd35eef401430eebfa2284e50194eeb361dbea8..75d3126fc4a2ee7151a3e94aaa6de771a880865a 100755 GIT binary patch delta 217 zcmeys^nq!Dj0h_O!<66u|BK5jFkfY0;9vlOi4HpTEI@Gu28Ao}K=J=Td7$tFh6OAW znW5qbnB%YgZ)Uvs<}t%WU519BH`^Ij@-Q|8ai}<~s^bPzip zsO~>d{Q>6qYyX=WFTQ%rFj1SKA&7^uA&5i8Vdbm!3@hLKXIjanA`V2prpk`|T^=NT8{N!O^m;f@T$B}j7Yva8uA1E`fe89{w u@ufD?%E$lz%YrR$u%39yL1)D$hyBMsG5CD?1abt(!IL={6F5FVT@L{1R8tZF diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index b3693e18..a811b598 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -9,13 +9,13 @@ endif # BSP-specific arguments ifeq ($(BSP),bsp_rpi3) - TARGET = aarch64-unknown-none + TARGET = aarch64-unknown-none-softfloat OUTPUT = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_MISC_ARGS = -serial null -serial stdio LINKER_FILE = src/bsp/rpi3/link.ld - RUSTC_MISC_ARGS = -C target-feature=-fp-armv8 -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 endif SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) diff --git a/03_hacky_hello_world/kernel b/03_hacky_hello_world/kernel index feb2f2839654cfa501c85d3c3b1326003d7128ed..61386840afbfeb5ce860b2806e584cd9d8fd79e8 100755 GIT binary patch delta 5841 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 a4HhJ}&Ywf_TU3Mb? delta 6608 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 bZzlT{yfqSQCnsR7*xDZcemg>LC^-JVhjWS8 diff --git a/03_hacky_hello_world/kernel8.img b/03_hacky_hello_world/kernel8.img index 2bcbe9c69e6b213748e14c645253448ad5a033d7..237d28374499ce84535e3dcf828c33fc66ff8222 100755 GIT binary patch delta 1435 zcmZuxYfKzf6h1Sv)17@t1$J0=7rHZo!jz{G3YaQGX^p`cHU(?MnwAohS_}%mT3dAk zwl=B8-d?Ir+e8{o@RF!RXsRYE)?XT#zQEt3HC8!_Fq1ddD# z`{wTG1$B?Oc>?I>0tcbV@3;^zciq8j|Ku$p#%)H2Gj=01NbZ(e3Q2Qhd%&{Zw*3P{ z2xjWkZO620U&g$uP<8nVupoyfr8@Ihwy!n z5Pz+8@&|7lw>23fDk@(W;^PBY^Xx-PkW)UQU%A!c zXHQ7Fc?j)&p6S`e9~=uG-eKNIIdOK%OGJikYVse^u z4j%y0gu%PsRmsswm0Zk^lX|_?+nlW}JA5w)^{eJihctbB6Y=#YI?AH$i8be}>-hKVnO20$c2(J*L z4vo2d*6c-04&OBZ?T&8y*R;JTw>}Zcm>$VkLMKKj$M65+`w`DYeAnRM^Mn5Y72}O0 delta 2205 zcmZuyeN0nV6hH617W%=bwo*WBOJ!QAARyYe4ZXy%FcgN$7H2XM30qZ05p`j6uBb6t zf(qBC+p;a0`)hlI2uV$rY+1xDS>onIe4BqQv1pbRiU=$-Hm>c?eSKY~@g}$L-gAHF zcYf#GkDgq6UL0KNY6Up=D3QpsJA~f=48U4K;3jZ1>W02;hBmtt(dCzW5r<2o;Be3~ z4$e8i@oVA)HxVy|=(jir0WKK<2E#6(?pg~C*j-LKT@F#F!$m{w9G!CU@=7F}+5|Y( z$#+fwEu~kSdM9O&KZ~3NJkrDyYgrh9g$g-oo4#*b`-Ni4&;wEl=d#Y};2ejmp}U|u z-VuQ6q}REkhX0|__O>RHC4$064Q-XwjeR3$hDzX zzLP^PP7bM1Uj8zk)XO%^$Rx2mi|T?AeFL{@tb{tz@2+4UI)Jr^7m_IAD3jdx9KA_A zUoDW!KQ6$Q1*tW?U?*pxW^`xaSb3*60o^~bn4WUFX(Q5vSLo&NCXPD$N@?f>&^y_j zoCpZ=ba|RQv!0j3>vi%`t$a_D!;h6nc4J3?W%u`Xlk7NJ7kdTM+lSm&7a98hseUIkuy7iYWq_Q9{XVbTXzCARJsq6=Rx};ta9TjxZt7Z<7LeVs zM9#h^AmMaQ4)ePn+VwE+OoNumBVA%%h9L6kr}T~lGWV6^Sh+a&95yc^XcnK z0W2)A#weLHt}pMapvBt$s~0m=L6vq~gi)?wc13Es|Hr{`-u zQl8}|Pb#H|#T{T9R?Net*7sn33h%~B;QQ?yM6PnsVo=9iWG{}HgqOhZvk46SE3uoc z#Ouc7He12_1>T?3`Kk{eIqN1s&Df`LBkl>tAy00r_hM$Nx8WGf&kLDDBbh`TH4?G1 zi3Gf7ih6^dt*zcU{JOG;SYaaK*&&B z-Z>jR$e7jR7K->4{j* zp>q@QR$7U88ikBw&pDCQRwGmd08Fz5t| zVg4Qz!xFlQ_UmX5W%t!k^qs+**o1tUC~N`+tqvg3y>y7)6U;-C!dT64rrkSdC((h} z4&_YDr;KERI1sB>y0+TAXJXBYKiBTfj{B60Mi6INDXT%uj@K(UPJ?%(gpGG7{iC{I}qztPQ|)a-t2g<63B^nE5it6PB-v7Y3{3;Sxi(xUB~c2 z$KJ^?BA+ssN1}c!8}Cs3sxTC!2B}y4dKT2DjG_>~Dr$!oq*)n33=`>B1ttYCVg5#V z8I|>FStgY+L5#c;ogzZk5We6dH=Ag&b9}@(lW2Jp|FP;jIy?Q2H+uYUIkp`>c*u!w zsoKW!q(w{0_Js42e`Z;l`GGdaM^0_e;IAJ0=8m4Oj!s8+Ti4!p#<9lsxL=C4S+gg- z@g=cI`>Y%GuH};Olo{Vnwf$~M+OKKrDOBpK(sBauK}w(#<8ein}%Qvznb0JWfIiq@VI?bZf-bm6F+3SLD;ydo`NVx@0Zb)FE}) z4y2&Zm;1X9?e%w+^&A9CVUiTzBDHPQ<|&eQQL0sH%&+{*?|L{0lINs5bxr diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index b3693e18..a811b598 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -9,13 +9,13 @@ endif # BSP-specific arguments ifeq ($(BSP),bsp_rpi3) - TARGET = aarch64-unknown-none + TARGET = aarch64-unknown-none-softfloat OUTPUT = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_MISC_ARGS = -serial null -serial stdio LINKER_FILE = src/bsp/rpi3/link.ld - RUSTC_MISC_ARGS = -C target-feature=-fp-armv8 -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 endif SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) diff --git a/04_zero_overhead_abstraction/kernel b/04_zero_overhead_abstraction/kernel index 6bb49b1da1cbc23bd60d480514075c0b2d7ce27e..04f2c470083d87a5c2025d49d50eca9e44558a1b 100755 GIT binary patch delta 5996 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 J$ek)~{V(nmvB&@b delta 6693 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 delta 2113 zcmZuxYfKbZ6h1SXKq$F%-+(KK0}0!@vZc6WO2>|mpDk~8<-bI_pmznJzl0_P2bb;VAV(FrQ4>ykAh^Ti za?<_oBqx0XXkSs_m8T$EIOq=oRL7T+C_?FVq4_o-TtI`Mi|#c9ceIcqEz2JO{Z4TH z&gji(roENagSMVCP5lVa$b8!PBs^rkpH#K+rmB9Z73prVyEKjfD<;a>O`Qs-AWSd*x zVg>xY(;_=R-V}Qk6CXsf8(F5Ff2$z+&mp56Z86Dz9kt4;74T?4G;HMM$ret0;7*bs zEXSQHh1j_)xLTV+qC2+{+4Ltl>)>*x&L98u!fI*MoW1d)4c6pimZfORaKFDj4zzn8 zP!Th|E_mtDY%l#nDWuh`jD19mAbZ$CVqm(M#@HjtL@Kr9^T`3}B}>P%$pP6DQ!@@8 zYV&!_mY#^<7;tiq+Yuvf6uzu_)?3BF3R)CT994FZAY4HU9~+lZb7(&0MUJoVN^8I|N?X?%x{tv}mf5Q+*JV^Se6lAri<>)GLd4l# z;+sQ~c_dk=CmP3KH4!rlyF)YRzmI;#QHC6IC}0Tt3pF|iUe&PidW{$3R+FN(Q|Vuq1y1e1=U z7>4(v7*^02`fs5>oF1&9h@HlVs{#2^QP?O7S{Xp186!kz1na=KaJ^`{iXJss;-PQ^Mk-t>6463B>mDuWovKqJ_WTZ1*z*+di6aSSgs zT06&x+LXCm67}0yze(|H!cdTwq*n18SkgA-3JURSqMGz1+ms=UVIuvSz=R+s%wG=y zRMxFmnNY?AG4gfEIo|JyhDga;3+ zHealdYg^mf{m!?${D+;L?{!J*Y!-elSE{p>W!deC$TTe;;2FF0nQe1mP*|i+`0-iO zzLA`Se@kmuM{B#Yb8p9i7MBID;}bOKO2q4aeF!7^c#$u~@YFm!5b4;G^;!13#I#e# z`|_l*CAW(@b@%hSpX5KzLh_|wb8C{G6IWJBR{N%cHhsQZr|C@sFz9`!)M`Jn82UoF zzw_M#{*JP)cOYkJf)w8(?OU&p7fC+E8f;R1UgaaObS*ElI;@9%pu=`yt`*pS(!US= Mndslt)#dN{4@^FYhX4Qo