0001-RISC-V-add-riscv32-and-riscv64-architecture-support.patch 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026
  1. From 6a4f4a9c774608add4b02f95322518bd2f5f51ee Mon Sep 17 00:00:00 2001
  2. From: Aric Belsito <lluixhi@gmail.com>
  3. Date: Tue, 5 Jan 2016 16:12:18 -0800
  4. Subject: [PATCH 1/5] RISC-V: add riscv32 and riscv64 architecture support
  5. Author: Alex Suykov <alex.suykov@gmail.com>
  6. Author: Aric Belsito <lluixhi@gmail.com>
  7. Author: Michael Clark <mjc@sifive.com>
  8. ---
  9. arch/riscv32/atomic_arch.h | 35 ++++
  10. arch/riscv32/bits/alltypes.h.in | 26 +++
  11. arch/riscv32/bits/endian.h | 5 +
  12. arch/riscv32/bits/fcntl.h | 38 ++++
  13. arch/riscv32/bits/fenv.h | 18 ++
  14. arch/riscv32/bits/float.h | 16 ++
  15. arch/riscv32/bits/ipc.h | 14 ++
  16. arch/riscv32/bits/limits.h | 7 +
  17. arch/riscv32/bits/msg.h | 13 ++
  18. arch/riscv32/bits/posix.h | 2 +
  19. arch/riscv32/bits/reg.h | 8 +
  20. arch/riscv32/bits/sem.h | 9 +
  21. arch/riscv32/bits/setjmp.h | 1 +
  22. arch/riscv32/bits/shm.h | 26 +++
  23. arch/riscv32/bits/signal.h | 113 ++++++++++
  24. arch/riscv32/bits/socket.h | 33 +++
  25. arch/riscv32/bits/stat.h | 18 ++
  26. arch/riscv32/bits/stdint.h | 20 ++
  27. arch/riscv32/bits/syscall.h.in | 278 +++++++++++++++++++++++++
  28. arch/riscv32/bits/user.h | 43 ++++
  29. arch/riscv32/crt_arch.h | 18 ++
  30. arch/riscv32/pthread_arch.h | 12 ++
  31. arch/riscv32/reloc.h | 27 +++
  32. arch/riscv32/syscall_arch.h | 78 +++++++
  33. arch/riscv64/atomic_arch.h | 66 ++++++
  34. arch/riscv64/bits/alltypes.h.in | 29 +++
  35. arch/riscv64/bits/endian.h | 5 +
  36. arch/riscv64/bits/fcntl.h | 38 ++++
  37. arch/riscv64/bits/fenv.h | 17 ++
  38. arch/riscv64/bits/float.h | 16 ++
  39. arch/riscv64/bits/ipc.h | 14 ++
  40. arch/riscv64/bits/limits.h | 7 +
  41. arch/riscv64/bits/mman.h | 1 +
  42. arch/riscv64/bits/msg.h | 13 ++
  43. arch/riscv64/bits/posix.h | 2 +
  44. arch/riscv64/bits/reg.h | 8 +
  45. arch/riscv64/bits/sem.h | 9 +
  46. arch/riscv64/bits/setjmp.h | 1 +
  47. arch/riscv64/bits/shm.h | 26 +++
  48. arch/riscv64/bits/signal.h | 113 ++++++++++
  49. arch/riscv64/bits/socket.h | 33 +++
  50. arch/riscv64/bits/stat.h | 18 ++
  51. arch/riscv64/bits/stdint.h | 20 ++
  52. arch/riscv64/bits/syscall.h.in | 278 +++++++++++++++++++++++++
  53. arch/riscv64/bits/user.h | 43 ++++
  54. arch/riscv64/crt_arch.h | 18 ++
  55. arch/riscv64/pthread_arch.h | 12 ++
  56. arch/riscv64/reloc.h | 27 +++
  57. arch/riscv64/syscall_arch.h | 76 +++++++
  58. configure | 7 +
  59. crt/riscv32/crti.s | 11 +
  60. crt/riscv32/crtn.s | 0
  61. crt/riscv64/crti.s | 11 +
  62. crt/riscv64/crtn.s | 0
  63. include/elf.h | 56 +++++
  64. src/fenv/riscv32/fenv-sf.c | 3 +
  65. src/fenv/riscv32/fenv.S | 53 +++++
  66. src/fenv/riscv64/fenv-sf.c | 3 +
  67. src/fenv/riscv64/fenv.S | 53 +++++
  68. src/internal/riscv32/syscall.s | 15 ++
  69. src/internal/riscv64/syscall.s | 15 ++
  70. src/ldso/riscv32/dlsym.s | 6 +
  71. src/ldso/riscv64/dlsym.s | 6 +
  72. src/math/riscv32/copysign.s | 5 +
  73. src/math/riscv32/copysignf.s | 5 +
  74. src/math/riscv32/fabs.s | 5 +
  75. src/math/riscv32/fabsf.s | 5 +
  76. src/math/riscv32/fma.s | 5 +
  77. src/math/riscv32/fmaf.s | 5 +
  78. src/math/riscv32/fmax.s | 5 +
  79. src/math/riscv32/fmaxf.s | 5 +
  80. src/math/riscv32/fmin.s | 5 +
  81. src/math/riscv32/fminf.s | 5 +
  82. src/math/riscv32/sqrt.s | 5 +
  83. src/math/riscv32/sqrtf.s | 5 +
  84. src/math/riscv64/copysign.s | 5 +
  85. src/math/riscv64/copysignf.s | 5 +
  86. src/math/riscv64/fabs.s | 5 +
  87. src/math/riscv64/fabsf.s | 5 +
  88. src/math/riscv64/fma.s | 5 +
  89. src/math/riscv64/fmaf.s | 5 +
  90. src/math/riscv64/fmax.s | 5 +
  91. src/math/riscv64/fmaxf.s | 5 +
  92. src/math/riscv64/fmin.s | 5 +
  93. src/math/riscv64/fminf.s | 5 +
  94. src/math/riscv64/sqrt.s | 5 +
  95. src/math/riscv64/sqrtf.s | 5 +
  96. src/setjmp/riscv32/longjmp.S | 44 ++++
  97. src/setjmp/riscv32/setjmp.S | 42 ++++
  98. src/setjmp/riscv64/longjmp.S | 44 ++++
  99. src/setjmp/riscv64/setjmp.S | 42 ++++
  100. src/signal/riscv32/restore.s | 8 +
  101. src/signal/riscv32/sigsetjmp.s | 21 ++
  102. src/signal/riscv64/restore.s | 8 +
  103. src/signal/riscv64/sigsetjmp.s | 21 ++
  104. src/thread/riscv32/__set_thread_area.s | 6 +
  105. src/thread/riscv32/__unmapself.s | 7 +
  106. src/thread/riscv32/clone.s | 34 +++
  107. src/thread/riscv32/syscall_cp.s | 29 +++
  108. src/thread/riscv64/__set_thread_area.s | 6 +
  109. src/thread/riscv64/__unmapself.s | 7 +
  110. src/thread/riscv64/clone.s | 34 +++
  111. src/thread/riscv64/syscall_cp.s | 29 +++
  112. 103 files changed, 2489 insertions(+)
  113. create mode 100644 arch/riscv32/atomic_arch.h
  114. create mode 100644 arch/riscv32/bits/alltypes.h.in
  115. create mode 100644 arch/riscv32/bits/endian.h
  116. create mode 100644 arch/riscv32/bits/fcntl.h
  117. create mode 100644 arch/riscv32/bits/fenv.h
  118. create mode 100644 arch/riscv32/bits/float.h
  119. create mode 100644 arch/riscv32/bits/ipc.h
  120. create mode 100644 arch/riscv32/bits/limits.h
  121. create mode 100644 arch/riscv32/bits/msg.h
  122. create mode 100644 arch/riscv32/bits/posix.h
  123. create mode 100644 arch/riscv32/bits/reg.h
  124. create mode 100644 arch/riscv32/bits/sem.h
  125. create mode 100644 arch/riscv32/bits/setjmp.h
  126. create mode 100644 arch/riscv32/bits/shm.h
  127. create mode 100644 arch/riscv32/bits/signal.h
  128. create mode 100644 arch/riscv32/bits/socket.h
  129. create mode 100644 arch/riscv32/bits/stat.h
  130. create mode 100644 arch/riscv32/bits/stdint.h
  131. create mode 100644 arch/riscv32/bits/syscall.h.in
  132. create mode 100644 arch/riscv32/bits/user.h
  133. create mode 100644 arch/riscv32/crt_arch.h
  134. create mode 100644 arch/riscv32/pthread_arch.h
  135. create mode 100644 arch/riscv32/reloc.h
  136. create mode 100644 arch/riscv32/syscall_arch.h
  137. create mode 100644 arch/riscv64/atomic_arch.h
  138. create mode 100644 arch/riscv64/bits/alltypes.h.in
  139. create mode 100644 arch/riscv64/bits/endian.h
  140. create mode 100644 arch/riscv64/bits/fcntl.h
  141. create mode 100644 arch/riscv64/bits/fenv.h
  142. create mode 100644 arch/riscv64/bits/float.h
  143. create mode 100644 arch/riscv64/bits/ipc.h
  144. create mode 100644 arch/riscv64/bits/limits.h
  145. create mode 100644 arch/riscv64/bits/mman.h
  146. create mode 100644 arch/riscv64/bits/msg.h
  147. create mode 100644 arch/riscv64/bits/posix.h
  148. create mode 100644 arch/riscv64/bits/reg.h
  149. create mode 100644 arch/riscv64/bits/sem.h
  150. create mode 100644 arch/riscv64/bits/setjmp.h
  151. create mode 100644 arch/riscv64/bits/shm.h
  152. create mode 100644 arch/riscv64/bits/signal.h
  153. create mode 100644 arch/riscv64/bits/socket.h
  154. create mode 100644 arch/riscv64/bits/stat.h
  155. create mode 100644 arch/riscv64/bits/stdint.h
  156. create mode 100644 arch/riscv64/bits/syscall.h.in
  157. create mode 100644 arch/riscv64/bits/user.h
  158. create mode 100644 arch/riscv64/crt_arch.h
  159. create mode 100644 arch/riscv64/pthread_arch.h
  160. create mode 100644 arch/riscv64/reloc.h
  161. create mode 100644 arch/riscv64/syscall_arch.h
  162. create mode 100644 crt/riscv32/crti.s
  163. create mode 100644 crt/riscv32/crtn.s
  164. create mode 100644 crt/riscv64/crti.s
  165. create mode 100644 crt/riscv64/crtn.s
  166. create mode 100644 src/fenv/riscv32/fenv-sf.c
  167. create mode 100644 src/fenv/riscv32/fenv.S
  168. create mode 100644 src/fenv/riscv64/fenv-sf.c
  169. create mode 100644 src/fenv/riscv64/fenv.S
  170. create mode 100644 src/internal/riscv32/syscall.s
  171. create mode 100644 src/internal/riscv64/syscall.s
  172. create mode 100644 src/ldso/riscv32/dlsym.s
  173. create mode 100644 src/ldso/riscv64/dlsym.s
  174. create mode 100644 src/math/riscv32/copysign.s
  175. create mode 100644 src/math/riscv32/copysignf.s
  176. create mode 100644 src/math/riscv32/fabs.s
  177. create mode 100644 src/math/riscv32/fabsf.s
  178. create mode 100644 src/math/riscv32/fma.s
  179. create mode 100644 src/math/riscv32/fmaf.s
  180. create mode 100644 src/math/riscv32/fmax.s
  181. create mode 100644 src/math/riscv32/fmaxf.s
  182. create mode 100644 src/math/riscv32/fmin.s
  183. create mode 100644 src/math/riscv32/fminf.s
  184. create mode 100644 src/math/riscv32/sqrt.s
  185. create mode 100644 src/math/riscv32/sqrtf.s
  186. create mode 100644 src/math/riscv64/copysign.s
  187. create mode 100644 src/math/riscv64/copysignf.s
  188. create mode 100644 src/math/riscv64/fabs.s
  189. create mode 100644 src/math/riscv64/fabsf.s
  190. create mode 100644 src/math/riscv64/fma.s
  191. create mode 100644 src/math/riscv64/fmaf.s
  192. create mode 100644 src/math/riscv64/fmax.s
  193. create mode 100644 src/math/riscv64/fmaxf.s
  194. create mode 100644 src/math/riscv64/fmin.s
  195. create mode 100644 src/math/riscv64/fminf.s
  196. create mode 100644 src/math/riscv64/sqrt.s
  197. create mode 100644 src/math/riscv64/sqrtf.s
  198. create mode 100644 src/setjmp/riscv32/longjmp.S
  199. create mode 100644 src/setjmp/riscv32/setjmp.S
  200. create mode 100644 src/setjmp/riscv64/longjmp.S
  201. create mode 100644 src/setjmp/riscv64/setjmp.S
  202. create mode 100644 src/signal/riscv32/restore.s
  203. create mode 100644 src/signal/riscv32/sigsetjmp.s
  204. create mode 100644 src/signal/riscv64/restore.s
  205. create mode 100644 src/signal/riscv64/sigsetjmp.s
  206. create mode 100644 src/thread/riscv32/__set_thread_area.s
  207. create mode 100644 src/thread/riscv32/__unmapself.s
  208. create mode 100644 src/thread/riscv32/clone.s
  209. create mode 100644 src/thread/riscv32/syscall_cp.s
  210. create mode 100644 src/thread/riscv64/__set_thread_area.s
  211. create mode 100644 src/thread/riscv64/__unmapself.s
  212. create mode 100644 src/thread/riscv64/clone.s
  213. create mode 100644 src/thread/riscv64/syscall_cp.s
  214. --- /dev/null
  215. +++ b/arch/riscv32/atomic_arch.h
  216. @@ -0,0 +1,35 @@
  217. +#define a_barrier a_barrier
  218. +static inline void a_barrier()
  219. +{
  220. + __asm__ __volatile__ ("fence rw,rw" : : : "memory");
  221. +}
  222. +
  223. +#define a_ll a_ll
  224. +static inline int a_ll(volatile int *p)
  225. +{
  226. + int v;
  227. + __asm__ __volatile__ ("lr.w %0, (%1)" : "=&r"(v) : "r"(p));
  228. + return v;
  229. +}
  230. +
  231. +#define a_sc a_sc
  232. +static inline int a_sc(volatile int *p, int v)
  233. +{
  234. + int r;
  235. + __asm__ __volatile__ ("sc.w %0, %2, (%1)" : "=&r"(r) : "r"(p), "r"(v) : "memory");
  236. + return !r;
  237. +}
  238. +
  239. +#define a_cas a_cas
  240. +static inline int a_cas(volatile int *p, int t, int s)
  241. +{
  242. + int old, tmp;
  243. + __asm__("1: lr.w %0, %2 \n"
  244. + " bne %0, %3, 1f \n"
  245. + " sc.w %1, %4, %2 \n"
  246. + " bnez %1, 1b \n"
  247. + "1: \n"
  248. + : "=&r"(old), "+r"(tmp), "+A"(*p)
  249. + : "r"(t), "r"(s));
  250. + return old;
  251. +}
  252. --- /dev/null
  253. +++ b/arch/riscv32/bits/alltypes.h.in
  254. @@ -0,0 +1,26 @@
  255. +#define _Addr int
  256. +#define _Int64 long long
  257. +#define _Reg int
  258. +
  259. +TYPEDEF __builtin_va_list va_list;
  260. +TYPEDEF __builtin_va_list __isoc_va_list;
  261. +
  262. +#ifndef __cplusplus
  263. +TYPEDEF int wchar_t;
  264. +#endif
  265. +
  266. +TYPEDEF float float_t;
  267. +TYPEDEF double double_t;
  268. +
  269. +TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
  270. +
  271. +TYPEDEF long time_t;
  272. +TYPEDEF long suseconds_t;
  273. +
  274. +TYPEDEF struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
  275. +TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
  276. +TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
  277. +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
  278. +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
  279. +TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
  280. +TYPEDEF struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
  281. --- /dev/null
  282. +++ b/arch/riscv32/bits/endian.h
  283. @@ -0,0 +1,5 @@
  284. +#if __RISCVEB__
  285. +#define __BYTE_ORDER __BIG_ENDIAN
  286. +#else
  287. +#define __BYTE_ORDER __LITTLE_ENDIAN
  288. +#endif
  289. --- /dev/null
  290. +++ b/arch/riscv32/bits/fcntl.h
  291. @@ -0,0 +1,38 @@
  292. +#define O_CREAT 0100
  293. +#define O_EXCL 0200
  294. +#define O_NOCTTY 0400
  295. +#define O_TRUNC 01000
  296. +#define O_APPEND 02000
  297. +#define O_NONBLOCK 04000
  298. +#define O_DSYNC 010000
  299. +#define O_SYNC 04010000
  300. +#define O_RSYNC 04010000
  301. +#define O_DIRECTORY 040000
  302. +#define O_NOFOLLOW 0100000
  303. +#define O_CLOEXEC 02000000
  304. +
  305. +#define O_ASYNC 020000
  306. +#define O_DIRECT 0200000
  307. +#define O_LARGEFILE 0400000
  308. +#define O_NOATIME 01000000
  309. +#define O_PATH 010000000
  310. +#define O_TMPFILE 020040000
  311. +#define O_NDELAY O_NONBLOCK
  312. +
  313. +#define F_DUPFD 0
  314. +#define F_GETFD 1
  315. +#define F_SETFD 2
  316. +#define F_GETFL 3
  317. +#define F_SETFL 4
  318. +#define F_GETLK 5
  319. +#define F_SETLK 6
  320. +#define F_SETLKW 7
  321. +#define F_SETOWN 8
  322. +#define F_GETOWN 9
  323. +#define F_SETSIG 10
  324. +#define F_GETSIG 11
  325. +
  326. +#define F_SETOWN_EX 15
  327. +#define F_GETOWN_EX 16
  328. +
  329. +#define F_GETOWNER_UIDS 17
  330. --- /dev/null
  331. +++ b/arch/riscv32/bits/fenv.h
  332. @@ -0,0 +1,18 @@
  333. +#define FE_INVALID 16
  334. +#define FE_DIVBYZERO 8
  335. +#define FE_OVERFLOW 4
  336. +#define FE_UNDERFLOW 2
  337. +#define FE_INEXACT 1
  338. +
  339. +#define FE_ALL_EXCEPT 31
  340. +
  341. +#define FE_TONEAREST 0
  342. +#define FE_DOWNWARD 2
  343. +#define FE_UPWARD 3
  344. +#define FE_TOWARDZERO 1
  345. +
  346. +typedef unsigned int fexcept_t;
  347. +
  348. +typedef unsigned int fenv_t;
  349. +
  350. +#define FE_DFL_ENV ((const fenv_t *) -1)
  351. --- /dev/null
  352. +++ b/arch/riscv32/bits/float.h
  353. @@ -0,0 +1,16 @@
  354. +#define FLT_EVAL_METHOD 0
  355. +
  356. +#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L
  357. +#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L
  358. +#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L
  359. +#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L
  360. +
  361. +#define LDBL_MANT_DIG 113
  362. +#define LDBL_MIN_EXP (-16381)
  363. +#define LDBL_MAX_EXP 16384
  364. +
  365. +#define LDBL_DIG 33
  366. +#define LDBL_MIN_10_EXP (-4931)
  367. +#define LDBL_MAX_10_EXP 4932
  368. +
  369. +#define DECIMAL_DIG 36
  370. --- /dev/null
  371. +++ b/arch/riscv32/bits/ipc.h
  372. @@ -0,0 +1,14 @@
  373. +struct ipc_perm {
  374. + key_t __ipc_perm_key;
  375. + uid_t uid;
  376. + gid_t gid;
  377. + uid_t cuid;
  378. + gid_t cgid;
  379. + mode_t mode;
  380. + unsigned short __ipc_perm_seq;
  381. +
  382. + unsigned long __pad1;
  383. + unsigned long __pad2;
  384. +};
  385. +
  386. +#define IPC_64 0
  387. --- /dev/null
  388. +++ b/arch/riscv32/bits/limits.h
  389. @@ -0,0 +1,7 @@
  390. +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  391. + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  392. +#define LONG_BIT 32
  393. +#endif
  394. +
  395. +#define LONG_MAX 0x7fffffffL
  396. +#define LLONG_MAX 0x7fffffffffffffffLL
  397. --- /dev/null
  398. +++ b/arch/riscv32/bits/msg.h
  399. @@ -0,0 +1,13 @@
  400. +struct msqid_ds {
  401. + struct ipc_perm msg_perm;
  402. + time_t msg_stime;
  403. + time_t msg_rtime;
  404. + time_t msg_ctime;
  405. + unsigned long msg_cbytes;
  406. + msgqnum_t msg_qnum;
  407. + msglen_t msg_qbytes;
  408. + pid_t msg_lspid;
  409. + pid_t msg_lrpid;
  410. + unsigned long __pad1;
  411. + unsigned long __pad2;
  412. +};
  413. --- /dev/null
  414. +++ b/arch/riscv32/bits/posix.h
  415. @@ -0,0 +1,2 @@
  416. +# define _POSIX_V6_ILP32_OFFBIG 1
  417. +# define _POSIX_V7_ILP32_OFFBIG 1
  418. --- /dev/null
  419. +++ b/arch/riscv32/bits/reg.h
  420. @@ -0,0 +1,8 @@
  421. +#undef __WORDSIZE
  422. +#define __WORDSIZE 32
  423. +#define REG_PC 0
  424. +#define REG_RA 1
  425. +#define REG_SP 2
  426. +#define REG_TP 4
  427. +#define REG_S0 8
  428. +#define REG_A0 10
  429. --- /dev/null
  430. +++ b/arch/riscv32/bits/sem.h
  431. @@ -0,0 +1,9 @@
  432. +struct semid_ds {
  433. + struct ipc_perm sem_perm;
  434. + time_t sem_otime;
  435. + time_t sem_ctime;
  436. + unsigned short sem_nsems;
  437. + char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
  438. + time_t __unused3;
  439. + time_t __unused4;
  440. +};
  441. --- /dev/null
  442. +++ b/arch/riscv32/bits/setjmp.h
  443. @@ -0,0 +1 @@
  444. +typedef unsigned long __jmp_buf[40];
  445. --- /dev/null
  446. +++ b/arch/riscv32/bits/shm.h
  447. @@ -0,0 +1,26 @@
  448. +#define SHMLBA 4096
  449. +
  450. +struct shmid_ds
  451. +{
  452. + struct ipc_perm shm_perm;
  453. + size_t shm_segsz;
  454. + time_t shm_atime;
  455. + time_t shm_dtime;
  456. + time_t shm_ctime;
  457. + pid_t shm_cpid;
  458. + pid_t shm_lpid;
  459. + unsigned long shm_nattch;
  460. + unsigned long __pad1;
  461. + unsigned long __pad2;
  462. +};
  463. +
  464. +struct shminfo {
  465. + unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
  466. +};
  467. +
  468. +struct shm_info {
  469. + int __used_ids;
  470. + unsigned long shm_tot, shm_rss, shm_swp;
  471. + unsigned long __swap_attempts, __swap_successes;
  472. +};
  473. +
  474. --- /dev/null
  475. +++ b/arch/riscv32/bits/signal.h
  476. @@ -0,0 +1,113 @@
  477. +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  478. + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  479. +
  480. +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  481. +# define MINSIGSTKSZ 2048
  482. +# define SIGSTKSZ 8192
  483. +#endif
  484. +
  485. +/* gregs[0] holds the program counter. */
  486. +
  487. +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  488. +typedef unsigned long greg_t;
  489. +typedef unsigned long gregset_t[32];
  490. +
  491. +struct __riscv_f_ext_state {
  492. + unsigned int f[32];
  493. + unsigned int fcsr;
  494. +};
  495. +
  496. +struct __riscv_d_ext_state {
  497. + unsigned long long f[32];
  498. + unsigned int fcsr;
  499. +};
  500. +
  501. +struct __riscv_q_ext_state {
  502. + unsigned long long f[64] __attribute__((aligned(16)));
  503. + unsigned int fcsr;
  504. + unsigned int reserved[3];
  505. +};
  506. +
  507. +union __riscv_fp_state {
  508. + struct __riscv_f_ext_state f;
  509. + struct __riscv_d_ext_state d;
  510. + struct __riscv_q_ext_state q;
  511. +};
  512. +
  513. +typedef union __riscv_fp_state fpregset_t;
  514. +
  515. +typedef struct sigcontext {
  516. + gregset_t gregs;
  517. + fpregset_t fpregs;
  518. +} mcontext_t;
  519. +
  520. +#else
  521. +typedef struct {
  522. + unsigned long gregs[32];
  523. + unsigned long long fpregs[66];
  524. +} mcontext_t;
  525. +#endif
  526. +
  527. +struct sigaltstack {
  528. + void *ss_sp;
  529. + int ss_flags;
  530. + size_t ss_size;
  531. +};
  532. +
  533. +typedef struct __ucontext
  534. +{
  535. + unsigned long uc_flags;
  536. + struct __ucontext *uc_link;
  537. + stack_t uc_stack;
  538. + sigset_t uc_sigmask;
  539. + char __unused[1024 / 8 - sizeof(sigset_t)];
  540. + mcontext_t uc_mcontext;
  541. +} ucontext_t;
  542. +
  543. +#define SA_NOCLDSTOP 1
  544. +#define SA_NOCLDWAIT 2
  545. +#define SA_SIGINFO 4
  546. +#define SA_ONSTACK 0x08000000
  547. +#define SA_RESTART 0x10000000
  548. +#define SA_NODEFER 0x40000000
  549. +#define SA_RESETHAND 0x80000000
  550. +#define SA_RESTORER 0x04000000
  551. +
  552. +#endif
  553. +
  554. +#define SIGHUP 1
  555. +#define SIGINT 2
  556. +#define SIGQUIT 3
  557. +#define SIGILL 4
  558. +#define SIGTRAP 5
  559. +#define SIGABRT 6
  560. +#define SIGIOT SIGABRT
  561. +#define SIGBUS 7
  562. +#define SIGFPE 8
  563. +#define SIGKILL 9
  564. +#define SIGUSR1 10
  565. +#define SIGSEGV 11
  566. +#define SIGUSR2 12
  567. +#define SIGPIPE 13
  568. +#define SIGALRM 14
  569. +#define SIGTERM 15
  570. +#define SIGSTKFLT 16
  571. +#define SIGCHLD 17
  572. +#define SIGCONT 18
  573. +#define SIGSTOP 19
  574. +#define SIGTSTP 20
  575. +#define SIGTTIN 21
  576. +#define SIGTTOU 22
  577. +#define SIGURG 23
  578. +#define SIGXCPU 24
  579. +#define SIGXFSZ 25
  580. +#define SIGVTALRM 26
  581. +#define SIGPROF 27
  582. +#define SIGWINCH 28
  583. +#define SIGIO 29
  584. +#define SIGPOLL SIGIO
  585. +#define SIGPWR 30
  586. +#define SIGSYS 31
  587. +#define SIGUNUSED SIGSYS
  588. +
  589. +#define _NSIG 65
  590. --- /dev/null
  591. +++ b/arch/riscv32/bits/socket.h
  592. @@ -0,0 +1,33 @@
  593. +#include <endian.h>
  594. +
  595. +struct msghdr {
  596. + void *msg_name;
  597. + socklen_t msg_namelen;
  598. + struct iovec *msg_iov;
  599. +#if __BYTE_ORDER == __BIG_ENDIAN
  600. + int __pad1, msg_iovlen;
  601. +#else
  602. + int msg_iovlen, __pad1;
  603. +#endif
  604. + void *msg_control;
  605. +#if __BYTE_ORDER == __BIG_ENDIAN
  606. + int __pad2;
  607. + socklen_t msg_controllen;
  608. +#else
  609. + socklen_t msg_controllen;
  610. + int __pad2;
  611. +#endif
  612. + int msg_flags;
  613. +};
  614. +
  615. +struct cmsghdr {
  616. +#if __BYTE_ORDER == __BIG_ENDIAN
  617. + int __pad1;
  618. + socklen_t cmsg_len;
  619. +#else
  620. + socklen_t cmsg_len;
  621. + int __pad1;
  622. +#endif
  623. + int cmsg_level;
  624. + int cmsg_type;
  625. +};
  626. --- /dev/null
  627. +++ b/arch/riscv32/bits/stat.h
  628. @@ -0,0 +1,18 @@
  629. +struct stat {
  630. + dev_t st_dev;
  631. + ino_t st_ino;
  632. + mode_t st_mode;
  633. + nlink_t st_nlink;
  634. + uid_t st_uid;
  635. + gid_t st_gid;
  636. + dev_t st_rdev;
  637. + unsigned long __pad;
  638. + off_t st_size;
  639. + blksize_t st_blksize;
  640. + int __pad2;
  641. + blkcnt_t st_blocks;
  642. + struct timespec st_atim;
  643. + struct timespec st_mtim;
  644. + struct timespec st_ctim;
  645. + unsigned __unused[2];
  646. +};
  647. --- /dev/null
  648. +++ b/arch/riscv32/bits/stdint.h
  649. @@ -0,0 +1,20 @@
  650. +typedef int32_t int_fast16_t;
  651. +typedef int32_t int_fast32_t;
  652. +typedef uint32_t uint_fast16_t;
  653. +typedef uint32_t uint_fast32_t;
  654. +
  655. +#define INT_FAST16_MIN INT32_MIN
  656. +#define INT_FAST32_MIN INT32_MIN
  657. +
  658. +#define INT_FAST16_MAX INT32_MAX
  659. +#define INT_FAST32_MAX INT32_MAX
  660. +
  661. +#define UINT_FAST16_MAX UINT32_MAX
  662. +#define UINT_FAST32_MAX UINT32_MAX
  663. +
  664. +#define INTPTR_MIN INT32_MIN
  665. +#define INTPTR_MAX INT32_MAX
  666. +#define UINTPTR_MAX UINT32_MAX
  667. +#define PTRDIFF_MIN INT32_MIN
  668. +#define PTRDIFF_MAX INT32_MAX
  669. +#define SIZE_MAX UINT32_MAX
  670. --- /dev/null
  671. +++ b/arch/riscv32/bits/syscall.h.in
  672. @@ -0,0 +1,278 @@
  673. +#define __NR_io_setup 0
  674. +#define __NR_io_destroy 1
  675. +#define __NR_io_submit 2
  676. +#define __NR_io_cancel 3
  677. +#define __NR_io_getevents 4
  678. +#define __NR_setxattr 5
  679. +#define __NR_lsetxattr 6
  680. +#define __NR_fsetxattr 7
  681. +#define __NR_getxattr 8
  682. +#define __NR_lgetxattr 9
  683. +#define __NR_fgetxattr 10
  684. +#define __NR_listxattr 11
  685. +#define __NR_llistxattr 12
  686. +#define __NR_flistxattr 13
  687. +#define __NR_removexattr 14
  688. +#define __NR_lremovexattr 15
  689. +#define __NR_fremovexattr 16
  690. +#define __NR_getcwd 17
  691. +#define __NR_lookup_dcookie 18
  692. +#define __NR_eventfd2 19
  693. +#define __NR_epoll_create1 20
  694. +#define __NR_epoll_ctl 21
  695. +#define __NR_epoll_pwait 22
  696. +#define __NR_dup 23
  697. +#define __NR_dup3 24
  698. +#define __NR_fcntl 25
  699. +#define __NR_inotify_init1 26
  700. +#define __NR_inotify_add_watch 27
  701. +#define __NR_inotify_rm_watch 28
  702. +#define __NR_ioctl 29
  703. +#define __NR_ioprio_set 30
  704. +#define __NR_ioprio_get 31
  705. +#define __NR_flock 32
  706. +#define __NR_mknodat 33
  707. +#define __NR_mkdirat 34
  708. +#define __NR_unlinkat 35
  709. +#define __NR_symlinkat 36
  710. +#define __NR_linkat 37
  711. +#define __NR_renameat 38
  712. +#define __NR_umount2 39
  713. +#define __NR_mount 40
  714. +#define __NR_pivot_root 41
  715. +#define __NR_nfsservctl 42
  716. +#define __NR_statfs 43
  717. +#define __NR_fstatfs 44
  718. +#define __NR_truncate 45
  719. +#define __NR_ftruncate 46
  720. +#define __NR_fallocate 47
  721. +#define __NR_faccessat 48
  722. +#define __NR_chdir 49
  723. +#define __NR_fchdir 50
  724. +#define __NR_chroot 51
  725. +#define __NR_fchmod 52
  726. +#define __NR_fchmodat 53
  727. +#define __NR_fchownat 54
  728. +#define __NR_fchown 55
  729. +#define __NR_openat 56
  730. +#define __NR_close 57
  731. +#define __NR_vhangup 58
  732. +#define __NR_pipe2 59
  733. +#define __NR_quotactl 60
  734. +#define __NR_getdents64 61
  735. +#define __NR_lseek 62
  736. +#define __NR_read 63
  737. +#define __NR_write 64
  738. +#define __NR_readv 65
  739. +#define __NR_writev 66
  740. +#define __NR_pread64 67
  741. +#define __NR_pwrite64 68
  742. +#define __NR_preadv 69
  743. +#define __NR_pwritev 70
  744. +#define __NR_sendfile 71
  745. +#define __NR_pselect6 72
  746. +#define __NR_ppoll 73
  747. +#define __NR_signalfd4 74
  748. +#define __NR_vmsplice 75
  749. +#define __NR_splice 76
  750. +#define __NR_tee 77
  751. +#define __NR_readlinkat 78
  752. +#define __NR_fstatat 79
  753. +#define __NR_fstat 80
  754. +#define __NR_sync 81
  755. +#define __NR_fsync 82
  756. +#define __NR_fdatasync 83
  757. +#define __NR_sync_file_range 84
  758. +#define __NR_timerfd_create 85
  759. +#define __NR_timerfd_settime 86
  760. +#define __NR_timerfd_gettime 87
  761. +#define __NR_utimensat 88
  762. +#define __NR_acct 89
  763. +#define __NR_capget 90
  764. +#define __NR_capset 91
  765. +#define __NR_personality 92
  766. +#define __NR_exit 93
  767. +#define __NR_exit_group 94
  768. +#define __NR_waitid 95
  769. +#define __NR_set_tid_address 96
  770. +#define __NR_unshare 97
  771. +#define __NR_futex 98
  772. +#define __NR_set_robust_list 99
  773. +#define __NR_get_robust_list 100
  774. +#define __NR_nanosleep 101
  775. +#define __NR_getitimer 102
  776. +#define __NR_setitimer 103
  777. +#define __NR_kexec_load 104
  778. +#define __NR_init_module 105
  779. +#define __NR_delete_module 106
  780. +#define __NR_timer_create 107
  781. +#define __NR_timer_gettime 108
  782. +#define __NR_timer_getoverrun 109
  783. +#define __NR_timer_settime 110
  784. +#define __NR_timer_delete 111
  785. +#define __NR_clock_settime 112
  786. +#define __NR_clock_gettime 113
  787. +#define __NR_clock_getres 114
  788. +#define __NR_clock_nanosleep 115
  789. +#define __NR_syslog 116
  790. +#define __NR_ptrace 117
  791. +#define __NR_sched_setparam 118
  792. +#define __NR_sched_setscheduler 119
  793. +#define __NR_sched_getscheduler 120
  794. +#define __NR_sched_getparam 121
  795. +#define __NR_sched_setaffinity 122
  796. +#define __NR_sched_getaffinity 123
  797. +#define __NR_sched_yield 124
  798. +#define __NR_sched_get_priority_max 125
  799. +#define __NR_sched_get_priority_min 126
  800. +#define __NR_sched_rr_get_interval 127
  801. +#define __NR_restart_syscall 128
  802. +#define __NR_kill 129
  803. +#define __NR_tkill 130
  804. +#define __NR_tgkill 131
  805. +#define __NR_sigaltstack 132
  806. +#define __NR_rt_sigsuspend 133
  807. +#define __NR_rt_sigaction 134
  808. +#define __NR_rt_sigprocmask 135
  809. +#define __NR_rt_sigpending 136
  810. +#define __NR_rt_sigtimedwait 137
  811. +#define __NR_rt_sigqueueinfo 138
  812. +#define __NR_rt_sigreturn 139
  813. +#define __NR_setpriority 140
  814. +#define __NR_getpriority 141
  815. +#define __NR_reboot 142
  816. +#define __NR_setregid 143
  817. +#define __NR_setgid 144
  818. +#define __NR_setreuid 145
  819. +#define __NR_setuid 146
  820. +#define __NR_setresuid 147
  821. +#define __NR_getresuid 148
  822. +#define __NR_setresgid 149
  823. +#define __NR_getresgid 150
  824. +#define __NR_setfsuid 151
  825. +#define __NR_setfsgid 152
  826. +#define __NR_times 153
  827. +#define __NR_setpgid 154
  828. +#define __NR_getpgid 155
  829. +#define __NR_getsid 156
  830. +#define __NR_setsid 157
  831. +#define __NR_getgroups 158
  832. +#define __NR_setgroups 159
  833. +#define __NR_uname 160
  834. +#define __NR_sethostname 161
  835. +#define __NR_setdomainname 162
  836. +#define __NR_getrlimit 163
  837. +#define __NR_setrlimit 164
  838. +#define __NR_getrusage 165
  839. +#define __NR_umask 166
  840. +#define __NR_prctl 167
  841. +#define __NR_getcpu 168
  842. +#define __NR_gettimeofday 169
  843. +#define __NR_settimeofday 170
  844. +#define __NR_adjtimex 171
  845. +#define __NR_getpid 172
  846. +#define __NR_getppid 173
  847. +#define __NR_getuid 174
  848. +#define __NR_geteuid 175
  849. +#define __NR_getgid 176
  850. +#define __NR_getegid 177
  851. +#define __NR_gettid 178
  852. +#define __NR_sysinfo 179
  853. +#define __NR_mq_open 180
  854. +#define __NR_mq_unlink 181
  855. +#define __NR_mq_timedsend 182
  856. +#define __NR_mq_timedreceive 183
  857. +#define __NR_mq_notify 184
  858. +#define __NR_mq_getsetattr 185
  859. +#define __NR_msgget 186
  860. +#define __NR_msgctl 187
  861. +#define __NR_msgrcv 188
  862. +#define __NR_msgsnd 189
  863. +#define __NR_semget 190
  864. +#define __NR_semctl 191
  865. +#define __NR_semtimedop 192
  866. +#define __NR_semop 193
  867. +#define __NR_shmget 194
  868. +#define __NR_shmctl 195
  869. +#define __NR_shmat 196
  870. +#define __NR_shmdt 197
  871. +#define __NR_socket 198
  872. +#define __NR_socketpair 199
  873. +#define __NR_bind 200
  874. +#define __NR_listen 201
  875. +#define __NR_accept 202
  876. +#define __NR_connect 203
  877. +#define __NR_getsockname 204
  878. +#define __NR_getpeername 205
  879. +#define __NR_sendto 206
  880. +#define __NR_recvfrom 207
  881. +#define __NR_setsockopt 208
  882. +#define __NR_getsockopt 209
  883. +#define __NR_shutdown 210
  884. +#define __NR_sendmsg 211
  885. +#define __NR_recvmsg 212
  886. +#define __NR_readahead 213
  887. +#define __NR_brk 214
  888. +#define __NR_munmap 215
  889. +#define __NR_mremap 216
  890. +#define __NR_add_key 217
  891. +#define __NR_request_key 218
  892. +#define __NR_keyctl 219
  893. +#define __NR_clone 220
  894. +#define __NR_execve 221
  895. +#define __NR_mmap 222
  896. +#define __NR_fadvise64 223
  897. +#define __NR_swapon 224
  898. +#define __NR_swapoff 225
  899. +#define __NR_mprotect 226
  900. +#define __NR_msync 227
  901. +#define __NR_mlock 228
  902. +#define __NR_munlock 229
  903. +#define __NR_mlockall 230
  904. +#define __NR_munlockall 231
  905. +#define __NR_mincore 232
  906. +#define __NR_madvise 233
  907. +#define __NR_remap_file_pages 234
  908. +#define __NR_mbind 235
  909. +#define __NR_get_mempolicy 236
  910. +#define __NR_set_mempolicy 237
  911. +#define __NR_migrate_pages 238
  912. +#define __NR_move_pages 239
  913. +#define __NR_rt_tgsigqueueinfo 240
  914. +#define __NR_perf_event_open 241
  915. +#define __NR_accept4 242
  916. +#define __NR_recvmmsg 243
  917. +#define __NR_arch_specific_syscall 244
  918. +#define __NR_wait4 260
  919. +#define __NR_prlimit64 261
  920. +#define __NR_fanotify_init 262
  921. +#define __NR_fanotify_mark 263
  922. +#define __NR_name_to_handle_at 264
  923. +#define __NR_open_by_handle_at 265
  924. +#define __NR_clock_adjtime 266
  925. +#define __NR_syncfs 267
  926. +#define __NR_setns 268
  927. +#define __NR_sendmmsg 269
  928. +#define __NR_process_vm_readv 270
  929. +#define __NR_process_vm_writev 271
  930. +#define __NR_kcmp 272
  931. +#define __NR_finit_module 273
  932. +#define __NR_sched_setattr 274
  933. +#define __NR_sched_getattr 275
  934. +#define __NR_renameat2 276
  935. +#define __NR_seccomp 277
  936. +#define __NR_getrandom 278
  937. +#define __NR_memfd_create 279
  938. +#define __NR_bpf 280
  939. +#define __NR_execveat 281
  940. +#define __NR_userfaultfd 282
  941. +#define __NR_membarrier 283
  942. +#define __NR_mlock2 284
  943. +#define __NR_copy_file_range 285
  944. +#define __NR_preadv2 286
  945. +#define __NR_pwritev2 287
  946. +#define __NR_pkey_mprotect 288
  947. +#define __NR_pkey_alloc 289
  948. +#define __NR_pkey_free 290
  949. +#define __NR_sysriscv __NR_arch_specific_syscall
  950. +
  951. --- /dev/null
  952. +++ b/arch/riscv32/bits/user.h
  953. @@ -0,0 +1,43 @@
  954. +struct user_regs_struct {
  955. + unsigned long pc;
  956. + unsigned long ra;
  957. + unsigned long sp;
  958. + unsigned long gp;
  959. + unsigned long tp;
  960. + unsigned long t0;
  961. + unsigned long t1;
  962. + unsigned long t2;
  963. + unsigned long s0;
  964. + unsigned long s1;
  965. + unsigned long a0;
  966. + unsigned long a1;
  967. + unsigned long a2;
  968. + unsigned long a3;
  969. + unsigned long a4;
  970. + unsigned long a5;
  971. + unsigned long a6;
  972. + unsigned long a7;
  973. + unsigned long s2;
  974. + unsigned long s3;
  975. + unsigned long s4;
  976. + unsigned long s5;
  977. + unsigned long s6;
  978. + unsigned long s7;
  979. + unsigned long s8;
  980. + unsigned long s9;
  981. + unsigned long s10;
  982. + unsigned long s11;
  983. + unsigned long t3;
  984. + unsigned long t4;
  985. + unsigned long t5;
  986. + unsigned long t6;
  987. +};
  988. +
  989. +struct user_fpregs_struct {
  990. + double f[32];
  991. + unsigned int fcsr;
  992. +};
  993. +
  994. +#define ELF_NGREG 32
  995. +typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG];
  996. +typedef struct user_fpregs_struct elf_fpregset_t;
  997. --- /dev/null
  998. +++ b/arch/riscv32/crt_arch.h
  999. @@ -0,0 +1,18 @@
  1000. +__asm__(
  1001. +".text\n"
  1002. +".global " START "\n"
  1003. +".type " START ",%function\n"
  1004. +START ":\n"
  1005. +".weak __global_pointer$\n"
  1006. +".hidden __global_pointer$\n\t"
  1007. +".option push\n"
  1008. +".option norelax\n\t"
  1009. +"lla gp, __global_pointer$\n"
  1010. +".option pop\n\t"
  1011. +"mv a0, sp\n"
  1012. +".weak _DYNAMIC\n"
  1013. +".hidden _DYNAMIC\n\t"
  1014. +"lla a1, _DYNAMIC\n\t"
  1015. +"andi sp, sp, -16\n\t"
  1016. +"jal " START "_c"
  1017. +);
  1018. --- /dev/null
  1019. +++ b/arch/riscv32/pthread_arch.h
  1020. @@ -0,0 +1,12 @@
  1021. +static inline struct pthread *__pthread_self()
  1022. +{
  1023. + char *tp;
  1024. + __asm__ __volatile__("mv %0, tp" : "=r"(tp));
  1025. + return (void *)(tp - sizeof(struct pthread));
  1026. +}
  1027. +
  1028. +#define TLS_ABOVE_TP
  1029. +#define GAP_ABOVE_TP 0
  1030. +#define TP_ADJ(p) ((char *)p + sizeof(struct pthread))
  1031. +
  1032. +#define MC_PC gregs[0]
  1033. --- /dev/null
  1034. +++ b/arch/riscv32/reloc.h
  1035. @@ -0,0 +1,27 @@
  1036. +#if defined __riscv_float_abi_soft
  1037. +#define RISCV_FP_SUFFIX "-sf"
  1038. +#elif defined __riscv_float_abi_single
  1039. +#define RISCV_FP_SUFFIX "-sp"
  1040. +#elif defined __riscv_float_abi_double
  1041. +#define RISCV_FP_SUFFIX ""
  1042. +#endif
  1043. +
  1044. +#define RISCV_LDSO_HELPER(x) "riscv" #x
  1045. +#define RISCV_LDSO(x) RISCV_LDSO_HELPER(x)
  1046. +
  1047. +#define LDSO_ARCH RISCV_LDSO(__riscv_xlen) RISCV_FP_SUFFIX
  1048. +
  1049. +#define NO_LEGACY_INITFINI
  1050. +
  1051. +#define TPOFF_K 0
  1052. +
  1053. +#define REL_SYMBOLIC R_RISCV_32
  1054. +#define REL_PLT R_RISCV_JUMP_SLOT
  1055. +#define REL_RELATIVE R_RISCV_RELATIVE
  1056. +#define REL_COPY R_RISCV_COPY
  1057. +#define REL_DTPMOD R_RISCV_TLS_DTPMOD32
  1058. +#define REL_DTPOFF R_RISCV_TLS_DTPREL32
  1059. +#define REL_TPOFF R_RISCV_TLS_TPREL32
  1060. +
  1061. +#define CRTJMP(pc,sp) __asm__ __volatile__( \
  1062. + "mv sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
  1063. --- /dev/null
  1064. +++ b/arch/riscv32/syscall_arch.h
  1065. @@ -0,0 +1,78 @@
  1066. +#define __SYSCALL_LL_E(x) \
  1067. +((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
  1068. +((union { long long ll; long l[2]; }){ .ll = x }).l[1]
  1069. +#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
  1070. +
  1071. +#define __asm_syscall(...) \
  1072. + __asm__ __volatile__ ("scall\n\t" \
  1073. + : "+r"(a0) : __VA_ARGS__ : "memory"); \
  1074. + return a0; \
  1075. +
  1076. +static inline long __syscall0(long n)
  1077. +{
  1078. + register long a7 __asm__("a7") = n;
  1079. + register long a0 __asm__("a0");
  1080. + __asm_syscall("r"(a7))
  1081. +}
  1082. +
  1083. +static inline long __syscall1(long n, long a)
  1084. +{
  1085. + register long a7 __asm__("a7") = n;
  1086. + register long a0 __asm__("a0") = a;
  1087. + __asm_syscall("r"(a7), "0"(a0))
  1088. +}
  1089. +
  1090. +static inline long __syscall2(long n, long a, long b)
  1091. +{
  1092. + register long a7 __asm__("a7") = n;
  1093. + register long a0 __asm__("a0") = a;
  1094. + register long a1 __asm__("a1") = b;
  1095. + __asm_syscall("r"(a7), "0"(a0), "r"(a1))
  1096. +}
  1097. +
  1098. +static inline long __syscall3(long n, long a, long b, long c)
  1099. +{
  1100. + register long a7 __asm__("a7") = n;
  1101. + register long a0 __asm__("a0") = a;
  1102. + register long a1 __asm__("a1") = b;
  1103. + register long a2 __asm__("a2") = c;
  1104. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2))
  1105. +}
  1106. +
  1107. +static inline long __syscall4(long n, long a, long b, long c, long d)
  1108. +{
  1109. + register long a7 __asm__("a7") = n;
  1110. + register long a0 __asm__("a0") = a;
  1111. + register long a1 __asm__("a1") = b;
  1112. + register long a2 __asm__("a2") = c;
  1113. + register long a3 __asm__("a3") = d;
  1114. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3))
  1115. +}
  1116. +
  1117. +static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  1118. +{
  1119. + register long a7 __asm__("a7") = n;
  1120. + register long a0 __asm__("a0") = a;
  1121. + register long a1 __asm__("a1") = b;
  1122. + register long a2 __asm__("a2") = c;
  1123. + register long a3 __asm__("a3") = d;
  1124. + register long a4 __asm__("a4") = e;
  1125. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4))
  1126. +}
  1127. +
  1128. +static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  1129. +{
  1130. + register long a7 __asm__("a7") = n;
  1131. + register long a0 __asm__("a0") = a;
  1132. + register long a1 __asm__("a1") = b;
  1133. + register long a2 __asm__("a2") = c;
  1134. + register long a3 __asm__("a3") = d;
  1135. + register long a4 __asm__("a4") = e;
  1136. + register long a5 __asm__("a5") = f;
  1137. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5))
  1138. +}
  1139. +
  1140. +#define VDSO_USEFUL
  1141. +/* We don't have a clock_gettime function.
  1142. +#define VDSO_CGT_SYM "__vdso_clock_gettime"
  1143. +#define VDSO_CGT_VER "LINUX_2.6" */
  1144. --- /dev/null
  1145. +++ b/arch/riscv64/atomic_arch.h
  1146. @@ -0,0 +1,66 @@
  1147. +#define a_barrier a_barrier
  1148. +static inline void a_barrier()
  1149. +{
  1150. + __asm__ __volatile__ ("fence rw,rw" : : : "memory");
  1151. +}
  1152. +
  1153. +#define a_ll a_ll
  1154. +static inline int a_ll(volatile int *p)
  1155. +{
  1156. + int v;
  1157. + __asm__ __volatile__ ("lr.w %0, %1" : "=&r"(v), "+A"(*p));
  1158. + return v;
  1159. +}
  1160. +
  1161. +#define a_sc a_sc
  1162. +static inline int a_sc(volatile int *p, int v)
  1163. +{
  1164. + int r;
  1165. + __asm__ __volatile__ ("sc.w %0, %2, %1" : "=&r"(r), "+A"(*p) : "r"(v) : "memory");
  1166. +return !r;
  1167. +}
  1168. +
  1169. +#define a_cas a_cas
  1170. +static inline int a_cas(volatile int *p, int t, int s)
  1171. +{
  1172. + int old, tmp;
  1173. + __asm__("1: lr.w %0, %2 \n"
  1174. + " bne %0, %3, 1f \n"
  1175. + " sc.w %1, %4, %2 \n"
  1176. + " bnez %1, 1b \n"
  1177. + "1: \n"
  1178. + : "=&r"(old), "+r"(tmp), "+A"(*p)
  1179. + : "r"(t), "r"(s));
  1180. + return old;
  1181. +}
  1182. +
  1183. +#define a_ll_p a_ll_p
  1184. +static inline void *a_ll_p(volatile void *p)
  1185. +{
  1186. + void *v;
  1187. + __asm__ __volatile__ ("lr.d %0, %1" : "=&r"(v), "+A"(*(long *)p));
  1188. + return v;
  1189. +}
  1190. +
  1191. +#define a_sc_p a_sc_p
  1192. +static inline int a_sc_p(volatile int *p, void *v)
  1193. +{
  1194. + int r;
  1195. + __asm__ __volatile__ ("sc.d %0, %2, %1" : "=&r"(r), "+A"(*(long *)p) : "r"(v) : "memory");
  1196. + return !r;
  1197. +}
  1198. +
  1199. +#define a_cas_p a_cas_p
  1200. +static inline void *a_cas_p(volatile void *p, void *t, void *s)
  1201. +{
  1202. + void *old;
  1203. + int tmp;
  1204. + __asm__("1: lr.d %0, %2 \n"
  1205. + " bne %0, %3, 1f \n"
  1206. + " sc.d %1, %4, %2 \n"
  1207. + " bnez %1, 1b \n"
  1208. + "1: \n"
  1209. + : "=&r"(old), "+r"(tmp), "+A"(*(long *)p)
  1210. + : "r"(t), "r"(s));
  1211. + return old;
  1212. +}
  1213. --- /dev/null
  1214. +++ b/arch/riscv64/bits/alltypes.h.in
  1215. @@ -0,0 +1,29 @@
  1216. +#define _Addr long
  1217. +#define _Int64 long
  1218. +#define _Reg long
  1219. +
  1220. +TYPEDEF __builtin_va_list va_list;
  1221. +TYPEDEF __builtin_va_list __isoc_va_list;
  1222. +
  1223. +#ifndef __cplusplus
  1224. +TYPEDEF int wchar_t;
  1225. +#endif
  1226. +
  1227. +TYPEDEF int blksize_t;
  1228. +TYPEDEF unsigned int nlink_t;
  1229. +
  1230. +TYPEDEF float float_t;
  1231. +TYPEDEF double double_t;
  1232. +
  1233. +TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
  1234. +
  1235. +TYPEDEF long time_t;
  1236. +TYPEDEF long suseconds_t;
  1237. +
  1238. +TYPEDEF struct { union { int __i[14]; volatile int __vi[14]; unsigned long __s[7]; } __u; } pthread_attr_t;
  1239. +TYPEDEF struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } pthread_mutex_t;
  1240. +TYPEDEF struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } mtx_t;
  1241. +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } pthread_cond_t;
  1242. +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } cnd_t;
  1243. +TYPEDEF struct { union { int __i[14]; volatile int __vi[14]; void *__p[7]; } __u; } pthread_rwlock_t;
  1244. +TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[4]; } __u; } pthread_barrier_t;
  1245. --- /dev/null
  1246. +++ b/arch/riscv64/bits/endian.h
  1247. @@ -0,0 +1,5 @@
  1248. +#if __RISCVEB__
  1249. +#define __BYTE_ORDER __BIG_ENDIAN
  1250. +#else
  1251. +#define __BYTE_ORDER __LITTLE_ENDIAN
  1252. +#endif
  1253. --- /dev/null
  1254. +++ b/arch/riscv64/bits/fcntl.h
  1255. @@ -0,0 +1,38 @@
  1256. +#define O_CREAT 0100
  1257. +#define O_EXCL 0200
  1258. +#define O_NOCTTY 0400
  1259. +#define O_TRUNC 01000
  1260. +#define O_APPEND 02000
  1261. +#define O_NONBLOCK 04000
  1262. +#define O_DSYNC 010000
  1263. +#define O_SYNC 04010000
  1264. +#define O_RSYNC 04010000
  1265. +#define O_DIRECTORY 040000
  1266. +#define O_NOFOLLOW 0100000
  1267. +#define O_CLOEXEC 02000000
  1268. +
  1269. +#define O_ASYNC 020000
  1270. +#define O_DIRECT 0200000
  1271. +#define O_LARGEFILE 0400000
  1272. +#define O_NOATIME 01000000
  1273. +#define O_PATH 010000000
  1274. +#define O_TMPFILE 020040000
  1275. +#define O_NDELAY O_NONBLOCK
  1276. +
  1277. +#define F_DUPFD 0
  1278. +#define F_GETFD 1
  1279. +#define F_SETFD 2
  1280. +#define F_GETFL 3
  1281. +#define F_SETFL 4
  1282. +#define F_GETLK 5
  1283. +#define F_SETLK 6
  1284. +#define F_SETLKW 7
  1285. +#define F_SETOWN 8
  1286. +#define F_GETOWN 9
  1287. +#define F_SETSIG 10
  1288. +#define F_GETSIG 11
  1289. +
  1290. +#define F_SETOWN_EX 15
  1291. +#define F_GETOWN_EX 16
  1292. +
  1293. +#define F_GETOWNER_UIDS 17
  1294. --- /dev/null
  1295. +++ b/arch/riscv64/bits/fenv.h
  1296. @@ -0,0 +1,17 @@
  1297. +#define FE_INVALID 16
  1298. +#define FE_DIVBYZERO 8
  1299. +#define FE_OVERFLOW 4
  1300. +#define FE_UNDERFLOW 2
  1301. +#define FE_INEXACT 1
  1302. +
  1303. +#define FE_ALL_EXCEPT 31
  1304. +
  1305. +#define FE_TONEAREST 0
  1306. +#define FE_DOWNWARD 2
  1307. +#define FE_UPWARD 3
  1308. +#define FE_TOWARDZERO 1
  1309. +
  1310. +typedef unsigned int fexcept_t;
  1311. +typedef unsigned int fenv_t;
  1312. +
  1313. +#define FE_DFL_ENV ((const fenv_t *) -1)
  1314. --- /dev/null
  1315. +++ b/arch/riscv64/bits/float.h
  1316. @@ -0,0 +1,16 @@
  1317. +#define FLT_EVAL_METHOD 0
  1318. +
  1319. +#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L
  1320. +#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L
  1321. +#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L
  1322. +#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L
  1323. +
  1324. +#define LDBL_MANT_DIG 113
  1325. +#define LDBL_MIN_EXP (-16381)
  1326. +#define LDBL_MAX_EXP 16384
  1327. +
  1328. +#define LDBL_DIG 33
  1329. +#define LDBL_MIN_10_EXP (-4931)
  1330. +#define LDBL_MAX_10_EXP 4932
  1331. +
  1332. +#define DECIMAL_DIG 36
  1333. --- /dev/null
  1334. +++ b/arch/riscv64/bits/ipc.h
  1335. @@ -0,0 +1,14 @@
  1336. +struct ipc_perm {
  1337. + key_t __ipc_perm_key;
  1338. + uid_t uid;
  1339. + gid_t gid;
  1340. + uid_t cuid;
  1341. + gid_t cgid;
  1342. + mode_t mode;
  1343. + unsigned short __ipc_perm_seq;
  1344. +
  1345. + unsigned long __pad1;
  1346. + unsigned long __pad2;
  1347. +};
  1348. +
  1349. +#define IPC_64 0
  1350. --- /dev/null
  1351. +++ b/arch/riscv64/bits/limits.h
  1352. @@ -0,0 +1,7 @@
  1353. +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  1354. + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  1355. +#define LONG_BIT 64
  1356. +#endif
  1357. +
  1358. +#define LONG_MAX 0x7fffffffffffffffL
  1359. +#define LLONG_MAX 0x7fffffffffffffffLL
  1360. --- /dev/null
  1361. +++ b/arch/riscv64/bits/mman.h
  1362. @@ -0,0 +1 @@
  1363. +#define MAP_32BIT 0x40
  1364. --- /dev/null
  1365. +++ b/arch/riscv64/bits/msg.h
  1366. @@ -0,0 +1,13 @@
  1367. +struct msqid_ds {
  1368. + struct ipc_perm msg_perm;
  1369. + time_t msg_stime;
  1370. + time_t msg_rtime;
  1371. + time_t msg_ctime;
  1372. + unsigned long msg_cbytes;
  1373. + msgqnum_t msg_qnum;
  1374. + msglen_t msg_qbytes;
  1375. + pid_t msg_lspid;
  1376. + pid_t msg_lrpid;
  1377. + unsigned long __pad1;
  1378. + unsigned long __pad2;
  1379. +};
  1380. --- /dev/null
  1381. +++ b/arch/riscv64/bits/posix.h
  1382. @@ -0,0 +1,2 @@
  1383. +#define _POSIX_V6_LP64_OFF64 1
  1384. +#define _POSIX_V7_LP64_OFF64 1
  1385. --- /dev/null
  1386. +++ b/arch/riscv64/bits/reg.h
  1387. @@ -0,0 +1,8 @@
  1388. +#undef __WORDSIZE
  1389. +#define __WORDSIZE 64
  1390. +#define REG_PC 0
  1391. +#define REG_RA 1
  1392. +#define REG_SP 2
  1393. +#define REG_TP 4
  1394. +#define REG_S0 8
  1395. +#define REG_A0 10
  1396. --- /dev/null
  1397. +++ b/arch/riscv64/bits/sem.h
  1398. @@ -0,0 +1,9 @@
  1399. +struct semid_ds {
  1400. + struct ipc_perm sem_perm;
  1401. + time_t sem_otime;
  1402. + time_t sem_ctime;
  1403. + unsigned short sem_nsems;
  1404. + char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
  1405. + time_t __unused3;
  1406. + time_t __unused4;
  1407. +};
  1408. --- /dev/null
  1409. +++ b/arch/riscv64/bits/setjmp.h
  1410. @@ -0,0 +1 @@
  1411. +typedef unsigned long __jmp_buf[28];
  1412. --- /dev/null
  1413. +++ b/arch/riscv64/bits/shm.h
  1414. @@ -0,0 +1,26 @@
  1415. +#define SHMLBA 4096
  1416. +
  1417. +struct shmid_ds
  1418. +{
  1419. + struct ipc_perm shm_perm;
  1420. + size_t shm_segsz;
  1421. + time_t shm_atime;
  1422. + time_t shm_dtime;
  1423. + time_t shm_ctime;
  1424. + pid_t shm_cpid;
  1425. + pid_t shm_lpid;
  1426. + unsigned long shm_nattch;
  1427. + unsigned long __pad1;
  1428. + unsigned long __pad2;
  1429. +};
  1430. +
  1431. +struct shminfo {
  1432. + unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
  1433. +};
  1434. +
  1435. +struct shm_info {
  1436. + int __used_ids;
  1437. + unsigned long shm_tot, shm_rss, shm_swp;
  1438. + unsigned long __swap_attempts, __swap_successes;
  1439. +};
  1440. +
  1441. --- /dev/null
  1442. +++ b/arch/riscv64/bits/signal.h
  1443. @@ -0,0 +1,113 @@
  1444. +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  1445. + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  1446. +
  1447. +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  1448. +# define MINSIGSTKSZ 2048
  1449. +# define SIGSTKSZ 8192
  1450. +#endif
  1451. +
  1452. +/* gregs[0] holds the program counter. */
  1453. +
  1454. +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
  1455. +typedef unsigned long greg_t;
  1456. +typedef unsigned long gregset_t[32];
  1457. +
  1458. +struct __riscv_f_ext_state {
  1459. + unsigned int f[32];
  1460. + unsigned int fcsr;
  1461. +};
  1462. +
  1463. +struct __riscv_d_ext_state {
  1464. + unsigned long long f[32];
  1465. + unsigned int fcsr;
  1466. +};
  1467. +
  1468. +struct __riscv_q_ext_state {
  1469. + unsigned long long f[64] __attribute__((aligned(16)));
  1470. + unsigned int fcsr;
  1471. + unsigned int reserved[3];
  1472. +};
  1473. +
  1474. +union __riscv_fp_state {
  1475. + struct __riscv_f_ext_state f;
  1476. + struct __riscv_d_ext_state d;
  1477. + struct __riscv_q_ext_state q;
  1478. +};
  1479. +
  1480. +typedef union __riscv_fp_state fpregset_t;
  1481. +
  1482. +typedef struct sigcontext {
  1483. + gregset_t gregs;
  1484. + fpregset_t fpregs;
  1485. +} mcontext_t;
  1486. +
  1487. +#else
  1488. +typedef struct {
  1489. + unsigned long gregs[32];
  1490. + unsigned long long fpregs[66];
  1491. +} mcontext_t;
  1492. +#endif
  1493. +
  1494. +struct sigaltstack {
  1495. + void *ss_sp;
  1496. + int ss_flags;
  1497. + size_t ss_size;
  1498. +};
  1499. +
  1500. +typedef struct __ucontext
  1501. +{
  1502. + unsigned long uc_flags;
  1503. + struct __ucontext *uc_link;
  1504. + stack_t uc_stack;
  1505. + sigset_t uc_sigmask;
  1506. + char __unused[1024 / 8 - sizeof(sigset_t)];
  1507. + mcontext_t uc_mcontext;
  1508. +} ucontext_t;
  1509. +
  1510. +#define SA_NOCLDSTOP 1
  1511. +#define SA_NOCLDWAIT 2
  1512. +#define SA_SIGINFO 4
  1513. +#define SA_ONSTACK 0x08000000
  1514. +#define SA_RESTART 0x10000000
  1515. +#define SA_NODEFER 0x40000000
  1516. +#define SA_RESETHAND 0x80000000
  1517. +#define SA_RESTORER 0x04000000
  1518. +
  1519. +#endif
  1520. +
  1521. +#define SIGHUP 1
  1522. +#define SIGINT 2
  1523. +#define SIGQUIT 3
  1524. +#define SIGILL 4
  1525. +#define SIGTRAP 5
  1526. +#define SIGABRT 6
  1527. +#define SIGIOT SIGABRT
  1528. +#define SIGBUS 7
  1529. +#define SIGFPE 8
  1530. +#define SIGKILL 9
  1531. +#define SIGUSR1 10
  1532. +#define SIGSEGV 11
  1533. +#define SIGUSR2 12
  1534. +#define SIGPIPE 13
  1535. +#define SIGALRM 14
  1536. +#define SIGTERM 15
  1537. +#define SIGSTKFLT 16
  1538. +#define SIGCHLD 17
  1539. +#define SIGCONT 18
  1540. +#define SIGSTOP 19
  1541. +#define SIGTSTP 20
  1542. +#define SIGTTIN 21
  1543. +#define SIGTTOU 22
  1544. +#define SIGURG 23
  1545. +#define SIGXCPU 24
  1546. +#define SIGXFSZ 25
  1547. +#define SIGVTALRM 26
  1548. +#define SIGPROF 27
  1549. +#define SIGWINCH 28
  1550. +#define SIGIO 29
  1551. +#define SIGPOLL SIGIO
  1552. +#define SIGPWR 30
  1553. +#define SIGSYS 31
  1554. +#define SIGUNUSED SIGSYS
  1555. +
  1556. +#define _NSIG 65
  1557. --- /dev/null
  1558. +++ b/arch/riscv64/bits/socket.h
  1559. @@ -0,0 +1,33 @@
  1560. +#include <endian.h>
  1561. +
  1562. +struct msghdr {
  1563. + void *msg_name;
  1564. + socklen_t msg_namelen;
  1565. + struct iovec *msg_iov;
  1566. +#if __BYTE_ORDER == __BIG_ENDIAN
  1567. + int __pad1, msg_iovlen;
  1568. +#else
  1569. + int msg_iovlen, __pad1;
  1570. +#endif
  1571. + void *msg_control;
  1572. +#if __BYTE_ORDER == __BIG_ENDIAN
  1573. + int __pad2;
  1574. + socklen_t msg_controllen;
  1575. +#else
  1576. + socklen_t msg_controllen;
  1577. + int __pad2;
  1578. +#endif
  1579. + int msg_flags;
  1580. +};
  1581. +
  1582. +struct cmsghdr {
  1583. +#if __BYTE_ORDER == __BIG_ENDIAN
  1584. + int __pad1;
  1585. + socklen_t cmsg_len;
  1586. +#else
  1587. + socklen_t cmsg_len;
  1588. + int __pad1;
  1589. +#endif
  1590. + int cmsg_level;
  1591. + int cmsg_type;
  1592. +};
  1593. --- /dev/null
  1594. +++ b/arch/riscv64/bits/stat.h
  1595. @@ -0,0 +1,18 @@
  1596. +struct stat {
  1597. + dev_t st_dev;
  1598. + ino_t st_ino;
  1599. + mode_t st_mode;
  1600. + nlink_t st_nlink;
  1601. + uid_t st_uid;
  1602. + gid_t st_gid;
  1603. + dev_t st_rdev;
  1604. + unsigned long __pad;
  1605. + off_t st_size;
  1606. + blksize_t st_blksize;
  1607. + int __pad2;
  1608. + blkcnt_t st_blocks;
  1609. + struct timespec st_atim;
  1610. + struct timespec st_mtim;
  1611. + struct timespec st_ctim;
  1612. + unsigned __unused[2];
  1613. +};
  1614. --- /dev/null
  1615. +++ b/arch/riscv64/bits/stdint.h
  1616. @@ -0,0 +1,20 @@
  1617. +typedef int32_t int_fast16_t;
  1618. +typedef int32_t int_fast32_t;
  1619. +typedef uint32_t uint_fast16_t;
  1620. +typedef uint32_t uint_fast32_t;
  1621. +
  1622. +#define INT_FAST16_MIN INT32_MIN
  1623. +#define INT_FAST32_MIN INT32_MIN
  1624. +
  1625. +#define INT_FAST16_MAX INT32_MAX
  1626. +#define INT_FAST32_MAX INT32_MAX
  1627. +
  1628. +#define UINT_FAST16_MAX UINT32_MAX
  1629. +#define UINT_FAST32_MAX UINT32_MAX
  1630. +
  1631. +#define INTPTR_MIN INT64_MIN
  1632. +#define INTPTR_MAX INT64_MAX
  1633. +#define UINTPTR_MAX UINT64_MAX
  1634. +#define PTRDIFF_MIN INT64_MIN
  1635. +#define PTRDIFF_MAX INT64_MAX
  1636. +#define SIZE_MAX UINT64_MAX
  1637. --- /dev/null
  1638. +++ b/arch/riscv64/bits/syscall.h.in
  1639. @@ -0,0 +1,278 @@
  1640. +#define __NR_io_setup 0
  1641. +#define __NR_io_destroy 1
  1642. +#define __NR_io_submit 2
  1643. +#define __NR_io_cancel 3
  1644. +#define __NR_io_getevents 4
  1645. +#define __NR_setxattr 5
  1646. +#define __NR_lsetxattr 6
  1647. +#define __NR_fsetxattr 7
  1648. +#define __NR_getxattr 8
  1649. +#define __NR_lgetxattr 9
  1650. +#define __NR_fgetxattr 10
  1651. +#define __NR_listxattr 11
  1652. +#define __NR_llistxattr 12
  1653. +#define __NR_flistxattr 13
  1654. +#define __NR_removexattr 14
  1655. +#define __NR_lremovexattr 15
  1656. +#define __NR_fremovexattr 16
  1657. +#define __NR_getcwd 17
  1658. +#define __NR_lookup_dcookie 18
  1659. +#define __NR_eventfd2 19
  1660. +#define __NR_epoll_create1 20
  1661. +#define __NR_epoll_ctl 21
  1662. +#define __NR_epoll_pwait 22
  1663. +#define __NR_dup 23
  1664. +#define __NR_dup3 24
  1665. +#define __NR_fcntl 25
  1666. +#define __NR_inotify_init1 26
  1667. +#define __NR_inotify_add_watch 27
  1668. +#define __NR_inotify_rm_watch 28
  1669. +#define __NR_ioctl 29
  1670. +#define __NR_ioprio_set 30
  1671. +#define __NR_ioprio_get 31
  1672. +#define __NR_flock 32
  1673. +#define __NR_mknodat 33
  1674. +#define __NR_mkdirat 34
  1675. +#define __NR_unlinkat 35
  1676. +#define __NR_symlinkat 36
  1677. +#define __NR_linkat 37
  1678. +#define __NR_renameat 38
  1679. +#define __NR_umount2 39
  1680. +#define __NR_mount 40
  1681. +#define __NR_pivot_root 41
  1682. +#define __NR_nfsservctl 42
  1683. +#define __NR_statfs 43
  1684. +#define __NR_fstatfs 44
  1685. +#define __NR_truncate 45
  1686. +#define __NR_ftruncate 46
  1687. +#define __NR_fallocate 47
  1688. +#define __NR_faccessat 48
  1689. +#define __NR_chdir 49
  1690. +#define __NR_fchdir 50
  1691. +#define __NR_chroot 51
  1692. +#define __NR_fchmod 52
  1693. +#define __NR_fchmodat 53
  1694. +#define __NR_fchownat 54
  1695. +#define __NR_fchown 55
  1696. +#define __NR_openat 56
  1697. +#define __NR_close 57
  1698. +#define __NR_vhangup 58
  1699. +#define __NR_pipe2 59
  1700. +#define __NR_quotactl 60
  1701. +#define __NR_getdents64 61
  1702. +#define __NR_lseek 62
  1703. +#define __NR_read 63
  1704. +#define __NR_write 64
  1705. +#define __NR_readv 65
  1706. +#define __NR_writev 66
  1707. +#define __NR_pread64 67
  1708. +#define __NR_pwrite64 68
  1709. +#define __NR_preadv 69
  1710. +#define __NR_pwritev 70
  1711. +#define __NR_sendfile 71
  1712. +#define __NR_pselect6 72
  1713. +#define __NR_ppoll 73
  1714. +#define __NR_signalfd4 74
  1715. +#define __NR_vmsplice 75
  1716. +#define __NR_splice 76
  1717. +#define __NR_tee 77
  1718. +#define __NR_readlinkat 78
  1719. +#define __NR_fstatat 79
  1720. +#define __NR_fstat 80
  1721. +#define __NR_sync 81
  1722. +#define __NR_fsync 82
  1723. +#define __NR_fdatasync 83
  1724. +#define __NR_sync_file_range 84
  1725. +#define __NR_timerfd_create 85
  1726. +#define __NR_timerfd_settime 86
  1727. +#define __NR_timerfd_gettime 87
  1728. +#define __NR_utimensat 88
  1729. +#define __NR_acct 89
  1730. +#define __NR_capget 90
  1731. +#define __NR_capset 91
  1732. +#define __NR_personality 92
  1733. +#define __NR_exit 93
  1734. +#define __NR_exit_group 94
  1735. +#define __NR_waitid 95
  1736. +#define __NR_set_tid_address 96
  1737. +#define __NR_unshare 97
  1738. +#define __NR_futex 98
  1739. +#define __NR_set_robust_list 99
  1740. +#define __NR_get_robust_list 100
  1741. +#define __NR_nanosleep 101
  1742. +#define __NR_getitimer 102
  1743. +#define __NR_setitimer 103
  1744. +#define __NR_kexec_load 104
  1745. +#define __NR_init_module 105
  1746. +#define __NR_delete_module 106
  1747. +#define __NR_timer_create 107
  1748. +#define __NR_timer_gettime 108
  1749. +#define __NR_timer_getoverrun 109
  1750. +#define __NR_timer_settime 110
  1751. +#define __NR_timer_delete 111
  1752. +#define __NR_clock_settime 112
  1753. +#define __NR_clock_gettime 113
  1754. +#define __NR_clock_getres 114
  1755. +#define __NR_clock_nanosleep 115
  1756. +#define __NR_syslog 116
  1757. +#define __NR_ptrace 117
  1758. +#define __NR_sched_setparam 118
  1759. +#define __NR_sched_setscheduler 119
  1760. +#define __NR_sched_getscheduler 120
  1761. +#define __NR_sched_getparam 121
  1762. +#define __NR_sched_setaffinity 122
  1763. +#define __NR_sched_getaffinity 123
  1764. +#define __NR_sched_yield 124
  1765. +#define __NR_sched_get_priority_max 125
  1766. +#define __NR_sched_get_priority_min 126
  1767. +#define __NR_sched_rr_get_interval 127
  1768. +#define __NR_restart_syscall 128
  1769. +#define __NR_kill 129
  1770. +#define __NR_tkill 130
  1771. +#define __NR_tgkill 131
  1772. +#define __NR_sigaltstack 132
  1773. +#define __NR_rt_sigsuspend 133
  1774. +#define __NR_rt_sigaction 134
  1775. +#define __NR_rt_sigprocmask 135
  1776. +#define __NR_rt_sigpending 136
  1777. +#define __NR_rt_sigtimedwait 137
  1778. +#define __NR_rt_sigqueueinfo 138
  1779. +#define __NR_rt_sigreturn 139
  1780. +#define __NR_setpriority 140
  1781. +#define __NR_getpriority 141
  1782. +#define __NR_reboot 142
  1783. +#define __NR_setregid 143
  1784. +#define __NR_setgid 144
  1785. +#define __NR_setreuid 145
  1786. +#define __NR_setuid 146
  1787. +#define __NR_setresuid 147
  1788. +#define __NR_getresuid 148
  1789. +#define __NR_setresgid 149
  1790. +#define __NR_getresgid 150
  1791. +#define __NR_setfsuid 151
  1792. +#define __NR_setfsgid 152
  1793. +#define __NR_times 153
  1794. +#define __NR_setpgid 154
  1795. +#define __NR_getpgid 155
  1796. +#define __NR_getsid 156
  1797. +#define __NR_setsid 157
  1798. +#define __NR_getgroups 158
  1799. +#define __NR_setgroups 159
  1800. +#define __NR_uname 160
  1801. +#define __NR_sethostname 161
  1802. +#define __NR_setdomainname 162
  1803. +#define __NR_getrlimit 163
  1804. +#define __NR_setrlimit 164
  1805. +#define __NR_getrusage 165
  1806. +#define __NR_umask 166
  1807. +#define __NR_prctl 167
  1808. +#define __NR_getcpu 168
  1809. +#define __NR_gettimeofday 169
  1810. +#define __NR_settimeofday 170
  1811. +#define __NR_adjtimex 171
  1812. +#define __NR_getpid 172
  1813. +#define __NR_getppid 173
  1814. +#define __NR_getuid 174
  1815. +#define __NR_geteuid 175
  1816. +#define __NR_getgid 176
  1817. +#define __NR_getegid 177
  1818. +#define __NR_gettid 178
  1819. +#define __NR_sysinfo 179
  1820. +#define __NR_mq_open 180
  1821. +#define __NR_mq_unlink 181
  1822. +#define __NR_mq_timedsend 182
  1823. +#define __NR_mq_timedreceive 183
  1824. +#define __NR_mq_notify 184
  1825. +#define __NR_mq_getsetattr 185
  1826. +#define __NR_msgget 186
  1827. +#define __NR_msgctl 187
  1828. +#define __NR_msgrcv 188
  1829. +#define __NR_msgsnd 189
  1830. +#define __NR_semget 190
  1831. +#define __NR_semctl 191
  1832. +#define __NR_semtimedop 192
  1833. +#define __NR_semop 193
  1834. +#define __NR_shmget 194
  1835. +#define __NR_shmctl 195
  1836. +#define __NR_shmat 196
  1837. +#define __NR_shmdt 197
  1838. +#define __NR_socket 198
  1839. +#define __NR_socketpair 199
  1840. +#define __NR_bind 200
  1841. +#define __NR_listen 201
  1842. +#define __NR_accept 202
  1843. +#define __NR_connect 203
  1844. +#define __NR_getsockname 204
  1845. +#define __NR_getpeername 205
  1846. +#define __NR_sendto 206
  1847. +#define __NR_recvfrom 207
  1848. +#define __NR_setsockopt 208
  1849. +#define __NR_getsockopt 209
  1850. +#define __NR_shutdown 210
  1851. +#define __NR_sendmsg 211
  1852. +#define __NR_recvmsg 212
  1853. +#define __NR_readahead 213
  1854. +#define __NR_brk 214
  1855. +#define __NR_munmap 215
  1856. +#define __NR_mremap 216
  1857. +#define __NR_add_key 217
  1858. +#define __NR_request_key 218
  1859. +#define __NR_keyctl 219
  1860. +#define __NR_clone 220
  1861. +#define __NR_execve 221
  1862. +#define __NR_mmap 222
  1863. +#define __NR_fadvise64 223
  1864. +#define __NR_swapon 224
  1865. +#define __NR_swapoff 225
  1866. +#define __NR_mprotect 226
  1867. +#define __NR_msync 227
  1868. +#define __NR_mlock 228
  1869. +#define __NR_munlock 229
  1870. +#define __NR_mlockall 230
  1871. +#define __NR_munlockall 231
  1872. +#define __NR_mincore 232
  1873. +#define __NR_madvise 233
  1874. +#define __NR_remap_file_pages 234
  1875. +#define __NR_mbind 235
  1876. +#define __NR_get_mempolicy 236
  1877. +#define __NR_set_mempolicy 237
  1878. +#define __NR_migrate_pages 238
  1879. +#define __NR_move_pages 239
  1880. +#define __NR_rt_tgsigqueueinfo 240
  1881. +#define __NR_perf_event_open 241
  1882. +#define __NR_accept4 242
  1883. +#define __NR_recvmmsg 243
  1884. +#define __NR_arch_specific_syscall 244
  1885. +#define __NR_wait4 260
  1886. +#define __NR_prlimit64 261
  1887. +#define __NR_fanotify_init 262
  1888. +#define __NR_fanotify_mark 263
  1889. +#define __NR_name_to_handle_at 264
  1890. +#define __NR_open_by_handle_at 265
  1891. +#define __NR_clock_adjtime 266
  1892. +#define __NR_syncfs 267
  1893. +#define __NR_setns 268
  1894. +#define __NR_sendmmsg 269
  1895. +#define __NR_process_vm_readv 270
  1896. +#define __NR_process_vm_writev 271
  1897. +#define __NR_kcmp 272
  1898. +#define __NR_finit_module 273
  1899. +#define __NR_sched_setattr 274
  1900. +#define __NR_sched_getattr 275
  1901. +#define __NR_renameat2 276
  1902. +#define __NR_seccomp 277
  1903. +#define __NR_getrandom 278
  1904. +#define __NR_memfd_create 279
  1905. +#define __NR_bpf 280
  1906. +#define __NR_execveat 281
  1907. +#define __NR_userfaultfd 282
  1908. +#define __NR_membarrier 283
  1909. +#define __NR_mlock2 284
  1910. +#define __NR_copy_file_range 285
  1911. +#define __NR_preadv2 286
  1912. +#define __NR_pwritev2 287
  1913. +#define __NR_pkey_mprotect 288
  1914. +#define __NR_pkey_alloc 289
  1915. +#define __NR_pkey_free 290
  1916. +#define __NR_sysriscv __NR_arch_specific_syscall
  1917. +
  1918. --- /dev/null
  1919. +++ b/arch/riscv64/bits/user.h
  1920. @@ -0,0 +1,43 @@
  1921. +struct user_regs_struct {
  1922. + unsigned long pc;
  1923. + unsigned long ra;
  1924. + unsigned long sp;
  1925. + unsigned long gp;
  1926. + unsigned long tp;
  1927. + unsigned long t0;
  1928. + unsigned long t1;
  1929. + unsigned long t2;
  1930. + unsigned long s0;
  1931. + unsigned long s1;
  1932. + unsigned long a0;
  1933. + unsigned long a1;
  1934. + unsigned long a2;
  1935. + unsigned long a3;
  1936. + unsigned long a4;
  1937. + unsigned long a5;
  1938. + unsigned long a6;
  1939. + unsigned long a7;
  1940. + unsigned long s2;
  1941. + unsigned long s3;
  1942. + unsigned long s4;
  1943. + unsigned long s5;
  1944. + unsigned long s6;
  1945. + unsigned long s7;
  1946. + unsigned long s8;
  1947. + unsigned long s9;
  1948. + unsigned long s10;
  1949. + unsigned long s11;
  1950. + unsigned long t3;
  1951. + unsigned long t4;
  1952. + unsigned long t5;
  1953. + unsigned long t6;
  1954. +};
  1955. +
  1956. +struct user_fpregs_struct {
  1957. + double f[32];
  1958. + unsigned int fcsr;
  1959. +};
  1960. +
  1961. +#define ELF_NGREG 32
  1962. +typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG];
  1963. +typedef struct user_fpregs_struct elf_fpregset_t;
  1964. --- /dev/null
  1965. +++ b/arch/riscv64/crt_arch.h
  1966. @@ -0,0 +1,18 @@
  1967. +__asm__(
  1968. +".text\n"
  1969. +".global " START "\n"
  1970. +".type " START ",%function\n"
  1971. +START ":\n"
  1972. +".weak __global_pointer$\n"
  1973. +".hidden __global_pointer$\n"
  1974. +".option push\n"
  1975. +".option norelax\n\t"
  1976. +"lla gp, __global_pointer$\n"
  1977. +".option pop\n\t"
  1978. +"mv a0, sp\n"
  1979. +".weak _DYNAMIC\n"
  1980. +".hidden _DYNAMIC\n\t"
  1981. +"lla a1, _DYNAMIC\n\t"
  1982. +"andi sp, sp, -16\n\t"
  1983. +"jal " START "_c"
  1984. +);
  1985. --- /dev/null
  1986. +++ b/arch/riscv64/pthread_arch.h
  1987. @@ -0,0 +1,12 @@
  1988. +static inline struct pthread *__pthread_self()
  1989. +{
  1990. + char *tp;
  1991. + __asm__ __volatile__("mv %0, tp" : "=r"(tp));
  1992. + return (void *)(tp - sizeof(struct pthread));
  1993. +}
  1994. +
  1995. +#define TLS_ABOVE_TP
  1996. +#define GAP_ABOVE_TP 0
  1997. +#define TP_ADJ(p) ((char *)p + sizeof(struct pthread))
  1998. +
  1999. +#define MC_PC gregs[0]
  2000. --- /dev/null
  2001. +++ b/arch/riscv64/reloc.h
  2002. @@ -0,0 +1,27 @@
  2003. +#if defined __riscv_float_abi_soft
  2004. +#define RISCV_FP_SUFFIX "-sf"
  2005. +#elif defined __riscv_float_abi_single
  2006. +#define RISCV_FP_SUFFIX "-sp"
  2007. +#elif defined __riscv_float_abi_double
  2008. +#define RISCV_FP_SUFFIX ""
  2009. +#endif
  2010. +
  2011. +#define RISCV_LDSO_HELPER(x) "riscv" #x
  2012. +#define RISCV_LDSO(x) RISCV_LDSO_HELPER(x)
  2013. +
  2014. +#define LDSO_ARCH RISCV_LDSO(__riscv_xlen) RISCV_FP_SUFFIX
  2015. +
  2016. +#define NO_LEGACY_INITFINI
  2017. +
  2018. +#define TPOFF_K 0
  2019. +
  2020. +#define REL_SYMBOLIC R_RISCV_64
  2021. +#define REL_PLT R_RISCV_JUMP_SLOT
  2022. +#define REL_RELATIVE R_RISCV_RELATIVE
  2023. +#define REL_COPY R_RISCV_COPY
  2024. +#define REL_DTPMOD R_RISCV_TLS_DTPMOD64
  2025. +#define REL_DTPOFF R_RISCV_TLS_DTPREL64
  2026. +#define REL_TPOFF R_RISCV_TLS_TPREL64
  2027. +
  2028. +#define CRTJMP(pc,sp) __asm__ __volatile__( \
  2029. + "mv sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
  2030. --- /dev/null
  2031. +++ b/arch/riscv64/syscall_arch.h
  2032. @@ -0,0 +1,76 @@
  2033. +#define __SYSCALL_LL_E(x) (x)
  2034. +#define __SYSCALL_LL_O(x) (x)
  2035. +
  2036. +#define __asm_syscall(...) \
  2037. + __asm__ __volatile__ ("scall\n\t" \
  2038. + : "+r"(a0) : __VA_ARGS__ : "memory"); \
  2039. + return a0; \
  2040. +
  2041. +static inline long __syscall0(long n)
  2042. +{
  2043. + register long a7 __asm__("a7") = n;
  2044. + register long a0 __asm__("a0");
  2045. + __asm_syscall("r"(a7))
  2046. +}
  2047. +
  2048. +static inline long __syscall1(long n, long a)
  2049. +{
  2050. + register long a7 __asm__("a7") = n;
  2051. + register long a0 __asm__("a0") = a;
  2052. + __asm_syscall("r"(a7), "0"(a0))
  2053. +}
  2054. +
  2055. +static inline long __syscall2(long n, long a, long b)
  2056. +{
  2057. + register long a7 __asm__("a7") = n;
  2058. + register long a0 __asm__("a0") = a;
  2059. + register long a1 __asm__("a1") = b;
  2060. + __asm_syscall("r"(a7), "0"(a0), "r"(a1))
  2061. +}
  2062. +
  2063. +static inline long __syscall3(long n, long a, long b, long c)
  2064. +{
  2065. + register long a7 __asm__("a7") = n;
  2066. + register long a0 __asm__("a0") = a;
  2067. + register long a1 __asm__("a1") = b;
  2068. + register long a2 __asm__("a2") = c;
  2069. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2))
  2070. +}
  2071. +
  2072. +static inline long __syscall4(long n, long a, long b, long c, long d)
  2073. +{
  2074. + register long a7 __asm__("a7") = n;
  2075. + register long a0 __asm__("a0") = a;
  2076. + register long a1 __asm__("a1") = b;
  2077. + register long a2 __asm__("a2") = c;
  2078. + register long a3 __asm__("a3") = d;
  2079. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3))
  2080. +}
  2081. +
  2082. +static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  2083. +{
  2084. + register long a7 __asm__("a7") = n;
  2085. + register long a0 __asm__("a0") = a;
  2086. + register long a1 __asm__("a1") = b;
  2087. + register long a2 __asm__("a2") = c;
  2088. + register long a3 __asm__("a3") = d;
  2089. + register long a4 __asm__("a4") = e;
  2090. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4))
  2091. +}
  2092. +
  2093. +static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  2094. +{
  2095. + register long a7 __asm__("a7") = n;
  2096. + register long a0 __asm__("a0") = a;
  2097. + register long a1 __asm__("a1") = b;
  2098. + register long a2 __asm__("a2") = c;
  2099. + register long a3 __asm__("a3") = d;
  2100. + register long a4 __asm__("a4") = e;
  2101. + register long a5 __asm__("a5") = f;
  2102. + __asm_syscall("r"(a7), "0"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5))
  2103. +}
  2104. +
  2105. +#define VDSO_USEFUL
  2106. +/* We don't have a clock_gettime function.
  2107. +#define VDSO_CGT_SYM "__vdso_clock_gettime"
  2108. +#define VDSO_CGT_VER "LINUX_2.6" */
  2109. --- a/configure
  2110. +++ b/configure
  2111. @@ -322,6 +322,8 @@ microblaze*) ARCH=microblaze ;;
  2112. or1k*) ARCH=or1k ;;
  2113. powerpc64*|ppc64*) ARCH=powerpc64 ;;
  2114. powerpc*|ppc*) ARCH=powerpc ;;
  2115. +riscv64*) ARCH=riscv64 ;;
  2116. +riscv*) ARCH=riscv32 ;;
  2117. sh[1-9bel-]*|sh|superh*) ARCH=sh ;;
  2118. s390x*) ARCH=s390x ;;
  2119. unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
  2120. @@ -640,6 +642,11 @@ trycppif __LITTLE_ENDIAN__ "$t" && SUBAR
  2121. trycppif _SOFT_FLOAT "$t" && fail "$0: error: soft-float not supported on powerpc64"
  2122. fi
  2123. +if test "$ARCH" = "riscv" || test "$ARCH" = "riscv64" ; then
  2124. +trycppif "RISCVEB || _RISCVEB || __RISCVEB || __RISCVEB__" "$t" && SUBARCH=${SUBARCH}eb
  2125. +trycppif __riscv_soft_float "$t" && SUBARCH=${SUBARCH}-sf
  2126. +fi
  2127. +
  2128. if test "$ARCH" = "sh" ; then
  2129. tryflag CFLAGS_AUTO -Wa,--isa=any
  2130. trycppif __BIG_ENDIAN__ "$t" && SUBARCH=${SUBARCH}eb
  2131. --- /dev/null
  2132. +++ b/crt/riscv32/crti.s
  2133. @@ -0,0 +1,11 @@
  2134. +.section .init
  2135. +.global _init
  2136. +.type _init,%function
  2137. +_init:
  2138. + ret
  2139. +
  2140. +.section .fini
  2141. +.global _fini
  2142. +.type _fini,%function
  2143. +_fini:
  2144. + ret
  2145. --- /dev/null
  2146. +++ b/crt/riscv64/crti.s
  2147. @@ -0,0 +1,11 @@
  2148. +.section .init
  2149. +.global _init
  2150. +.type _init,%function
  2151. +_init:
  2152. + ret
  2153. +
  2154. +.section .fini
  2155. +.global _fini
  2156. +.type _fini %function
  2157. +_fini:
  2158. + ret
  2159. --- a/include/elf.h
  2160. +++ b/include/elf.h
  2161. @@ -3166,6 +3166,62 @@ enum
  2162. #define R_BPF_NONE 0
  2163. #define R_BPF_MAP_FD 1
  2164. +#define R_RISCV_NONE 0
  2165. +#define R_RISCV_32 1
  2166. +#define R_RISCV_64 2
  2167. +#define R_RISCV_RELATIVE 3
  2168. +#define R_RISCV_COPY 4
  2169. +#define R_RISCV_JUMP_SLOT 5
  2170. +#define R_RISCV_TLS_DTPMOD32 6
  2171. +#define R_RISCV_TLS_DTPMOD64 7
  2172. +#define R_RISCV_TLS_DTPREL32 8
  2173. +#define R_RISCV_TLS_DTPREL64 9
  2174. +#define R_RISCV_TLS_TPREL32 10
  2175. +#define R_RISCV_TLS_TPREL64 11
  2176. +
  2177. +#define R_RISCV_BRANCH 16
  2178. +#define R_RISCV_JAL 17
  2179. +#define R_RISCV_CALL 18
  2180. +#define R_RISCV_CALL_PLT 19
  2181. +#define R_RISCV_GOT_HI20 20
  2182. +#define R_RISCV_TLS_GOT_HI20 21
  2183. +#define R_RISCV_TLS_GD_HI20 22
  2184. +#define R_RISCV_PCREL_HI20 23
  2185. +#define R_RISCV_PCREL_LO12_I 24
  2186. +#define R_RISCV_PCREL_LO12_S 25
  2187. +#define R_RISCV_HI20 26
  2188. +#define R_RISCV_LO12_I 27
  2189. +#define R_RISCV_LO12_S 28
  2190. +#define R_RISCV_TPREL_HI20 29
  2191. +#define R_RISCV_TPREL_LO12_I 30
  2192. +#define R_RISCV_TPREL_LO12_S 31
  2193. +#define R_RISCV_TPREL_ADD 32
  2194. +#define R_RISCV_ADD8 33
  2195. +#define R_RISCV_ADD16 34
  2196. +#define R_RISCV_ADD32 35
  2197. +#define R_RISCV_ADD64 36
  2198. +#define R_RISCV_SUB8 37
  2199. +#define R_RISCV_SUB16 38
  2200. +#define R_RISCV_SUB32 39
  2201. +#define R_RISCV_SUB64 40
  2202. +#define R_RISCV_GNU_VTINHERIT 41
  2203. +#define R_RISCV_GNU_VTENTRY 42
  2204. +#define R_RISCV_ALIGN 43
  2205. +#define R_RISCV_RVC_BRANCH 44
  2206. +#define R_RISCV_RVC_JUMP 45
  2207. +#define R_RISCV_RVC_LUI 46
  2208. +#define R_RISCV_GPREL_I 47
  2209. +#define R_RISCV_GPREL_S 48
  2210. +#define R_RISCV_TPREL_I 49
  2211. +#define R_RISCV_TPREL_S 50
  2212. +#define R_RISCV_RELAX 51
  2213. +#define R_RISCV_SUB6 52
  2214. +#define R_RISCV_SET6 53
  2215. +#define R_RISCV_SET8 54
  2216. +#define R_RISCV_SET16 55
  2217. +#define R_RISCV_SET32 56
  2218. +#define R_RISCV_32_PCREL 57
  2219. +
  2220. #ifdef __cplusplus
  2221. }
  2222. #endif
  2223. --- /dev/null
  2224. +++ b/src/fenv/riscv32/fenv-sf.c
  2225. @@ -0,0 +1,3 @@
  2226. +#ifdef __riscv_soft_float
  2227. +#include "../fenv.c"
  2228. +#endif
  2229. --- /dev/null
  2230. +++ b/src/fenv/riscv32/fenv.S
  2231. @@ -0,0 +1,53 @@
  2232. +#ifndef __riscv_soft_float
  2233. +
  2234. +.global feclearexcept
  2235. +.type feclearexcept, %function
  2236. +feclearexcept:
  2237. + csrc fflags, a0
  2238. + li a0, 0
  2239. + ret
  2240. +
  2241. +.global feraiseexcept
  2242. +.type feraiseexcept, %function
  2243. +feraiseexcept:
  2244. + csrs fflags, a0
  2245. + li a0, 0
  2246. + ret
  2247. +
  2248. +.global fetestexcept
  2249. +.type fetestexcept, %function
  2250. +fetestexcept:
  2251. + frflags t0
  2252. + and a0, t0, a0
  2253. + ret
  2254. +
  2255. +.global fegetround
  2256. +.type fegetround, %function
  2257. +fegetround:
  2258. + frrm a0
  2259. + ret
  2260. +
  2261. +.global __fesetround
  2262. +.type __fesetround, %function
  2263. +__fesetround:
  2264. + fsrm t0, a0
  2265. + li a0, 0
  2266. + ret
  2267. +
  2268. +.global fegetenv
  2269. +.type fegetenv, %function
  2270. +fegetenv:
  2271. + frcsr t0
  2272. + sw t0, 0(a0)
  2273. + li a0, 0
  2274. + ret
  2275. +
  2276. +.global fesetenv
  2277. +.type fesetenv, %function
  2278. +fesetenv:
  2279. + lw t1, 0(a0)
  2280. + fscsr t0, t1
  2281. + li a0, 0
  2282. + ret
  2283. +
  2284. +#endif
  2285. --- /dev/null
  2286. +++ b/src/fenv/riscv64/fenv-sf.c
  2287. @@ -0,0 +1,3 @@
  2288. +#ifdef __riscv_soft_float
  2289. +#include "../fenv.c"
  2290. +#endif
  2291. --- /dev/null
  2292. +++ b/src/fenv/riscv64/fenv.S
  2293. @@ -0,0 +1,53 @@
  2294. +#ifndef __riscv_soft_float
  2295. +
  2296. +.global feclearexcept
  2297. +.type feclearexcept, %function
  2298. +feclearexcept:
  2299. + csrc fflags, a0
  2300. + li a0, 0
  2301. + ret
  2302. +
  2303. +.global feraiseexcept
  2304. +.type feraiseexcept, %function
  2305. +feraiseexcept:
  2306. + csrs fflags, a0
  2307. + li a0, 0
  2308. + ret
  2309. +
  2310. +.global fetestexcept
  2311. +.type fetestexcept, %function
  2312. +fetestexcept:
  2313. + frflags t0
  2314. + and a0, t0, a0
  2315. + ret
  2316. +
  2317. +.global fegetround
  2318. +.type fegetround, %function
  2319. +fegetround:
  2320. + frrm a0
  2321. + ret
  2322. +
  2323. +.global __fesetround
  2324. +.type __fesetround, %function
  2325. +__fesetround:
  2326. + fsrm t0, a0
  2327. + li a0, 0
  2328. + ret
  2329. +
  2330. +.global fegetenv
  2331. +.type fegetenv, %function
  2332. +fegetenv:
  2333. + frcsr t0
  2334. + sw t0, 0(a0)
  2335. + li a0, 0
  2336. + ret
  2337. +
  2338. +.global fesetenv
  2339. +.type fesetenv, %function
  2340. +fesetenv:
  2341. + lw t1, 0(a0)
  2342. + fscsr t0, t1
  2343. + li a0, 0
  2344. + ret
  2345. +
  2346. +#endif
  2347. --- /dev/null
  2348. +++ b/src/internal/riscv32/syscall.s
  2349. @@ -0,0 +1,15 @@
  2350. +.global __syscall
  2351. +.hidden __syscall
  2352. +.type __syscall,%function
  2353. +__syscall:
  2354. + mv t0, a0
  2355. + mv a0, a1
  2356. + mv a1, a2
  2357. + mv a2, a3
  2358. + mv a3, a4
  2359. + mv a4, a5
  2360. + mv a5, a6
  2361. + mv a6, a7
  2362. + mv a7, t0
  2363. + scall
  2364. + ret
  2365. --- /dev/null
  2366. +++ b/src/internal/riscv64/syscall.s
  2367. @@ -0,0 +1,15 @@
  2368. +.global __syscall
  2369. +.hidden __syscall
  2370. +.type __syscall,%function
  2371. +__syscall:
  2372. + mv t0, a0
  2373. + mv a0, a1
  2374. + mv a1, a2
  2375. + mv a2, a3
  2376. + mv a3, a4
  2377. + mv a4, a5
  2378. + mv a5, a6
  2379. + mv a6, a7
  2380. + mv a7, t0
  2381. + scall
  2382. + ret
  2383. --- /dev/null
  2384. +++ b/src/ldso/riscv32/dlsym.s
  2385. @@ -0,0 +1,6 @@
  2386. +.global dlsym
  2387. +.hidden __dlsym
  2388. +.type dlsym, %function
  2389. +dlsym:
  2390. + mv a2, ra
  2391. + j __dlsym
  2392. --- /dev/null
  2393. +++ b/src/ldso/riscv64/dlsym.s
  2394. @@ -0,0 +1,6 @@
  2395. +.global dlsym
  2396. +.hidden __dlsym
  2397. +.type dlsym, %function
  2398. +dlsym:
  2399. + mv a2, ra
  2400. + j __dlsym
  2401. --- /dev/null
  2402. +++ b/src/math/riscv32/copysign.s
  2403. @@ -0,0 +1,5 @@
  2404. +.global copysign
  2405. +.type copysign, %function
  2406. +copysign:
  2407. + fsgnj.d fa0, fa0, fa1
  2408. + ret
  2409. --- /dev/null
  2410. +++ b/src/math/riscv32/copysignf.s
  2411. @@ -0,0 +1,5 @@
  2412. +.global copysignf
  2413. +.type copysignf, %function
  2414. +copysignf:
  2415. + fsgnj.s fa0, fa0, fa1
  2416. + ret
  2417. --- /dev/null
  2418. +++ b/src/math/riscv32/fabs.s
  2419. @@ -0,0 +1,5 @@
  2420. +.global fabs
  2421. +.type fabs, %function
  2422. +fabs:
  2423. + fabs.d fa0, fa0
  2424. + ret
  2425. --- /dev/null
  2426. +++ b/src/math/riscv32/fabsf.s
  2427. @@ -0,0 +1,5 @@
  2428. +.global fabsf
  2429. +.type fabsf, %function
  2430. +fabsf:
  2431. + fabs.s fa0, fa0
  2432. + ret
  2433. --- /dev/null
  2434. +++ b/src/math/riscv32/fma.s
  2435. @@ -0,0 +1,5 @@
  2436. +.global fma
  2437. +.type fma, %function
  2438. +fma:
  2439. + fmadd.d fa0, fa0, fa1, fa2
  2440. + ret
  2441. --- /dev/null
  2442. +++ b/src/math/riscv32/fmaf.s
  2443. @@ -0,0 +1,5 @@
  2444. +.global fmaf
  2445. +.type fmaf, %function
  2446. +fmaf:
  2447. + fmadd.s fa0, fa0, fa1, fa2
  2448. + ret
  2449. --- /dev/null
  2450. +++ b/src/math/riscv32/fmax.s
  2451. @@ -0,0 +1,5 @@
  2452. +.global fmax
  2453. +.type fmax, %function
  2454. +fmax:
  2455. + fmax.d fa0, fa0, fa1
  2456. + ret
  2457. --- /dev/null
  2458. +++ b/src/math/riscv32/fmaxf.s
  2459. @@ -0,0 +1,5 @@
  2460. +.global fmaxf
  2461. +.type fmaxf, %function
  2462. +fmaxf:
  2463. + fmax.s fa0, fa0, fa1
  2464. + ret
  2465. --- /dev/null
  2466. +++ b/src/math/riscv32/fmin.s
  2467. @@ -0,0 +1,5 @@
  2468. +.global fmin
  2469. +.type fmin, %function
  2470. +fmin:
  2471. + fmin.d fa0, fa0, fa1
  2472. + ret
  2473. --- /dev/null
  2474. +++ b/src/math/riscv32/fminf.s
  2475. @@ -0,0 +1,5 @@
  2476. +.global fminf
  2477. +.type fminf, %function
  2478. +fminf:
  2479. + fmin.s fa0, fa0, fa1
  2480. + ret
  2481. --- /dev/null
  2482. +++ b/src/math/riscv32/sqrt.s
  2483. @@ -0,0 +1,5 @@
  2484. +.global sqrt
  2485. +.type sqrt, %function
  2486. +sqrt:
  2487. + fsqrt.d fa0, fa0
  2488. + ret
  2489. --- /dev/null
  2490. +++ b/src/math/riscv32/sqrtf.s
  2491. @@ -0,0 +1,5 @@
  2492. +.global sqrtf
  2493. +.type sqrtf, %function
  2494. +sqrtf:
  2495. + fsqrt.s fa0, fa0
  2496. + ret
  2497. --- /dev/null
  2498. +++ b/src/math/riscv64/copysign.s
  2499. @@ -0,0 +1,5 @@
  2500. +.global copysign
  2501. +.type copysign, %function
  2502. +copysign:
  2503. + fsgnj.d fa0, fa0, fa1
  2504. + ret
  2505. --- /dev/null
  2506. +++ b/src/math/riscv64/copysignf.s
  2507. @@ -0,0 +1,5 @@
  2508. +.global copysignf
  2509. +.type copysignf, %function
  2510. +copysignf:
  2511. + fsgnj.s fa0, fa0, fa1
  2512. + ret
  2513. --- /dev/null
  2514. +++ b/src/math/riscv64/fabs.s
  2515. @@ -0,0 +1,5 @@
  2516. +.global fabs
  2517. +.type fabs, %function
  2518. +fabs:
  2519. + fabs.d fa0, fa0
  2520. + ret
  2521. --- /dev/null
  2522. +++ b/src/math/riscv64/fabsf.s
  2523. @@ -0,0 +1,5 @@
  2524. +.global fabsf
  2525. +.type fabsf, %function
  2526. +fabsf:
  2527. + fabs.s fa0, fa0
  2528. + ret
  2529. --- /dev/null
  2530. +++ b/src/math/riscv64/fma.s
  2531. @@ -0,0 +1,5 @@
  2532. +.global fma
  2533. +.type fma, %function
  2534. +fma:
  2535. + fmadd.d fa0, fa0, fa1, fa2
  2536. + ret
  2537. --- /dev/null
  2538. +++ b/src/math/riscv64/fmaf.s
  2539. @@ -0,0 +1,5 @@
  2540. +.global fmaf
  2541. +.type fmaf, %function
  2542. +fmaf:
  2543. + fmadd.s fa0, fa0, fa1, fa2
  2544. + ret
  2545. --- /dev/null
  2546. +++ b/src/math/riscv64/fmax.s
  2547. @@ -0,0 +1,5 @@
  2548. +.global fmax
  2549. +.type fmax, %function
  2550. +fmax:
  2551. + fmax.d fa0, fa0, fa1
  2552. + ret
  2553. --- /dev/null
  2554. +++ b/src/math/riscv64/fmaxf.s
  2555. @@ -0,0 +1,5 @@
  2556. +.global fmaxf
  2557. +.type fmaxf, %function
  2558. +fmaxf:
  2559. + fmax.s fa0, fa0, fa1
  2560. + ret
  2561. --- /dev/null
  2562. +++ b/src/math/riscv64/fmin.s
  2563. @@ -0,0 +1,5 @@
  2564. +.global fmin
  2565. +.type fmin, %function
  2566. +fmin:
  2567. + fmin.d fa0, fa0, fa1
  2568. + ret
  2569. --- /dev/null
  2570. +++ b/src/math/riscv64/fminf.s
  2571. @@ -0,0 +1,5 @@
  2572. +.global fminf
  2573. +.type fminf, %function
  2574. +fminf:
  2575. + fmin.s fa0, fa0, fa1
  2576. + ret
  2577. --- /dev/null
  2578. +++ b/src/math/riscv64/sqrt.s
  2579. @@ -0,0 +1,5 @@
  2580. +.global sqrt
  2581. +.type sqrt, %function
  2582. +sqrt:
  2583. + fsqrt.d fa0, fa0
  2584. + ret
  2585. --- /dev/null
  2586. +++ b/src/math/riscv64/sqrtf.s
  2587. @@ -0,0 +1,5 @@
  2588. +.global sqrtf
  2589. +.type sqrtf, %function
  2590. +sqrtf:
  2591. + fsqrt.s fa0, fa0
  2592. + ret
  2593. --- /dev/null
  2594. +++ b/src/setjmp/riscv32/longjmp.S
  2595. @@ -0,0 +1,44 @@
  2596. +.global __longjmp
  2597. +.global _longjmp
  2598. +.global longjmp
  2599. +.type __longjmp, %function
  2600. +.type _longjmp, %function
  2601. +.type longjmp, %function
  2602. +__longjmp:
  2603. +_longjmp:
  2604. +longjmp:
  2605. + lw s0, 0(a0)
  2606. + lw s1, 4(a0)
  2607. + lw s2, 8(a0)
  2608. + lw s3, 12(a0)
  2609. + lw s4, 16(a0)
  2610. + lw s5, 20(a0)
  2611. + lw s6, 24(a0)
  2612. + lw s7, 28(a0)
  2613. + lw s8, 32(a0)
  2614. + lw s9, 36(a0)
  2615. + lw s10, 40(a0)
  2616. + lw s11, 44(a0)
  2617. + lw sp, 48(a0)
  2618. + lw ra, 52(a0)
  2619. +
  2620. +#ifndef __riscv_soft_float
  2621. + fld fs0, 56(a0)
  2622. + fld fs1, 64(a0)
  2623. + fld fs2, 72(a0)
  2624. + fld fs3, 80(a0)
  2625. + fld fs3, 88(a0)
  2626. + fld fs4, 96(a0)
  2627. + fld fs5, 104(a0)
  2628. + fld fs6, 112(a0)
  2629. + fld fs7, 120(a0)
  2630. + fld fs8, 128(a0)
  2631. + fld fs9, 136(a0)
  2632. + fld fs10, 144(a0)
  2633. + fld fs11, 152(a0)
  2634. +#endif
  2635. +
  2636. + mv a0, a1
  2637. + bnez a1, 1f
  2638. + li a0, 1
  2639. +1: ret
  2640. --- /dev/null
  2641. +++ b/src/setjmp/riscv32/setjmp.S
  2642. @@ -0,0 +1,42 @@
  2643. +.global __setjmp
  2644. +.global _setjmp
  2645. +.global setjmp
  2646. +.type __setjmp, %function
  2647. +.type _setjmp, %function
  2648. +.type setjmp, %function
  2649. +__setjmp:
  2650. +_setjmp:
  2651. +setjmp:
  2652. + sw s0, 0(a0)
  2653. + sw s1, 4(a0)
  2654. + sw s2, 8(a0)
  2655. + sw s3, 12(a0)
  2656. + sw s4, 16(a0)
  2657. + sw s5, 20(a0)
  2658. + sw s6, 24(a0)
  2659. + sw s7, 28(a0)
  2660. + sw s8, 32(a0)
  2661. + sw s9, 36(a0)
  2662. + sw s10, 40(a0)
  2663. + sw s11, 44(a0)
  2664. + sw sp, 48(a0)
  2665. + sw ra, 52(a0)
  2666. +
  2667. +#ifndef __riscv_soft_float
  2668. + fsd fs0, 56(a0)
  2669. + fsd fs1, 64(a0)
  2670. + fsd fs2, 72(a0)
  2671. + fsd fs3, 80(a0)
  2672. + fsd fs3, 88(a0)
  2673. + fsd fs4, 96(a0)
  2674. + fsd fs5, 104(a0)
  2675. + fsd fs6, 112(a0)
  2676. + fsd fs7, 120(a0)
  2677. + fsd fs8, 128(a0)
  2678. + fsd fs9, 136(a0)
  2679. + fsd fs10, 144(a0)
  2680. + fsd fs11, 152(a0)
  2681. +#endif
  2682. +
  2683. + li a0, 0
  2684. + ret
  2685. --- /dev/null
  2686. +++ b/src/setjmp/riscv64/longjmp.S
  2687. @@ -0,0 +1,44 @@
  2688. +.global __longjmp
  2689. +.global _longjmp
  2690. +.global longjmp
  2691. +.type __longjmp, %function
  2692. +.type _longjmp, %function
  2693. +.type longjmp, %function
  2694. +__longjmp:
  2695. +_longjmp:
  2696. +longjmp:
  2697. + ld s0, 0(a0)
  2698. + ld s1, 8(a0)
  2699. + ld s2, 16(a0)
  2700. + ld s3, 24(a0)
  2701. + ld s4, 32(a0)
  2702. + ld s5, 40(a0)
  2703. + ld s6, 48(a0)
  2704. + ld s7, 56(a0)
  2705. + ld s8, 64(a0)
  2706. + ld s9, 72(a0)
  2707. + ld s10, 80(a0)
  2708. + ld s11, 88(a0)
  2709. + ld sp, 96(a0)
  2710. + ld ra, 104(a0)
  2711. +
  2712. +#ifndef __riscv_soft_float
  2713. + fld fs0, 112(a0)
  2714. + fld fs1, 120(a0)
  2715. + fld fs2, 128(a0)
  2716. + fld fs3, 136(a0)
  2717. + fld fs3, 144(a0)
  2718. + fld fs4, 152(a0)
  2719. + fld fs5, 160(a0)
  2720. + fld fs6, 168(a0)
  2721. + fld fs7, 176(a0)
  2722. + fld fs8, 184(a0)
  2723. + fld fs9, 192(a0)
  2724. + fld fs10, 200(a0)
  2725. + fld fs11, 208(a0)
  2726. +#endif
  2727. +
  2728. + mv a0, a1
  2729. + bnez a1, 1f
  2730. + li a0, 1
  2731. +1: ret
  2732. --- /dev/null
  2733. +++ b/src/setjmp/riscv64/setjmp.S
  2734. @@ -0,0 +1,42 @@
  2735. +.global __setjmp
  2736. +.global _setjmp
  2737. +.global setjmp
  2738. +.type __setjmp, %function
  2739. +.type _setjmp, %function
  2740. +.type setjmp, %function
  2741. +__setjmp:
  2742. +_setjmp:
  2743. +setjmp:
  2744. + sd s0, 0(a0)
  2745. + sd s1, 8(a0)
  2746. + sd s2, 16(a0)
  2747. + sd s3, 24(a0)
  2748. + sd s4, 32(a0)
  2749. + sd s5, 40(a0)
  2750. + sd s6, 48(a0)
  2751. + sd s7, 56(a0)
  2752. + sd s8, 64(a0)
  2753. + sd s9, 72(a0)
  2754. + sd s10, 80(a0)
  2755. + sd s11, 88(a0)
  2756. + sd sp, 96(a0)
  2757. + sd ra, 104(a0)
  2758. +
  2759. +#ifndef __riscv_soft_float
  2760. + fsd fs0, 112(a0)
  2761. + fsd fs1, 120(a0)
  2762. + fsd fs2, 128(a0)
  2763. + fsd fs3, 136(a0)
  2764. + fsd fs3, 144(a0)
  2765. + fsd fs4, 152(a0)
  2766. + fsd fs5, 160(a0)
  2767. + fsd fs6, 168(a0)
  2768. + fsd fs7, 176(a0)
  2769. + fsd fs8, 184(a0)
  2770. + fsd fs9, 192(a0)
  2771. + fsd fs10, 200(a0)
  2772. + fsd fs11, 208(a0)
  2773. +#endif
  2774. +
  2775. + li a0, 0
  2776. + ret
  2777. --- /dev/null
  2778. +++ b/src/signal/riscv32/restore.s
  2779. @@ -0,0 +1,8 @@
  2780. +.global __restore
  2781. +.type __restore, %function
  2782. +__restore:
  2783. +.global __restore_rt
  2784. +.type __restore_rt, %function
  2785. +__restore_rt:
  2786. + li a7, 139 # SYS_rt_sigreturn
  2787. + scall
  2788. --- /dev/null
  2789. +++ b/src/signal/riscv32/sigsetjmp.s
  2790. @@ -0,0 +1,21 @@
  2791. +.global sigsetjmp
  2792. +.global __sigsetjmp
  2793. +.type sigsetjmp, %function
  2794. +.type __sigsetjmp, %function
  2795. +sigsetjmp:
  2796. +__sigsetjmp:
  2797. + beqz a1, setjmp
  2798. +
  2799. + sw ra, 160(a0)
  2800. + sw s0, 164(a0)
  2801. + mv s0, a0
  2802. +
  2803. + jal setjmp
  2804. +
  2805. + mv a1, a0
  2806. + mv a0, s0
  2807. + lw s0, 164(a0)
  2808. + lw ra, 160(a0)
  2809. +
  2810. +.hidden __sigsetjmp_tail
  2811. + j __sigsetjmp_tail
  2812. --- /dev/null
  2813. +++ b/src/signal/riscv64/restore.s
  2814. @@ -0,0 +1,8 @@
  2815. +.global __restore
  2816. +.type __restore, %function
  2817. +__restore:
  2818. +.global __restore_rt
  2819. +.type __restore_rt, %function
  2820. +__restore_rt:
  2821. + li a7, 139 # SYS_rt_sigreturn
  2822. + scall
  2823. --- /dev/null
  2824. +++ b/src/signal/riscv64/sigsetjmp.s
  2825. @@ -0,0 +1,21 @@
  2826. +.global sigsetjmp
  2827. +.global __sigsetjmp
  2828. +.type sigsetjmp, %function
  2829. +.type __sigsetjmp, %function
  2830. +sigsetjmp:
  2831. +__sigsetjmp:
  2832. + beqz a1, setjmp
  2833. +
  2834. + sd ra, 216(a0)
  2835. + sd s0, 224(a0)
  2836. + mv s0, a0
  2837. +
  2838. + jal setjmp
  2839. +
  2840. + mv a1, a0
  2841. + mv a0, s0
  2842. + ld s0, 224(a0)
  2843. + ld ra, 216(a0)
  2844. +
  2845. +.hidden __sigsetjmp_tail
  2846. + j __sigsetjmp_tail
  2847. --- /dev/null
  2848. +++ b/src/thread/riscv32/__set_thread_area.s
  2849. @@ -0,0 +1,6 @@
  2850. +.global __set_thread_area
  2851. +.type __set_thread_area, %function
  2852. +__set_thread_area:
  2853. + mv tp, a0
  2854. + li a0, 0
  2855. + ret
  2856. --- /dev/null
  2857. +++ b/src/thread/riscv32/__unmapself.s
  2858. @@ -0,0 +1,7 @@
  2859. +.global __unmapself
  2860. +.type __unmapself, %function
  2861. +__unmapself:
  2862. + li a7, 215 # SYS_munmap
  2863. + scall
  2864. + li a7, 93 # SYS_exit
  2865. + scall
  2866. --- /dev/null
  2867. +++ b/src/thread/riscv32/clone.s
  2868. @@ -0,0 +1,34 @@
  2869. +# __clone(func, stack, flags, arg, ptid, tls, ctid)
  2870. +# a0, a1, a2, a3, a4, a5, a6
  2871. +
  2872. +# syscall(SYS_clone, flags, stack, ptid, tls, ctid)
  2873. +# a7 a0, a1, a2, a3, a4
  2874. +
  2875. +.global __clone
  2876. +.type __clone, %function
  2877. +__clone:
  2878. + # Save func and arg to stack
  2879. + addi a1, a1, -16
  2880. + sw a0, 0(a1)
  2881. + sw a3, 4(a1)
  2882. +
  2883. + # Call SYS_clone
  2884. + mv a0, a2
  2885. + mv a2, a4
  2886. + mv a3, a5
  2887. + mv a4, a6
  2888. + li a7, 220 # SYS_clone
  2889. + scall
  2890. +
  2891. + beqz a0, 1f
  2892. + # Parent
  2893. + ret
  2894. +
  2895. + # Child
  2896. +1: lw a1, 0(sp)
  2897. + lw a0, 4(sp)
  2898. + jalr a1
  2899. +
  2900. + # Exit
  2901. + li a7, 93 # SYS_exit
  2902. + scall
  2903. --- /dev/null
  2904. +++ b/src/thread/riscv32/syscall_cp.s
  2905. @@ -0,0 +1,29 @@
  2906. +.global __cp_begin
  2907. +.hidden __cp_begin
  2908. +.global __cp_end
  2909. +.hidden __cp_end
  2910. +.global __cp_cancel
  2911. +.hidden __cp_cancel
  2912. +.hidden __cancel
  2913. +.global __syscall_cp_asm
  2914. +.hidden __syscall_cp_asm
  2915. +.type __syscall_cp_asm, %function
  2916. +__syscall_cp_asm:
  2917. +__cp_begin:
  2918. + lw t0, 0(a0)
  2919. + bnez t0, __cp_cancel
  2920. +
  2921. + mv t0, a1
  2922. + mv a0, a2
  2923. + mv a1, a3
  2924. + mv a2, a4
  2925. + mv a3, a5
  2926. + mv a4, a6
  2927. + mv a5, a7
  2928. + lw a6, 0(sp)
  2929. + mv a7, t0
  2930. + scall
  2931. +__cp_cancel:
  2932. + ret
  2933. +__cp_end:
  2934. + j __cancel
  2935. --- /dev/null
  2936. +++ b/src/thread/riscv64/__set_thread_area.s
  2937. @@ -0,0 +1,6 @@
  2938. +.global __set_thread_area
  2939. +.type __set_thread_area, %function
  2940. +__set_thread_area:
  2941. + mv tp, a0
  2942. + li a0, 0
  2943. + ret
  2944. --- /dev/null
  2945. +++ b/src/thread/riscv64/__unmapself.s
  2946. @@ -0,0 +1,7 @@
  2947. +.global __unmapself
  2948. +.type __unmapself, %function
  2949. +__unmapself:
  2950. + li a7, 215 # SYS_munmap
  2951. + scall
  2952. + li a7, 93 # SYS_exit
  2953. + scall
  2954. --- /dev/null
  2955. +++ b/src/thread/riscv64/clone.s
  2956. @@ -0,0 +1,34 @@
  2957. +# __clone(func, stack, flags, arg, ptid, tls, ctid)
  2958. +# a0, a1, a2, a3, a4, a5, a6
  2959. +
  2960. +# syscall(SYS_clone, flags, stack, ptid, tls, ctid)
  2961. +# a7 a0, a1, a2, a3, a4
  2962. +
  2963. +.global __clone
  2964. +.type __clone, %function
  2965. +__clone:
  2966. + # Save func and arg to stack
  2967. + addi a1, a1, -16
  2968. + sd a0, 0(a1)
  2969. + sd a3, 8(a1)
  2970. +
  2971. + # Call SYS_clone
  2972. + mv a0, a2
  2973. + mv a2, a4
  2974. + mv a3, a5
  2975. + mv a4, a6
  2976. + li a7, 220 # SYS_clone
  2977. + scall
  2978. +
  2979. + beqz a0, 1f
  2980. + # Parent
  2981. + ret
  2982. +
  2983. + # Child
  2984. +1: ld a1, 0(sp)
  2985. + ld a0, 8(sp)
  2986. + jalr a1
  2987. +
  2988. + # Exit
  2989. + li a7, 93 # SYS_exit
  2990. + scall
  2991. --- /dev/null
  2992. +++ b/src/thread/riscv64/syscall_cp.s
  2993. @@ -0,0 +1,29 @@
  2994. +.global __cp_begin
  2995. +.hidden __cp_begin
  2996. +.global __cp_end
  2997. +.hidden __cp_end
  2998. +.global __cp_cancel
  2999. +.hidden __cp_cancel
  3000. +.hidden __cancel
  3001. +.global __syscall_cp_asm
  3002. +.hidden __syscall_cp_asm
  3003. +.type __syscall_cp_asm, %function
  3004. +__syscall_cp_asm:
  3005. +__cp_begin:
  3006. + ld t0, 0(a0)
  3007. + bnez t0, __cp_cancel
  3008. +
  3009. + mv t0, a1
  3010. + mv a0, a2
  3011. + mv a1, a3
  3012. + mv a2, a4
  3013. + mv a3, a5
  3014. + mv a4, a6
  3015. + mv a5, a7
  3016. + ld a6, 0(sp)
  3017. + mv a7, t0
  3018. + scall
  3019. +__cp_cancel:
  3020. + ret
  3021. +__cp_end:
  3022. + j __cancel