usertests.asm 247 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126
  1. _usertests: file format elf32-littlearm
  2. Disassembly of section .text:
  3. 00000000 <main>:
  4. return randstate;
  5. }
  6. int
  7. main(int argc, char *argv[])
  8. {
  9. 0: e92d4800 push {fp, lr}
  10. printf(1, "usertests starting\n");
  11. 4: e3a00001 mov r0, #1
  12. return randstate;
  13. }
  14. int
  15. main(int argc, char *argv[])
  16. {
  17. 8: e28db004 add fp, sp, #4
  18. printf(1, "usertests starting\n");
  19. c: e59f10b0 ldr r1, [pc, #176] ; c4 <main+0xc4>
  20. 10: eb000dcb bl 3744 <printf>
  21. if(open("usertests.ran", 0) >= 0){
  22. 14: e59f00ac ldr r0, [pc, #172] ; c8 <main+0xc8>
  23. 18: e3a01000 mov r1, #0
  24. 1c: eb000cdd bl 3398 <open>
  25. 20: e3500000 cmp r0, #0
  26. 24: ba000003 blt 38 <main+0x38>
  27. printf(1, "already ran user tests -- rebuild fs.img\n");
  28. 28: e3a00001 mov r0, #1
  29. 2c: e59f1098 ldr r1, [pc, #152] ; cc <main+0xcc>
  30. 30: eb000dc3 bl 3744 <printf>
  31. exit();
  32. 34: eb000c6f bl 31f8 <exit>
  33. }
  34. close(open("usertests.ran", O_CREATE));
  35. 38: e3a01c02 mov r1, #512 ; 0x200
  36. 3c: e59f0084 ldr r0, [pc, #132] ; c8 <main+0xc8>
  37. 40: eb000cd4 bl 3398 <open>
  38. 44: eb000cac bl 32fc <close>
  39. bigargtest();
  40. 48: eb000af2 bl 2c18 <bigargtest>
  41. bigwrite();
  42. 4c: eb000798 bl 1eb4 <bigwrite>
  43. bigargtest();
  44. 50: eb000af0 bl 2c18 <bigargtest>
  45. bsstest();
  46. 54: eb000ad1 bl 2ba0 <bsstest>
  47. sbrktest();
  48. 58: eb0009b2 bl 2728 <sbrktest>
  49. validatetest();
  50. 5c: eb000aa6 bl 2afc <validatetest>
  51. opentest();
  52. 60: eb00001a bl d0 <opentest>
  53. writetest();
  54. 64: eb00003c bl 15c <writetest>
  55. writetest1();
  56. 68: eb0000a5 bl 304 <writetest1>
  57. createtest();
  58. 6c: eb000108 bl 494 <createtest>
  59. mem();
  60. 70: eb000246 bl 990 <mem>
  61. pipe1();
  62. 74: eb000175 bl 650 <pipe1>
  63. preempt();
  64. 78: eb0001db bl 7ec <preempt>
  65. exitwait();
  66. 7c: eb000226 bl 91c <exitwait>
  67. rmdot();
  68. 80: eb000878 bl 2268 <rmdot>
  69. fourteen();
  70. 84: eb00082d bl 2140 <fourteen>
  71. bigfile();
  72. 88: eb0007c2 bl 1f98 <bigfile>
  73. subdir();
  74. 8c: eb000604 bl 18a4 <subdir>
  75. concreate();
  76. 90: eb0004b2 bl 1360 <concreate>
  77. linkunlink();
  78. 94: eb00057a bl 1684 <linkunlink>
  79. linktest();
  80. 98: eb00043a bl 1188 <linktest>
  81. unlinkread();
  82. 9c: eb0003db bl 1010 <unlinkread>
  83. createdelete();
  84. a0: eb000347 bl dc4 <createdelete>
  85. twofiles();
  86. a4: eb0002cf bl be8 <twofiles>
  87. sharedfd();
  88. a8: eb000267 bl a4c <sharedfd>
  89. dirfile();
  90. ac: eb0008c5 bl 23c8 <dirfile>
  91. iref();
  92. b0: eb000936 bl 2590 <iref>
  93. forktest();
  94. b4: eb00096f bl 2678 <forktest>
  95. bigdir(); // slow
  96. b8: eb0005ad bl 1774 <bigdir>
  97. exectest();
  98. bc: eb000150 bl 604 <exectest>
  99. exit();
  100. c0: eb000c4c bl 31f8 <exit>
  101. c4: 000051c4 .word 0x000051c4
  102. c8: 000051d8 .word 0x000051d8
  103. cc: 000051e8 .word 0x000051e8
  104. 000000d0 <opentest>:
  105. // simple file system tests
  106. void
  107. opentest(void)
  108. {
  109. d0: e92d4818 push {r3, r4, fp, lr}
  110. d4: e28db00c add fp, sp, #12
  111. int fd;
  112. printf(stdout, "open test\n");
  113. d8: e59f4060 ldr r4, [pc, #96] ; 140 <opentest+0x70>
  114. dc: e59f1060 ldr r1, [pc, #96] ; 144 <opentest+0x74>
  115. e0: e5940000 ldr r0, [r4]
  116. e4: eb000d96 bl 3744 <printf>
  117. fd = open("echo", 0);
  118. e8: e59f0058 ldr r0, [pc, #88] ; 148 <opentest+0x78>
  119. ec: e3a01000 mov r1, #0
  120. f0: eb000ca8 bl 3398 <open>
  121. if(fd < 0){
  122. f4: e3500000 cmp r0, #0
  123. f8: ba000009 blt 124 <opentest+0x54>
  124. printf(stdout, "open echo failed!\n");
  125. exit();
  126. }
  127. close(fd);
  128. fc: eb000c7e bl 32fc <close>
  129. fd = open("doesnotexist", 0);
  130. 100: e59f0044 ldr r0, [pc, #68] ; 14c <opentest+0x7c>
  131. 104: e3a01000 mov r1, #0
  132. 108: eb000ca2 bl 3398 <open>
  133. if(fd >= 0){
  134. 10c: e3500000 cmp r0, #0
  135. printf(stdout, "open doesnotexist succeeded!\n");
  136. 110: e5940000 ldr r0, [r4]
  137. printf(stdout, "open echo failed!\n");
  138. exit();
  139. }
  140. close(fd);
  141. fd = open("doesnotexist", 0);
  142. if(fd >= 0){
  143. 114: aa000006 bge 134 <opentest+0x64>
  144. printf(stdout, "open doesnotexist succeeded!\n");
  145. exit();
  146. }
  147. printf(stdout, "open test ok\n");
  148. 118: e59f1030 ldr r1, [pc, #48] ; 150 <opentest+0x80>
  149. }
  150. 11c: e8bd4818 pop {r3, r4, fp, lr}
  151. fd = open("doesnotexist", 0);
  152. if(fd >= 0){
  153. printf(stdout, "open doesnotexist succeeded!\n");
  154. exit();
  155. }
  156. printf(stdout, "open test ok\n");
  157. 120: ea000d87 b 3744 <printf>
  158. int fd;
  159. printf(stdout, "open test\n");
  160. fd = open("echo", 0);
  161. if(fd < 0){
  162. printf(stdout, "open echo failed!\n");
  163. 124: e5940000 ldr r0, [r4]
  164. 128: e59f1024 ldr r1, [pc, #36] ; 154 <opentest+0x84>
  165. 12c: eb000d84 bl 3744 <printf>
  166. exit();
  167. 130: eb000c30 bl 31f8 <exit>
  168. }
  169. close(fd);
  170. fd = open("doesnotexist", 0);
  171. if(fd >= 0){
  172. printf(stdout, "open doesnotexist succeeded!\n");
  173. 134: e59f101c ldr r1, [pc, #28] ; 158 <opentest+0x88>
  174. 138: eb000d81 bl 3744 <printf>
  175. exit();
  176. 13c: eb000c2d bl 31f8 <exit>
  177. 140: 00005244 .word 0x00005244
  178. 144: 00003a2c .word 0x00003a2c
  179. 148: 00003a38 .word 0x00003a38
  180. 14c: 00003a54 .word 0x00003a54
  181. 150: 00003a84 .word 0x00003a84
  182. 154: 00003a40 .word 0x00003a40
  183. 158: 00003a64 .word 0x00003a64
  184. 0000015c <writetest>:
  185. printf(stdout, "open test ok\n");
  186. }
  187. void
  188. writetest(void)
  189. {
  190. 15c: e92d4878 push {r3, r4, r5, r6, fp, lr}
  191. 160: e28db014 add fp, sp, #20
  192. int fd;
  193. int i;
  194. printf(stdout, "small file test\n");
  195. 164: e59f6150 ldr r6, [pc, #336] ; 2bc <writetest+0x160>
  196. 168: e59f1150 ldr r1, [pc, #336] ; 2c0 <writetest+0x164>
  197. 16c: e5960000 ldr r0, [r6]
  198. 170: eb000d73 bl 3744 <printf>
  199. fd = open("small", O_CREATE|O_RDWR);
  200. 174: e59f0148 ldr r0, [pc, #328] ; 2c4 <writetest+0x168>
  201. 178: e59f1148 ldr r1, [pc, #328] ; 2c8 <writetest+0x16c>
  202. 17c: eb000c85 bl 3398 <open>
  203. if(fd >= 0){
  204. 180: e2505000 subs r5, r0, #0
  205. printf(stdout, "creat small succeeded; ok\n");
  206. 184: e5960000 ldr r0, [r6]
  207. int fd;
  208. int i;
  209. printf(stdout, "small file test\n");
  210. fd = open("small", O_CREATE|O_RDWR);
  211. if(fd >= 0){
  212. 188: ba000048 blt 2b0 <writetest+0x154>
  213. printf(stdout, "creat small succeeded; ok\n");
  214. 18c: e59f1138 ldr r1, [pc, #312] ; 2cc <writetest+0x170>
  215. 190: eb000d6b bl 3744 <printf>
  216. } else {
  217. printf(stdout, "error: creat small failed!\n");
  218. exit();
  219. }
  220. for(i = 0; i < 100; i++){
  221. 194: e3a04000 mov r4, #0
  222. if(write(fd, "aaaaaaaaaa", 10) != 10){
  223. 198: e3a0200a mov r2, #10
  224. 19c: e1a00005 mov r0, r5
  225. 1a0: e59f1128 ldr r1, [pc, #296] ; 2d0 <writetest+0x174>
  226. 1a4: eb000c47 bl 32c8 <write>
  227. 1a8: e350000a cmp r0, #10
  228. 1ac: e1a02000 mov r2, r0
  229. 1b0: 1a000028 bne 258 <writetest+0xfc>
  230. printf(stdout, "error: write aa %d new file failed\n", i);
  231. exit();
  232. }
  233. if(write(fd, "bbbbbbbbbb", 10) != 10){
  234. 1b4: e1a00005 mov r0, r5
  235. 1b8: e59f1114 ldr r1, [pc, #276] ; 2d4 <writetest+0x178>
  236. 1bc: eb000c41 bl 32c8 <write>
  237. 1c0: e350000a cmp r0, #10
  238. 1c4: 1a000028 bne 26c <writetest+0x110>
  239. printf(stdout, "creat small succeeded; ok\n");
  240. } else {
  241. printf(stdout, "error: creat small failed!\n");
  242. exit();
  243. }
  244. for(i = 0; i < 100; i++){
  245. 1c8: e2844001 add r4, r4, #1
  246. 1cc: e3540064 cmp r4, #100 ; 0x64
  247. 1d0: 1afffff0 bne 198 <writetest+0x3c>
  248. if(write(fd, "bbbbbbbbbb", 10) != 10){
  249. printf(stdout, "error: write bb %d new file failed\n", i);
  250. exit();
  251. }
  252. }
  253. printf(stdout, "writes ok\n");
  254. 1d4: e59f10fc ldr r1, [pc, #252] ; 2d8 <writetest+0x17c>
  255. 1d8: e5960000 ldr r0, [r6]
  256. 1dc: eb000d58 bl 3744 <printf>
  257. close(fd);
  258. 1e0: e1a00005 mov r0, r5
  259. 1e4: eb000c44 bl 32fc <close>
  260. fd = open("small", O_RDONLY);
  261. 1e8: e59f00d4 ldr r0, [pc, #212] ; 2c4 <writetest+0x168>
  262. 1ec: e3a01000 mov r1, #0
  263. 1f0: eb000c68 bl 3398 <open>
  264. if(write(fd, "bbbbbbbbbb", 10) != 10){
  265. printf(stdout, "error: write bb %d new file failed\n", i);
  266. exit();
  267. }
  268. }
  269. printf(stdout, "writes ok\n");
  270. 1f4: e59f40c0 ldr r4, [pc, #192] ; 2bc <writetest+0x160>
  271. close(fd);
  272. fd = open("small", O_RDONLY);
  273. if(fd >= 0){
  274. 1f8: e2505000 subs r5, r0, #0
  275. 1fc: ba00001f blt 280 <writetest+0x124>
  276. printf(stdout, "open small succeeded ok\n");
  277. 200: e59f10d4 ldr r1, [pc, #212] ; 2dc <writetest+0x180>
  278. 204: e5940000 ldr r0, [r4]
  279. 208: eb000d4d bl 3744 <printf>
  280. } else {
  281. printf(stdout, "error: open small failed!\n");
  282. exit();
  283. }
  284. i = read(fd, buf, 2000);
  285. 20c: e1a00005 mov r0, r5
  286. 210: e59f10c8 ldr r1, [pc, #200] ; 2e0 <writetest+0x184>
  287. 214: e3a02e7d mov r2, #2000 ; 0x7d0
  288. 218: eb000c1d bl 3294 <read>
  289. if(i == 2000){
  290. 21c: e3500e7d cmp r0, #2000 ; 0x7d0
  291. 220: 1a00001a bne 290 <writetest+0x134>
  292. printf(stdout, "read succeeded ok\n");
  293. 224: e59f10b8 ldr r1, [pc, #184] ; 2e4 <writetest+0x188>
  294. 228: e5940000 ldr r0, [r4]
  295. 22c: eb000d44 bl 3744 <printf>
  296. } else {
  297. printf(stdout, "read failed\n");
  298. exit();
  299. }
  300. close(fd);
  301. 230: e1a00005 mov r0, r5
  302. 234: eb000c30 bl 32fc <close>
  303. if(unlink("small") < 0){
  304. 238: e59f0084 ldr r0, [pc, #132] ; 2c4 <writetest+0x168>
  305. 23c: eb000c6f bl 3400 <unlink>
  306. 240: e3500000 cmp r0, #0
  307. 244: ba000015 blt 2a0 <writetest+0x144>
  308. printf(stdout, "unlink small failed\n");
  309. exit();
  310. }
  311. printf(stdout, "small file test ok\n");
  312. 248: e5940000 ldr r0, [r4]
  313. 24c: e59f1094 ldr r1, [pc, #148] ; 2e8 <writetest+0x18c>
  314. }
  315. 250: e8bd4878 pop {r3, r4, r5, r6, fp, lr}
  316. if(unlink("small") < 0){
  317. printf(stdout, "unlink small failed\n");
  318. exit();
  319. }
  320. printf(stdout, "small file test ok\n");
  321. 254: ea000d3a b 3744 <printf>
  322. printf(stdout, "error: creat small failed!\n");
  323. exit();
  324. }
  325. for(i = 0; i < 100; i++){
  326. if(write(fd, "aaaaaaaaaa", 10) != 10){
  327. printf(stdout, "error: write aa %d new file failed\n", i);
  328. 258: e5960000 ldr r0, [r6]
  329. 25c: e59f1088 ldr r1, [pc, #136] ; 2ec <writetest+0x190>
  330. 260: e1a02004 mov r2, r4
  331. 264: eb000d36 bl 3744 <printf>
  332. exit();
  333. 268: eb000be2 bl 31f8 <exit>
  334. }
  335. if(write(fd, "bbbbbbbbbb", 10) != 10){
  336. printf(stdout, "error: write bb %d new file failed\n", i);
  337. 26c: e5960000 ldr r0, [r6]
  338. 270: e59f1078 ldr r1, [pc, #120] ; 2f0 <writetest+0x194>
  339. 274: e1a02004 mov r2, r4
  340. 278: eb000d31 bl 3744 <printf>
  341. exit();
  342. 27c: eb000bdd bl 31f8 <exit>
  343. close(fd);
  344. fd = open("small", O_RDONLY);
  345. if(fd >= 0){
  346. printf(stdout, "open small succeeded ok\n");
  347. } else {
  348. printf(stdout, "error: open small failed!\n");
  349. 280: e5940000 ldr r0, [r4]
  350. 284: e59f1068 ldr r1, [pc, #104] ; 2f4 <writetest+0x198>
  351. 288: eb000d2d bl 3744 <printf>
  352. exit();
  353. 28c: eb000bd9 bl 31f8 <exit>
  354. }
  355. i = read(fd, buf, 2000);
  356. if(i == 2000){
  357. printf(stdout, "read succeeded ok\n");
  358. } else {
  359. printf(stdout, "read failed\n");
  360. 290: e5940000 ldr r0, [r4]
  361. 294: e59f105c ldr r1, [pc, #92] ; 2f8 <writetest+0x19c>
  362. 298: eb000d29 bl 3744 <printf>
  363. exit();
  364. 29c: eb000bd5 bl 31f8 <exit>
  365. }
  366. close(fd);
  367. if(unlink("small") < 0){
  368. printf(stdout, "unlink small failed\n");
  369. 2a0: e5940000 ldr r0, [r4]
  370. 2a4: e59f1050 ldr r1, [pc, #80] ; 2fc <writetest+0x1a0>
  371. 2a8: eb000d25 bl 3744 <printf>
  372. exit();
  373. 2ac: eb000bd1 bl 31f8 <exit>
  374. printf(stdout, "small file test\n");
  375. fd = open("small", O_CREATE|O_RDWR);
  376. if(fd >= 0){
  377. printf(stdout, "creat small succeeded; ok\n");
  378. } else {
  379. printf(stdout, "error: creat small failed!\n");
  380. 2b0: e59f1048 ldr r1, [pc, #72] ; 300 <writetest+0x1a4>
  381. 2b4: eb000d22 bl 3744 <printf>
  382. exit();
  383. 2b8: eb000bce bl 31f8 <exit>
  384. 2bc: 00005244 .word 0x00005244
  385. 2c0: 00003a94 .word 0x00003a94
  386. 2c4: 00003aa8 .word 0x00003aa8
  387. 2c8: 00000202 .word 0x00000202
  388. 2cc: 00003ab0 .word 0x00003ab0
  389. 2d0: 00003ae8 .word 0x00003ae8
  390. 2d4: 00003b18 .word 0x00003b18
  391. 2d8: 00003b48 .word 0x00003b48
  392. 2dc: 00003b54 .word 0x00003b54
  393. 2e0: 000079fc .word 0x000079fc
  394. 2e4: 00003b8c .word 0x00003b8c
  395. 2e8: 00003bc8 .word 0x00003bc8
  396. 2ec: 00003af4 .word 0x00003af4
  397. 2f0: 00003b24 .word 0x00003b24
  398. 2f4: 00003b70 .word 0x00003b70
  399. 2f8: 00003ba0 .word 0x00003ba0
  400. 2fc: 00003bb0 .word 0x00003bb0
  401. 300: 00003acc .word 0x00003acc
  402. 00000304 <writetest1>:
  403. printf(stdout, "small file test ok\n");
  404. }
  405. void
  406. writetest1(void)
  407. {
  408. 304: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  409. 308: e28db014 add fp, sp, #20
  410. int i, fd, n;
  411. printf(stdout, "big files test\n");
  412. 30c: e59f714c ldr r7, [pc, #332] ; 460 <writetest1+0x15c>
  413. 310: e59f114c ldr r1, [pc, #332] ; 464 <writetest1+0x160>
  414. 314: e5970000 ldr r0, [r7]
  415. 318: eb000d09 bl 3744 <printf>
  416. fd = open("big", O_CREATE|O_RDWR);
  417. 31c: e59f0144 ldr r0, [pc, #324] ; 468 <writetest1+0x164>
  418. 320: e59f1144 ldr r1, [pc, #324] ; 46c <writetest1+0x168>
  419. 324: eb000c1b bl 3398 <open>
  420. if(fd < 0){
  421. 328: e2505000 subs r5, r0, #0
  422. 32c: ba000044 blt 444 <writetest1+0x140>
  423. 330: e59f6138 ldr r6, [pc, #312] ; 470 <writetest1+0x16c>
  424. 334: e3a04000 mov r4, #0
  425. exit();
  426. }
  427. for(i = 0; i < MAXFILE; i++){
  428. ((int*)buf)[0] = i;
  429. if(write(fd, buf, 512) != 512){
  430. 338: e1a00005 mov r0, r5
  431. 33c: e59f112c ldr r1, [pc, #300] ; 470 <writetest1+0x16c>
  432. 340: e3a02c02 mov r2, #512 ; 0x200
  433. printf(stdout, "error: creat big failed!\n");
  434. exit();
  435. }
  436. for(i = 0; i < MAXFILE; i++){
  437. ((int*)buf)[0] = i;
  438. 344: e5864000 str r4, [r6]
  439. if(write(fd, buf, 512) != 512){
  440. 348: eb000bde bl 32c8 <write>
  441. 34c: e3500c02 cmp r0, #512 ; 0x200
  442. 350: 1a000024 bne 3e8 <writetest1+0xe4>
  443. if(fd < 0){
  444. printf(stdout, "error: creat big failed!\n");
  445. exit();
  446. }
  447. for(i = 0; i < MAXFILE; i++){
  448. 354: e2844001 add r4, r4, #1
  449. 358: e354008c cmp r4, #140 ; 0x8c
  450. 35c: 1afffff5 bne 338 <writetest1+0x34>
  451. printf(stdout, "error: write big file failed\n", i);
  452. exit();
  453. }
  454. }
  455. close(fd);
  456. 360: e1a00005 mov r0, r5
  457. 364: eb000be4 bl 32fc <close>
  458. fd = open("big", O_RDONLY);
  459. 368: e59f00f8 ldr r0, [pc, #248] ; 468 <writetest1+0x164>
  460. 36c: e3a01000 mov r1, #0
  461. 370: eb000c08 bl 3398 <open>
  462. if(fd < 0){
  463. 374: e2505000 subs r5, r0, #0
  464. 378: ba00002d blt 434 <writetest1+0x130>
  465. exit();
  466. }
  467. n = 0;
  468. for(;;){
  469. i = read(fd, buf, 512);
  470. 37c: e59f60ec ldr r6, [pc, #236] ; 470 <writetest1+0x16c>
  471. }
  472. close(fd);
  473. fd = open("big", O_RDONLY);
  474. if(fd < 0){
  475. 380: e3a04000 mov r4, #0
  476. 384: ea000005 b 3a0 <writetest1+0x9c>
  477. if(n == MAXFILE - 1){
  478. printf(stdout, "read only %d blocks from big", n);
  479. exit();
  480. }
  481. break;
  482. } else if(i != 512){
  483. 388: e3520c02 cmp r2, #512 ; 0x200
  484. 38c: 1a00001f bne 410 <writetest1+0x10c>
  485. printf(stdout, "read failed %d\n", i);
  486. exit();
  487. }
  488. if(((int*)buf)[0] != n){
  489. 390: e5963000 ldr r3, [r6]
  490. 394: e1530004 cmp r3, r4
  491. 398: 1a000017 bne 3fc <writetest1+0xf8>
  492. printf(stdout, "read content of block %d is %d\n",
  493. n, ((int*)buf)[0]);
  494. exit();
  495. }
  496. n++;
  497. 39c: e2844001 add r4, r4, #1
  498. exit();
  499. }
  500. n = 0;
  501. for(;;){
  502. i = read(fd, buf, 512);
  503. 3a0: e3a02c02 mov r2, #512 ; 0x200
  504. 3a4: e1a00005 mov r0, r5
  505. 3a8: e59f10c0 ldr r1, [pc, #192] ; 470 <writetest1+0x16c>
  506. 3ac: eb000bb8 bl 3294 <read>
  507. if(i == 0){
  508. 3b0: e2502000 subs r2, r0, #0
  509. 3b4: 1afffff3 bne 388 <writetest1+0x84>
  510. if(n == MAXFILE - 1){
  511. 3b8: e354008b cmp r4, #139 ; 0x8b
  512. 3bc: 0a000017 beq 420 <writetest1+0x11c>
  513. n, ((int*)buf)[0]);
  514. exit();
  515. }
  516. n++;
  517. }
  518. close(fd);
  519. 3c0: e1a00005 mov r0, r5
  520. 3c4: eb000bcc bl 32fc <close>
  521. if(unlink("big") < 0){
  522. 3c8: e59f0098 ldr r0, [pc, #152] ; 468 <writetest1+0x164>
  523. 3cc: eb000c0b bl 3400 <unlink>
  524. 3d0: e3500000 cmp r0, #0
  525. printf(stdout, "unlink big failed\n");
  526. 3d4: e5970000 ldr r0, [r7]
  527. exit();
  528. }
  529. n++;
  530. }
  531. close(fd);
  532. if(unlink("big") < 0){
  533. 3d8: ba00001d blt 454 <writetest1+0x150>
  534. printf(stdout, "unlink big failed\n");
  535. exit();
  536. }
  537. printf(stdout, "big files ok\n");
  538. 3dc: e59f1090 ldr r1, [pc, #144] ; 474 <writetest1+0x170>
  539. }
  540. 3e0: e8bd48f0 pop {r4, r5, r6, r7, fp, lr}
  541. close(fd);
  542. if(unlink("big") < 0){
  543. printf(stdout, "unlink big failed\n");
  544. exit();
  545. }
  546. printf(stdout, "big files ok\n");
  547. 3e4: ea000cd6 b 3744 <printf>
  548. }
  549. for(i = 0; i < MAXFILE; i++){
  550. ((int*)buf)[0] = i;
  551. if(write(fd, buf, 512) != 512){
  552. printf(stdout, "error: write big file failed\n", i);
  553. 3e8: e5970000 ldr r0, [r7]
  554. 3ec: e59f1084 ldr r1, [pc, #132] ; 478 <writetest1+0x174>
  555. 3f0: e1a02004 mov r2, r4
  556. 3f4: eb000cd2 bl 3744 <printf>
  557. exit();
  558. 3f8: eb000b7e bl 31f8 <exit>
  559. } else if(i != 512){
  560. printf(stdout, "read failed %d\n", i);
  561. exit();
  562. }
  563. if(((int*)buf)[0] != n){
  564. printf(stdout, "read content of block %d is %d\n",
  565. 3fc: e5970000 ldr r0, [r7]
  566. 400: e59f1074 ldr r1, [pc, #116] ; 47c <writetest1+0x178>
  567. 404: e1a02004 mov r2, r4
  568. 408: eb000ccd bl 3744 <printf>
  569. n, ((int*)buf)[0]);
  570. exit();
  571. 40c: eb000b79 bl 31f8 <exit>
  572. printf(stdout, "read only %d blocks from big", n);
  573. exit();
  574. }
  575. break;
  576. } else if(i != 512){
  577. printf(stdout, "read failed %d\n", i);
  578. 410: e5970000 ldr r0, [r7]
  579. 414: e59f1064 ldr r1, [pc, #100] ; 480 <writetest1+0x17c>
  580. 418: eb000cc9 bl 3744 <printf>
  581. exit();
  582. 41c: eb000b75 bl 31f8 <exit>
  583. n = 0;
  584. for(;;){
  585. i = read(fd, buf, 512);
  586. if(i == 0){
  587. if(n == MAXFILE - 1){
  588. printf(stdout, "read only %d blocks from big", n);
  589. 420: e5970000 ldr r0, [r7]
  590. 424: e59f1058 ldr r1, [pc, #88] ; 484 <writetest1+0x180>
  591. 428: e1a02004 mov r2, r4
  592. 42c: eb000cc4 bl 3744 <printf>
  593. exit();
  594. 430: eb000b70 bl 31f8 <exit>
  595. close(fd);
  596. fd = open("big", O_RDONLY);
  597. if(fd < 0){
  598. printf(stdout, "error: open big failed!\n");
  599. 434: e5970000 ldr r0, [r7]
  600. 438: e59f1048 ldr r1, [pc, #72] ; 488 <writetest1+0x184>
  601. 43c: eb000cc0 bl 3744 <printf>
  602. exit();
  603. 440: eb000b6c bl 31f8 <exit>
  604. printf(stdout, "big files test\n");
  605. fd = open("big", O_CREATE|O_RDWR);
  606. if(fd < 0){
  607. printf(stdout, "error: creat big failed!\n");
  608. 444: e5970000 ldr r0, [r7]
  609. 448: e59f103c ldr r1, [pc, #60] ; 48c <writetest1+0x188>
  610. 44c: eb000cbc bl 3744 <printf>
  611. exit();
  612. 450: eb000b68 bl 31f8 <exit>
  613. }
  614. n++;
  615. }
  616. close(fd);
  617. if(unlink("big") < 0){
  618. printf(stdout, "unlink big failed\n");
  619. 454: e59f1034 ldr r1, [pc, #52] ; 490 <writetest1+0x18c>
  620. 458: eb000cb9 bl 3744 <printf>
  621. exit();
  622. 45c: eb000b65 bl 31f8 <exit>
  623. 460: 00005244 .word 0x00005244
  624. 464: 00003bdc .word 0x00003bdc
  625. 468: 00003bec .word 0x00003bec
  626. 46c: 00000202 .word 0x00000202
  627. 470: 000079fc .word 0x000079fc
  628. 474: 00003cac .word 0x00003cac
  629. 478: 00003c0c .word 0x00003c0c
  630. 47c: 00003c78 .word 0x00003c78
  631. 480: 00003c68 .word 0x00003c68
  632. 484: 00003c48 .word 0x00003c48
  633. 488: 00003c2c .word 0x00003c2c
  634. 48c: 00003bf0 .word 0x00003bf0
  635. 490: 00003c98 .word 0x00003c98
  636. 00000494 <createtest>:
  637. printf(stdout, "big files ok\n");
  638. }
  639. void
  640. createtest(void)
  641. {
  642. 494: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  643. 498: e28db014 add fp, sp, #20
  644. int i, fd;
  645. printf(stdout, "many creates, followed by unlink test\n");
  646. 49c: e59f7088 ldr r7, [pc, #136] ; 52c <createtest+0x98>
  647. name[0] = 'a';
  648. 4a0: e59f5088 ldr r5, [pc, #136] ; 530 <createtest+0x9c>
  649. void
  650. createtest(void)
  651. {
  652. int i, fd;
  653. printf(stdout, "many creates, followed by unlink test\n");
  654. 4a4: e59f1088 ldr r1, [pc, #136] ; 534 <createtest+0xa0>
  655. 4a8: e5970000 ldr r0, [r7]
  656. 4ac: eb000ca4 bl 3744 <printf>
  657. name[0] = 'a';
  658. name[2] = '\0';
  659. 4b0: e3a04030 mov r4, #48 ; 0x30
  660. {
  661. int i, fd;
  662. printf(stdout, "many creates, followed by unlink test\n");
  663. name[0] = 'a';
  664. 4b4: e3a03061 mov r3, #97 ; 0x61
  665. 4b8: e5c53000 strb r3, [r5]
  666. name[2] = '\0';
  667. 4bc: e3a03000 mov r3, #0
  668. 4c0: e5c53002 strb r3, [r5, #2]
  669. for(i = 0; i < 52; i++){
  670. name[1] = '0' + i;
  671. 4c4: e59f6064 ldr r6, [pc, #100] ; 530 <createtest+0x9c>
  672. 4c8: e5c54001 strb r4, [r5, #1]
  673. fd = open(name, O_CREATE|O_RDWR);
  674. close(fd);
  675. 4cc: e2844001 add r4, r4, #1
  676. name[0] = 'a';
  677. name[2] = '\0';
  678. for(i = 0; i < 52; i++){
  679. name[1] = '0' + i;
  680. fd = open(name, O_CREATE|O_RDWR);
  681. 4d0: e59f1060 ldr r1, [pc, #96] ; 538 <createtest+0xa4>
  682. 4d4: e1a00006 mov r0, r6
  683. 4d8: eb000bae bl 3398 <open>
  684. close(fd);
  685. 4dc: e6ef4074 uxtb r4, r4
  686. 4e0: eb000b85 bl 32fc <close>
  687. printf(stdout, "many creates, followed by unlink test\n");
  688. name[0] = 'a';
  689. name[2] = '\0';
  690. for(i = 0; i < 52; i++){
  691. 4e4: e3540064 cmp r4, #100 ; 0x64
  692. 4e8: 1afffff5 bne 4c4 <createtest+0x30>
  693. name[1] = '0' + i;
  694. fd = open(name, O_CREATE|O_RDWR);
  695. close(fd);
  696. }
  697. name[0] = 'a';
  698. 4ec: e3a03061 mov r3, #97 ; 0x61
  699. name[2] = '\0';
  700. 4f0: e3a04030 mov r4, #48 ; 0x30
  701. for(i = 0; i < 52; i++){
  702. name[1] = '0' + i;
  703. fd = open(name, O_CREATE|O_RDWR);
  704. close(fd);
  705. }
  706. name[0] = 'a';
  707. 4f4: e5c63000 strb r3, [r6]
  708. name[2] = '\0';
  709. 4f8: e3a03000 mov r3, #0
  710. 4fc: e5c63002 strb r3, [r6, #2]
  711. for(i = 0; i < 52; i++){
  712. name[1] = '0' + i;
  713. 500: e5c54001 strb r4, [r5, #1]
  714. unlink(name);
  715. 504: e2844001 add r4, r4, #1
  716. 508: e59f0020 ldr r0, [pc, #32] ; 530 <createtest+0x9c>
  717. 50c: e6ef4074 uxtb r4, r4
  718. 510: eb000bba bl 3400 <unlink>
  719. fd = open(name, O_CREATE|O_RDWR);
  720. close(fd);
  721. }
  722. name[0] = 'a';
  723. name[2] = '\0';
  724. for(i = 0; i < 52; i++){
  725. 514: e3540064 cmp r4, #100 ; 0x64
  726. 518: 1afffff8 bne 500 <createtest+0x6c>
  727. name[1] = '0' + i;
  728. unlink(name);
  729. }
  730. printf(stdout, "many creates, followed by unlink; ok\n");
  731. 51c: e5970000 ldr r0, [r7]
  732. 520: e59f1014 ldr r1, [pc, #20] ; 53c <createtest+0xa8>
  733. }
  734. 524: e8bd48f0 pop {r4, r5, r6, r7, fp, lr}
  735. name[2] = '\0';
  736. for(i = 0; i < 52; i++){
  737. name[1] = '0' + i;
  738. unlink(name);
  739. }
  740. printf(stdout, "many creates, followed by unlink; ok\n");
  741. 528: ea000c85 b 3744 <printf>
  742. 52c: 00005244 .word 0x00005244
  743. 530: 000099fc .word 0x000099fc
  744. 534: 00003cbc .word 0x00003cbc
  745. 538: 00000202 .word 0x00000202
  746. 53c: 00003ce4 .word 0x00003ce4
  747. 00000540 <dirtest>:
  748. }
  749. void dirtest(void)
  750. {
  751. 540: e92d4818 push {r3, r4, fp, lr}
  752. 544: e28db00c add fp, sp, #12
  753. printf(stdout, "mkdir test\n");
  754. 548: e59f4094 ldr r4, [pc, #148] ; 5e4 <dirtest+0xa4>
  755. 54c: e59f1094 ldr r1, [pc, #148] ; 5e8 <dirtest+0xa8>
  756. 550: e5940000 ldr r0, [r4]
  757. 554: eb000c7a bl 3744 <printf>
  758. if(mkdir("dir0") < 0){
  759. 558: e59f008c ldr r0, [pc, #140] ; 5ec <dirtest+0xac>
  760. 55c: eb000bce bl 349c <mkdir>
  761. 560: e3500000 cmp r0, #0
  762. 564: ba00000f blt 5a8 <dirtest+0x68>
  763. printf(stdout, "mkdir failed\n");
  764. exit();
  765. }
  766. if(chdir("dir0") < 0){
  767. 568: e59f007c ldr r0, [pc, #124] ; 5ec <dirtest+0xac>
  768. 56c: eb000bd7 bl 34d0 <chdir>
  769. 570: e3500000 cmp r0, #0
  770. 574: ba000016 blt 5d4 <dirtest+0x94>
  771. printf(stdout, "chdir dir0 failed\n");
  772. exit();
  773. }
  774. if(chdir("..") < 0){
  775. 578: e59f0070 ldr r0, [pc, #112] ; 5f0 <dirtest+0xb0>
  776. 57c: eb000bd3 bl 34d0 <chdir>
  777. 580: e3500000 cmp r0, #0
  778. 584: ba00000e blt 5c4 <dirtest+0x84>
  779. printf(stdout, "chdir .. failed\n");
  780. exit();
  781. }
  782. if(unlink("dir0") < 0){
  783. 588: e59f005c ldr r0, [pc, #92] ; 5ec <dirtest+0xac>
  784. 58c: eb000b9b bl 3400 <unlink>
  785. 590: e3500000 cmp r0, #0
  786. printf(stdout, "unlink dir0 failed\n");
  787. 594: e5940000 ldr r0, [r4]
  788. if(chdir("..") < 0){
  789. printf(stdout, "chdir .. failed\n");
  790. exit();
  791. }
  792. if(unlink("dir0") < 0){
  793. 598: ba000006 blt 5b8 <dirtest+0x78>
  794. printf(stdout, "unlink dir0 failed\n");
  795. exit();
  796. }
  797. printf(stdout, "mkdir test\n");
  798. 59c: e59f1044 ldr r1, [pc, #68] ; 5e8 <dirtest+0xa8>
  799. }
  800. 5a0: e8bd4818 pop {r3, r4, fp, lr}
  801. if(unlink("dir0") < 0){
  802. printf(stdout, "unlink dir0 failed\n");
  803. exit();
  804. }
  805. printf(stdout, "mkdir test\n");
  806. 5a4: ea000c66 b 3744 <printf>
  807. void dirtest(void)
  808. {
  809. printf(stdout, "mkdir test\n");
  810. if(mkdir("dir0") < 0){
  811. printf(stdout, "mkdir failed\n");
  812. 5a8: e5940000 ldr r0, [r4]
  813. 5ac: e59f1040 ldr r1, [pc, #64] ; 5f4 <dirtest+0xb4>
  814. 5b0: eb000c63 bl 3744 <printf>
  815. exit();
  816. 5b4: eb000b0f bl 31f8 <exit>
  817. printf(stdout, "chdir .. failed\n");
  818. exit();
  819. }
  820. if(unlink("dir0") < 0){
  821. printf(stdout, "unlink dir0 failed\n");
  822. 5b8: e59f1038 ldr r1, [pc, #56] ; 5f8 <dirtest+0xb8>
  823. 5bc: eb000c60 bl 3744 <printf>
  824. exit();
  825. 5c0: eb000b0c bl 31f8 <exit>
  826. printf(stdout, "chdir dir0 failed\n");
  827. exit();
  828. }
  829. if(chdir("..") < 0){
  830. printf(stdout, "chdir .. failed\n");
  831. 5c4: e5940000 ldr r0, [r4]
  832. 5c8: e59f102c ldr r1, [pc, #44] ; 5fc <dirtest+0xbc>
  833. 5cc: eb000c5c bl 3744 <printf>
  834. exit();
  835. 5d0: eb000b08 bl 31f8 <exit>
  836. printf(stdout, "mkdir failed\n");
  837. exit();
  838. }
  839. if(chdir("dir0") < 0){
  840. printf(stdout, "chdir dir0 failed\n");
  841. 5d4: e5940000 ldr r0, [r4]
  842. 5d8: e59f1020 ldr r1, [pc, #32] ; 600 <dirtest+0xc0>
  843. 5dc: eb000c58 bl 3744 <printf>
  844. exit();
  845. 5e0: eb000b04 bl 31f8 <exit>
  846. 5e4: 00005244 .word 0x00005244
  847. 5e8: 00003d0c .word 0x00003d0c
  848. 5ec: 00003d18 .word 0x00003d18
  849. 5f0: 00003d44 .word 0x00003d44
  850. 5f4: 00003d20 .word 0x00003d20
  851. 5f8: 00003d5c .word 0x00003d5c
  852. 5fc: 00003d48 .word 0x00003d48
  853. 600: 00003d30 .word 0x00003d30
  854. 00000604 <exectest>:
  855. printf(stdout, "mkdir test\n");
  856. }
  857. void
  858. exectest(void)
  859. {
  860. 604: e92d4818 push {r3, r4, fp, lr}
  861. 608: e28db00c add fp, sp, #12
  862. printf(stdout, "exec test\n");
  863. 60c: e59f402c ldr r4, [pc, #44] ; 640 <exectest+0x3c>
  864. 610: e59f102c ldr r1, [pc, #44] ; 644 <exectest+0x40>
  865. 614: e5940000 ldr r0, [r4]
  866. 618: eb000c49 bl 3744 <printf>
  867. if(exec("echo", echoargv) < 0){
  868. 61c: e59f0024 ldr r0, [pc, #36] ; 648 <exectest+0x44>
  869. 620: e2841004 add r1, r4, #4
  870. 624: eb000b4e bl 3364 <exec>
  871. 628: e3500000 cmp r0, #0
  872. 62c: a8bd8818 popge {r3, r4, fp, pc}
  873. printf(stdout, "exec echo failed\n");
  874. 630: e5940000 ldr r0, [r4]
  875. 634: e59f1010 ldr r1, [pc, #16] ; 64c <exectest+0x48>
  876. 638: eb000c41 bl 3744 <printf>
  877. exit();
  878. 63c: eb000aed bl 31f8 <exit>
  879. 640: 00005244 .word 0x00005244
  880. 644: 00003d70 .word 0x00003d70
  881. 648: 00003a38 .word 0x00003a38
  882. 64c: 00003d7c .word 0x00003d7c
  883. 00000650 <pipe1>:
  884. // simple fork and pipe read/write
  885. void
  886. pipe1(void)
  887. {
  888. 650: e92d49f0 push {r4, r5, r6, r7, r8, fp, lr}
  889. 654: e28db018 add fp, sp, #24
  890. 658: e24dd00c sub sp, sp, #12
  891. int fds[2], pid;
  892. int seq, i, n, cc, total;
  893. if(pipe(fds) != 0){
  894. 65c: e24b0024 sub r0, fp, #36 ; 0x24
  895. 660: eb000afe bl 3260 <pipe>
  896. 664: e2506000 subs r6, r0, #0
  897. 668: 1a000049 bne 794 <pipe1+0x144>
  898. printf(1, "pipe() failed\n");
  899. exit();
  900. }
  901. pid = fork();
  902. 66c: eb000ad4 bl 31c4 <fork>
  903. seq = 0;
  904. if(pid == 0){
  905. 670: e2504000 subs r4, r0, #0
  906. 674: 0a00001f beq 6f8 <pipe1+0xa8>
  907. printf(1, "pipe1 oops 1\n");
  908. exit();
  909. }
  910. }
  911. exit();
  912. } else if(pid > 0){
  913. 678: da000049 ble 7a4 <pipe1+0x154>
  914. close(fds[1]);
  915. 67c: e51b0020 ldr r0, [fp, #-32]
  916. 680: eb000b1d bl 32fc <close>
  917. total = 0;
  918. cc = 1;
  919. while((n = read(fds[0], buf, cc)) > 0){
  920. 684: e59f7138 ldr r7, [pc, #312] ; 7c4 <pipe1+0x174>
  921. }
  922. }
  923. total += n;
  924. cc = cc * 2;
  925. if(cc > sizeof(buf))
  926. cc = sizeof(buf);
  927. 688: e59f8138 ldr r8, [pc, #312] ; 7c8 <pipe1+0x178>
  928. }
  929. exit();
  930. } else if(pid > 0){
  931. close(fds[1]);
  932. total = 0;
  933. cc = 1;
  934. 68c: e3a05001 mov r5, #1
  935. if(pipe(fds) != 0){
  936. printf(1, "pipe() failed\n");
  937. exit();
  938. }
  939. pid = fork();
  940. seq = 0;
  941. 690: e1a04006 mov r4, r6
  942. exit();
  943. } else if(pid > 0){
  944. close(fds[1]);
  945. total = 0;
  946. cc = 1;
  947. while((n = read(fds[0], buf, cc)) > 0){
  948. 694: e51b0024 ldr r0, [fp, #-36] ; 0x24
  949. 698: e59f1124 ldr r1, [pc, #292] ; 7c4 <pipe1+0x174>
  950. 69c: e1a02005 mov r2, r5
  951. 6a0: eb000afb bl 3294 <read>
  952. 6a4: e3500000 cmp r0, #0
  953. 6a8: da00002a ble 758 <pipe1+0x108>
  954. }
  955. // simple fork and pipe read/write
  956. void
  957. pipe1(void)
  958. 6ac: e084c000 add ip, r4, r0
  959. 6b0: e0641007 rsb r1, r4, r7
  960. close(fds[1]);
  961. total = 0;
  962. cc = 1;
  963. while((n = read(fds[0], buf, cc)) > 0){
  964. for(i = 0; i < n; i++){
  965. if((buf[i] & 0xff) != (seq++ & 0xff)){
  966. 6b4: e7d12004 ldrb r2, [r1, r4]
  967. 6b8: e6ef3074 uxtb r3, r4
  968. 6bc: e1520003 cmp r2, r3
  969. 6c0: 1a000007 bne 6e4 <pipe1+0x94>
  970. 6c4: e2844001 add r4, r4, #1
  971. } else if(pid > 0){
  972. close(fds[1]);
  973. total = 0;
  974. cc = 1;
  975. while((n = read(fds[0], buf, cc)) > 0){
  976. for(i = 0; i < n; i++){
  977. 6c8: e154000c cmp r4, ip
  978. 6cc: 1afffff8 bne 6b4 <pipe1+0x64>
  979. printf(1, "pipe1 oops 2\n");
  980. return;
  981. }
  982. }
  983. total += n;
  984. cc = cc * 2;
  985. 6d0: e1a05085 lsl r5, r5, #1
  986. if(cc > sizeof(buf))
  987. cc = sizeof(buf);
  988. 6d4: e1550008 cmp r5, r8
  989. if((buf[i] & 0xff) != (seq++ & 0xff)){
  990. printf(1, "pipe1 oops 2\n");
  991. return;
  992. }
  993. }
  994. total += n;
  995. 6d8: e0866000 add r6, r6, r0
  996. cc = cc * 2;
  997. if(cc > sizeof(buf))
  998. cc = sizeof(buf);
  999. 6dc: 23a05a02 movcs r5, #8192 ; 0x2000
  1000. 6e0: eaffffeb b 694 <pipe1+0x44>
  1001. total = 0;
  1002. cc = 1;
  1003. while((n = read(fds[0], buf, cc)) > 0){
  1004. for(i = 0; i < n; i++){
  1005. if((buf[i] & 0xff) != (seq++ & 0xff)){
  1006. printf(1, "pipe1 oops 2\n");
  1007. 6e4: e3a00001 mov r0, #1
  1008. 6e8: e59f10dc ldr r1, [pc, #220] ; 7cc <pipe1+0x17c>
  1009. 6ec: eb000c14 bl 3744 <printf>
  1010. } else {
  1011. printf(1, "fork() failed\n");
  1012. exit();
  1013. }
  1014. printf(1, "pipe1 ok\n");
  1015. }
  1016. 6f0: e24bd018 sub sp, fp, #24
  1017. 6f4: e8bd89f0 pop {r4, r5, r6, r7, r8, fp, pc}
  1018. exit();
  1019. }
  1020. pid = fork();
  1021. seq = 0;
  1022. if(pid == 0){
  1023. close(fds[0]);
  1024. 6f8: e51b0024 ldr r0, [fp, #-36] ; 0x24
  1025. 6fc: e59f70c0 ldr r7, [pc, #192] ; 7c4 <pipe1+0x174>
  1026. for(n = 0; n < 5; n++){
  1027. for(i = 0; i < 1033; i++)
  1028. buf[i] = seq++;
  1029. if(write(fds[1], buf, 1033) != 1033){
  1030. 700: e59f60c8 ldr r6, [pc, #200] ; 7d0 <pipe1+0x180>
  1031. }
  1032. pid = fork();
  1033. seq = 0;
  1034. if(pid == 0){
  1035. close(fds[0]);
  1036. for(n = 0; n < 5; n++){
  1037. 704: e59f50c8 ldr r5, [pc, #200] ; 7d4 <pipe1+0x184>
  1038. exit();
  1039. }
  1040. pid = fork();
  1041. seq = 0;
  1042. if(pid == 0){
  1043. close(fds[0]);
  1044. 708: eb000afb bl 32fc <close>
  1045. if(pipe(fds) != 0){
  1046. printf(1, "pipe() failed\n");
  1047. exit();
  1048. }
  1049. pid = fork();
  1050. seq = 0;
  1051. 70c: e1a03004 mov r3, r4
  1052. }
  1053. // simple fork and pipe read/write
  1054. void
  1055. pipe1(void)
  1056. 710: e2832b01 add r2, r3, #1024 ; 0x400
  1057. 714: e1a04003 mov r4, r3
  1058. 718: e2822009 add r2, r2, #9
  1059. 71c: e0633007 rsb r3, r3, r7
  1060. seq = 0;
  1061. if(pid == 0){
  1062. close(fds[0]);
  1063. for(n = 0; n < 5; n++){
  1064. for(i = 0; i < 1033; i++)
  1065. buf[i] = seq++;
  1066. 720: e7c34004 strb r4, [r3, r4]
  1067. 724: e2844001 add r4, r4, #1
  1068. pid = fork();
  1069. seq = 0;
  1070. if(pid == 0){
  1071. close(fds[0]);
  1072. for(n = 0; n < 5; n++){
  1073. for(i = 0; i < 1033; i++)
  1074. 728: e1540002 cmp r4, r2
  1075. 72c: 1afffffb bne 720 <pipe1+0xd0>
  1076. buf[i] = seq++;
  1077. if(write(fds[1], buf, 1033) != 1033){
  1078. 730: e51b0020 ldr r0, [fp, #-32]
  1079. 734: e59f1088 ldr r1, [pc, #136] ; 7c4 <pipe1+0x174>
  1080. 738: e59f2090 ldr r2, [pc, #144] ; 7d0 <pipe1+0x180>
  1081. 73c: eb000ae1 bl 32c8 <write>
  1082. pid = fork();
  1083. seq = 0;
  1084. if(pid == 0){
  1085. close(fds[0]);
  1086. for(n = 0; n < 5; n++){
  1087. for(i = 0; i < 1033; i++)
  1088. 740: e1a03004 mov r3, r4
  1089. buf[i] = seq++;
  1090. if(write(fds[1], buf, 1033) != 1033){
  1091. 744: e1500006 cmp r0, r6
  1092. 748: 1a000019 bne 7b4 <pipe1+0x164>
  1093. }
  1094. pid = fork();
  1095. seq = 0;
  1096. if(pid == 0){
  1097. close(fds[0]);
  1098. for(n = 0; n < 5; n++){
  1099. 74c: e1540005 cmp r4, r5
  1100. 750: 1affffee bne 710 <pipe1+0xc0>
  1101. if(cc > sizeof(buf))
  1102. cc = sizeof(buf);
  1103. }
  1104. if(total != 5 * 1033){
  1105. printf(1, "pipe1 oops 3 total %d\n", total);
  1106. exit();
  1107. 754: eb000aa7 bl 31f8 <exit>
  1108. total += n;
  1109. cc = cc * 2;
  1110. if(cc > sizeof(buf))
  1111. cc = sizeof(buf);
  1112. }
  1113. if(total != 5 * 1033){
  1114. 758: e59f3074 ldr r3, [pc, #116] ; 7d4 <pipe1+0x184>
  1115. 75c: e1560003 cmp r6, r3
  1116. 760: 1a000006 bne 780 <pipe1+0x130>
  1117. printf(1, "pipe1 oops 3 total %d\n", total);
  1118. exit();
  1119. }
  1120. close(fds[0]);
  1121. 764: e51b0024 ldr r0, [fp, #-36] ; 0x24
  1122. 768: eb000ae3 bl 32fc <close>
  1123. wait();
  1124. 76c: eb000aae bl 322c <wait>
  1125. } else {
  1126. printf(1, "fork() failed\n");
  1127. exit();
  1128. }
  1129. printf(1, "pipe1 ok\n");
  1130. 770: e3a00001 mov r0, #1
  1131. 774: e59f105c ldr r1, [pc, #92] ; 7d8 <pipe1+0x188>
  1132. 778: eb000bf1 bl 3744 <printf>
  1133. 77c: eaffffdb b 6f0 <pipe1+0xa0>
  1134. cc = cc * 2;
  1135. if(cc > sizeof(buf))
  1136. cc = sizeof(buf);
  1137. }
  1138. if(total != 5 * 1033){
  1139. printf(1, "pipe1 oops 3 total %d\n", total);
  1140. 780: e3a00001 mov r0, #1
  1141. 784: e59f1050 ldr r1, [pc, #80] ; 7dc <pipe1+0x18c>
  1142. 788: e1a02006 mov r2, r6
  1143. 78c: eb000bec bl 3744 <printf>
  1144. exit();
  1145. 790: eb000a98 bl 31f8 <exit>
  1146. {
  1147. int fds[2], pid;
  1148. int seq, i, n, cc, total;
  1149. if(pipe(fds) != 0){
  1150. printf(1, "pipe() failed\n");
  1151. 794: e3a00001 mov r0, #1
  1152. 798: e59f1040 ldr r1, [pc, #64] ; 7e0 <pipe1+0x190>
  1153. 79c: eb000be8 bl 3744 <printf>
  1154. exit();
  1155. 7a0: eb000a94 bl 31f8 <exit>
  1156. exit();
  1157. }
  1158. close(fds[0]);
  1159. wait();
  1160. } else {
  1161. printf(1, "fork() failed\n");
  1162. 7a4: e3a00001 mov r0, #1
  1163. 7a8: e59f1034 ldr r1, [pc, #52] ; 7e4 <pipe1+0x194>
  1164. 7ac: eb000be4 bl 3744 <printf>
  1165. exit();
  1166. 7b0: eb000a90 bl 31f8 <exit>
  1167. close(fds[0]);
  1168. for(n = 0; n < 5; n++){
  1169. for(i = 0; i < 1033; i++)
  1170. buf[i] = seq++;
  1171. if(write(fds[1], buf, 1033) != 1033){
  1172. printf(1, "pipe1 oops 1\n");
  1173. 7b4: e3a00001 mov r0, #1
  1174. 7b8: e59f1028 ldr r1, [pc, #40] ; 7e8 <pipe1+0x198>
  1175. 7bc: eb000be0 bl 3744 <printf>
  1176. exit();
  1177. 7c0: eb000a8c bl 31f8 <exit>
  1178. 7c4: 000079fc .word 0x000079fc
  1179. 7c8: 00002001 .word 0x00002001
  1180. 7cc: 00003db0 .word 0x00003db0
  1181. 7d0: 00000409 .word 0x00000409
  1182. 7d4: 0000142d .word 0x0000142d
  1183. 7d8: 00003dd8 .word 0x00003dd8
  1184. 7dc: 00003dc0 .word 0x00003dc0
  1185. 7e0: 00003d90 .word 0x00003d90
  1186. 7e4: 00003de4 .word 0x00003de4
  1187. 7e8: 00003da0 .word 0x00003da0
  1188. 000007ec <preempt>:
  1189. }
  1190. // meant to be run w/ at most two CPUs
  1191. void
  1192. preempt(void)
  1193. {
  1194. 7ec: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  1195. 7f0: e28db014 add fp, sp, #20
  1196. 7f4: e24dd008 sub sp, sp, #8
  1197. int pid1, pid2, pid3;
  1198. int pfds[2];
  1199. printf(1, "preempt: ");
  1200. 7f8: e3a00001 mov r0, #1
  1201. 7fc: e59f10f8 ldr r1, [pc, #248] ; 8fc <preempt+0x110>
  1202. 800: eb000bcf bl 3744 <printf>
  1203. pid1 = fork();
  1204. 804: eb000a6e bl 31c4 <fork>
  1205. if(pid1 == 0)
  1206. 808: e2506000 subs r6, r0, #0
  1207. 80c: 1a000000 bne 814 <preempt+0x28>
  1208. 810: eafffffe b 810 <preempt+0x24>
  1209. for(;;)
  1210. ;
  1211. pid2 = fork();
  1212. 814: eb000a6a bl 31c4 <fork>
  1213. if(pid2 == 0)
  1214. 818: e2505000 subs r5, r0, #0
  1215. 81c: 1a000000 bne 824 <preempt+0x38>
  1216. 820: eafffffe b 820 <preempt+0x34>
  1217. for(;;)
  1218. ;
  1219. pipe(pfds);
  1220. 824: e24b001c sub r0, fp, #28
  1221. 828: eb000a8c bl 3260 <pipe>
  1222. pid3 = fork();
  1223. 82c: eb000a64 bl 31c4 <fork>
  1224. if(pid3 == 0){
  1225. 830: e2504000 subs r4, r0, #0
  1226. 834: 1a00000d bne 870 <preempt+0x84>
  1227. close(pfds[0]);
  1228. 838: e51b001c ldr r0, [fp, #-28]
  1229. 83c: eb000aae bl 32fc <close>
  1230. if(write(pfds[1], "x", 1) != 1)
  1231. 840: e51b0018 ldr r0, [fp, #-24]
  1232. 844: e59f10b4 ldr r1, [pc, #180] ; 900 <preempt+0x114>
  1233. 848: e3a02001 mov r2, #1
  1234. 84c: eb000a9d bl 32c8 <write>
  1235. 850: e3500001 cmp r0, #1
  1236. 854: 0a000002 beq 864 <preempt+0x78>
  1237. printf(1, "preempt write error");
  1238. 858: e3a00001 mov r0, #1
  1239. 85c: e59f10a0 ldr r1, [pc, #160] ; 904 <preempt+0x118>
  1240. 860: eb000bb7 bl 3744 <printf>
  1241. close(pfds[1]);
  1242. 864: e51b0018 ldr r0, [fp, #-24]
  1243. 868: eb000aa3 bl 32fc <close>
  1244. 86c: eafffffe b 86c <preempt+0x80>
  1245. for(;;)
  1246. ;
  1247. }
  1248. close(pfds[1]);
  1249. 870: e51b0018 ldr r0, [fp, #-24]
  1250. 874: eb000aa0 bl 32fc <close>
  1251. if(read(pfds[0], buf, sizeof(buf)) != 1){
  1252. 878: e51b001c ldr r0, [fp, #-28]
  1253. 87c: e59f1084 ldr r1, [pc, #132] ; 908 <preempt+0x11c>
  1254. 880: e3a02a02 mov r2, #8192 ; 0x2000
  1255. 884: eb000a82 bl 3294 <read>
  1256. 888: e3500001 cmp r0, #1
  1257. 88c: e1a07000 mov r7, r0
  1258. 890: 0a000004 beq 8a8 <preempt+0xbc>
  1259. printf(1, "preempt read error");
  1260. 894: e3a00001 mov r0, #1
  1261. 898: e59f106c ldr r1, [pc, #108] ; 90c <preempt+0x120>
  1262. 89c: eb000ba8 bl 3744 <printf>
  1263. printf(1, "wait... ");
  1264. wait();
  1265. wait();
  1266. wait();
  1267. printf(1, "preempt ok\n");
  1268. }
  1269. 8a0: e24bd014 sub sp, fp, #20
  1270. 8a4: e8bd88f0 pop {r4, r5, r6, r7, fp, pc}
  1271. close(pfds[1]);
  1272. if(read(pfds[0], buf, sizeof(buf)) != 1){
  1273. printf(1, "preempt read error");
  1274. return;
  1275. }
  1276. close(pfds[0]);
  1277. 8a8: e51b001c ldr r0, [fp, #-28]
  1278. 8ac: eb000a92 bl 32fc <close>
  1279. printf(1, "kill... ");
  1280. 8b0: e59f1058 ldr r1, [pc, #88] ; 910 <preempt+0x124>
  1281. 8b4: e1a00007 mov r0, r7
  1282. 8b8: eb000ba1 bl 3744 <printf>
  1283. kill(pid1);
  1284. 8bc: e1a00006 mov r0, r6
  1285. 8c0: eb000a9a bl 3330 <kill>
  1286. kill(pid2);
  1287. 8c4: e1a00005 mov r0, r5
  1288. 8c8: eb000a98 bl 3330 <kill>
  1289. kill(pid3);
  1290. 8cc: e1a00004 mov r0, r4
  1291. 8d0: eb000a96 bl 3330 <kill>
  1292. printf(1, "wait... ");
  1293. 8d4: e59f1038 ldr r1, [pc, #56] ; 914 <preempt+0x128>
  1294. 8d8: e1a00007 mov r0, r7
  1295. 8dc: eb000b98 bl 3744 <printf>
  1296. wait();
  1297. 8e0: eb000a51 bl 322c <wait>
  1298. wait();
  1299. 8e4: eb000a50 bl 322c <wait>
  1300. wait();
  1301. 8e8: eb000a4f bl 322c <wait>
  1302. printf(1, "preempt ok\n");
  1303. 8ec: e1a00007 mov r0, r7
  1304. 8f0: e59f1020 ldr r1, [pc, #32] ; 918 <preempt+0x12c>
  1305. 8f4: eb000b92 bl 3744 <printf>
  1306. 8f8: eaffffe8 b 8a0 <preempt+0xb4>
  1307. 8fc: 00003df4 .word 0x00003df4
  1308. 900: 00004760 .word 0x00004760
  1309. 904: 00003e00 .word 0x00003e00
  1310. 908: 000079fc .word 0x000079fc
  1311. 90c: 00003e14 .word 0x00003e14
  1312. 910: 00003e28 .word 0x00003e28
  1313. 914: 00003e34 .word 0x00003e34
  1314. 918: 00003e40 .word 0x00003e40
  1315. 0000091c <exitwait>:
  1316. }
  1317. // try to find any races between exit and wait
  1318. void
  1319. exitwait(void)
  1320. {
  1321. 91c: e92d4830 push {r4, r5, fp, lr}
  1322. 920: e3a04064 mov r4, #100 ; 0x64
  1323. 924: e28db00c add fp, sp, #12
  1324. 928: ea000005 b 944 <exitwait+0x28>
  1325. pid = fork();
  1326. if(pid < 0){
  1327. printf(1, "fork failed\n");
  1328. return;
  1329. }
  1330. if(pid){
  1331. 92c: 0a000013 beq 980 <exitwait+0x64>
  1332. if(wait() != pid){
  1333. 930: eb000a3d bl 322c <wait>
  1334. 934: e1500005 cmp r0, r5
  1335. 938: 1a000008 bne 960 <exitwait+0x44>
  1336. void
  1337. exitwait(void)
  1338. {
  1339. int i, pid;
  1340. for(i = 0; i < 100; i++){
  1341. 93c: e2544001 subs r4, r4, #1
  1342. 940: 0a00000a beq 970 <exitwait+0x54>
  1343. pid = fork();
  1344. 944: eb000a1e bl 31c4 <fork>
  1345. if(pid < 0){
  1346. 948: e2505000 subs r5, r0, #0
  1347. 94c: aafffff6 bge 92c <exitwait+0x10>
  1348. printf(1, "fork failed\n");
  1349. 950: e3a00001 mov r0, #1
  1350. 954: e59f1028 ldr r1, [pc, #40] ; 984 <exitwait+0x68>
  1351. } else {
  1352. exit();
  1353. }
  1354. }
  1355. printf(1, "exitwait ok\n");
  1356. }
  1357. 958: e8bd4830 pop {r4, r5, fp, lr}
  1358. int i, pid;
  1359. for(i = 0; i < 100; i++){
  1360. pid = fork();
  1361. if(pid < 0){
  1362. printf(1, "fork failed\n");
  1363. 95c: ea000b78 b 3744 <printf>
  1364. return;
  1365. }
  1366. if(pid){
  1367. if(wait() != pid){
  1368. printf(1, "wait wrong pid\n");
  1369. 960: e3a00001 mov r0, #1
  1370. 964: e59f101c ldr r1, [pc, #28] ; 988 <exitwait+0x6c>
  1371. } else {
  1372. exit();
  1373. }
  1374. }
  1375. printf(1, "exitwait ok\n");
  1376. }
  1377. 968: e8bd4830 pop {r4, r5, fp, lr}
  1378. printf(1, "fork failed\n");
  1379. return;
  1380. }
  1381. if(pid){
  1382. if(wait() != pid){
  1383. printf(1, "wait wrong pid\n");
  1384. 96c: ea000b74 b 3744 <printf>
  1385. }
  1386. } else {
  1387. exit();
  1388. }
  1389. }
  1390. printf(1, "exitwait ok\n");
  1391. 970: e3a00001 mov r0, #1
  1392. 974: e59f1010 ldr r1, [pc, #16] ; 98c <exitwait+0x70>
  1393. }
  1394. 978: e8bd4830 pop {r4, r5, fp, lr}
  1395. }
  1396. } else {
  1397. exit();
  1398. }
  1399. }
  1400. printf(1, "exitwait ok\n");
  1401. 97c: ea000b70 b 3744 <printf>
  1402. if(wait() != pid){
  1403. printf(1, "wait wrong pid\n");
  1404. return;
  1405. }
  1406. } else {
  1407. exit();
  1408. 980: eb000a1c bl 31f8 <exit>
  1409. 984: 00005148 .word 0x00005148
  1410. 988: 00003e4c .word 0x00003e4c
  1411. 98c: 00003e5c .word 0x00003e5c
  1412. 00000990 <mem>:
  1413. printf(1, "exitwait ok\n");
  1414. }
  1415. void
  1416. mem(void)
  1417. {
  1418. 990: e92d4878 push {r3, r4, r5, r6, fp, lr}
  1419. void *m1, *m2;
  1420. int pid, ppid;
  1421. printf(1, "mem test\n");
  1422. 994: e3a00001 mov r0, #1
  1423. printf(1, "exitwait ok\n");
  1424. }
  1425. void
  1426. mem(void)
  1427. {
  1428. 998: e28db014 add fp, sp, #20
  1429. void *m1, *m2;
  1430. int pid, ppid;
  1431. printf(1, "mem test\n");
  1432. 99c: e59f1098 ldr r1, [pc, #152] ; a3c <mem+0xac>
  1433. 9a0: eb000b67 bl 3744 <printf>
  1434. ppid = getpid();
  1435. 9a4: eb000ae3 bl 3538 <getpid>
  1436. 9a8: e1a04000 mov r4, r0
  1437. if((pid = fork()) == 0){
  1438. 9ac: eb000a04 bl 31c4 <fork>
  1439. 9b0: e2505000 subs r5, r0, #0
  1440. 9b4: 0a000002 beq 9c4 <mem+0x34>
  1441. 9b8: ea000017 b a1c <mem+0x8c>
  1442. m1 = 0;
  1443. while((m2 = malloc(10001)) != 0){
  1444. *(char**)m2 = m1;
  1445. 9bc: e5805000 str r5, [r0]
  1446. 9c0: e1a05000 mov r5, r0
  1447. printf(1, "mem test\n");
  1448. ppid = getpid();
  1449. if((pid = fork()) == 0){
  1450. m1 = 0;
  1451. while((m2 = malloc(10001)) != 0){
  1452. 9c4: e59f0074 ldr r0, [pc, #116] ; a40 <mem+0xb0>
  1453. 9c8: eb000bdc bl 3940 <malloc>
  1454. 9cc: e3500000 cmp r0, #0
  1455. 9d0: 1afffff9 bne 9bc <mem+0x2c>
  1456. *(char**)m2 = m1;
  1457. m1 = m2;
  1458. }
  1459. while(m1){
  1460. 9d4: e3550000 cmp r5, #0
  1461. 9d8: 1a000001 bne 9e4 <mem+0x54>
  1462. 9dc: ea000005 b 9f8 <mem+0x68>
  1463. m2 = *(char**)m1;
  1464. free(m1);
  1465. m1 = m2;
  1466. 9e0: e1a05006 mov r5, r6
  1467. while((m2 = malloc(10001)) != 0){
  1468. *(char**)m2 = m1;
  1469. m1 = m2;
  1470. }
  1471. while(m1){
  1472. m2 = *(char**)m1;
  1473. 9e4: e5956000 ldr r6, [r5]
  1474. free(m1);
  1475. 9e8: e1a00005 mov r0, r5
  1476. 9ec: eb000baa bl 389c <free>
  1477. m1 = 0;
  1478. while((m2 = malloc(10001)) != 0){
  1479. *(char**)m2 = m1;
  1480. m1 = m2;
  1481. }
  1482. while(m1){
  1483. 9f0: e3560000 cmp r6, #0
  1484. 9f4: 1afffff9 bne 9e0 <mem+0x50>
  1485. m2 = *(char**)m1;
  1486. free(m1);
  1487. m1 = m2;
  1488. }
  1489. m1 = malloc(1024*20);
  1490. 9f8: e3a00a05 mov r0, #20480 ; 0x5000
  1491. 9fc: eb000bcf bl 3940 <malloc>
  1492. if(m1 == 0){
  1493. a00: e3500000 cmp r0, #0
  1494. a04: 0a000006 beq a24 <mem+0x94>
  1495. printf(1, "couldn't allocate mem?!!\n");
  1496. kill(ppid);
  1497. exit();
  1498. }
  1499. free(m1);
  1500. a08: eb000ba3 bl 389c <free>
  1501. printf(1, "mem ok\n");
  1502. a0c: e3a00001 mov r0, #1
  1503. a10: e59f102c ldr r1, [pc, #44] ; a44 <mem+0xb4>
  1504. a14: eb000b4a bl 3744 <printf>
  1505. exit();
  1506. a18: eb0009f6 bl 31f8 <exit>
  1507. } else {
  1508. wait();
  1509. }
  1510. }
  1511. a1c: e8bd4878 pop {r3, r4, r5, r6, fp, lr}
  1512. }
  1513. free(m1);
  1514. printf(1, "mem ok\n");
  1515. exit();
  1516. } else {
  1517. wait();
  1518. a20: ea000a01 b 322c <wait>
  1519. free(m1);
  1520. m1 = m2;
  1521. }
  1522. m1 = malloc(1024*20);
  1523. if(m1 == 0){
  1524. printf(1, "couldn't allocate mem?!!\n");
  1525. a24: e59f101c ldr r1, [pc, #28] ; a48 <mem+0xb8>
  1526. a28: e3a00001 mov r0, #1
  1527. a2c: eb000b44 bl 3744 <printf>
  1528. kill(ppid);
  1529. a30: e1a00004 mov r0, r4
  1530. a34: eb000a3d bl 3330 <kill>
  1531. exit();
  1532. a38: eb0009ee bl 31f8 <exit>
  1533. a3c: 00003e6c .word 0x00003e6c
  1534. a40: 00002711 .word 0x00002711
  1535. a44: 00003e94 .word 0x00003e94
  1536. a48: 00003e78 .word 0x00003e78
  1537. 00000a4c <sharedfd>:
  1538. // two processes write to the same file descriptor
  1539. // is the offset shared? does inode locking work?
  1540. void
  1541. sharedfd(void)
  1542. {
  1543. a4c: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  1544. a50: e28db014 add fp, sp, #20
  1545. a54: e24dd010 sub sp, sp, #16
  1546. int fd, pid, i, n, nc, np;
  1547. char buf[10];
  1548. printf(1, "sharedfd test\n");
  1549. a58: e59f1164 ldr r1, [pc, #356] ; bc4 <sharedfd+0x178>
  1550. a5c: e3a00001 mov r0, #1
  1551. a60: eb000b37 bl 3744 <printf>
  1552. unlink("sharedfd");
  1553. a64: e59f015c ldr r0, [pc, #348] ; bc8 <sharedfd+0x17c>
  1554. a68: eb000a64 bl 3400 <unlink>
  1555. fd = open("sharedfd", O_CREATE|O_RDWR);
  1556. a6c: e59f0154 ldr r0, [pc, #340] ; bc8 <sharedfd+0x17c>
  1557. a70: e59f1154 ldr r1, [pc, #340] ; bcc <sharedfd+0x180>
  1558. a74: eb000a47 bl 3398 <open>
  1559. if(fd < 0){
  1560. a78: e2505000 subs r5, r0, #0
  1561. a7c: ba000043 blt b90 <sharedfd+0x144>
  1562. printf(1, "fstests: cannot open sharedfd for writing");
  1563. return;
  1564. }
  1565. pid = fork();
  1566. a80: eb0009cf bl 31c4 <fork>
  1567. memset(buf, pid==0?'c':'p', sizeof(buf));
  1568. a84: e3a0200a mov r2, #10
  1569. a88: e3a04ffa mov r4, #1000 ; 0x3e8
  1570. a8c: e3500000 cmp r0, #0
  1571. a90: e1a06000 mov r6, r0
  1572. a94: 13a01070 movne r1, #112 ; 0x70
  1573. a98: 03a01063 moveq r1, #99 ; 0x63
  1574. a9c: e24b0020 sub r0, fp, #32
  1575. aa0: eb000959 bl 300c <memset>
  1576. aa4: ea000001 b ab0 <sharedfd+0x64>
  1577. for(i = 0; i < 1000; i++){
  1578. aa8: e2544001 subs r4, r4, #1
  1579. aac: 0a000008 beq ad4 <sharedfd+0x88>
  1580. if(write(fd, buf, sizeof(buf)) != sizeof(buf)){
  1581. ab0: e1a00005 mov r0, r5
  1582. ab4: e24b1020 sub r1, fp, #32
  1583. ab8: e3a0200a mov r2, #10
  1584. abc: eb000a01 bl 32c8 <write>
  1585. ac0: e350000a cmp r0, #10
  1586. ac4: 0afffff7 beq aa8 <sharedfd+0x5c>
  1587. printf(1, "fstests: write sharedfd failed\n");
  1588. ac8: e3a00001 mov r0, #1
  1589. acc: e59f10fc ldr r1, [pc, #252] ; bd0 <sharedfd+0x184>
  1590. ad0: eb000b1b bl 3744 <printf>
  1591. break;
  1592. }
  1593. }
  1594. if(pid == 0)
  1595. ad4: e3560000 cmp r6, #0
  1596. ad8: 0a000038 beq bc0 <sharedfd+0x174>
  1597. exit();
  1598. else
  1599. wait();
  1600. adc: eb0009d2 bl 322c <wait>
  1601. close(fd);
  1602. ae0: e1a00005 mov r0, r5
  1603. ae4: eb000a04 bl 32fc <close>
  1604. fd = open("sharedfd", 0);
  1605. ae8: e59f00d8 ldr r0, [pc, #216] ; bc8 <sharedfd+0x17c>
  1606. aec: e3a01000 mov r1, #0
  1607. af0: eb000a28 bl 3398 <open>
  1608. if(fd < 0){
  1609. af4: e2507000 subs r7, r0, #0
  1610. af8: a3a05000 movge r5, #0
  1611. afc: a1a06005 movge r6, r5
  1612. // More file system tests
  1613. // two processes write to the same file descriptor
  1614. // is the offset shared? does inode locking work?
  1615. void
  1616. sharedfd(void)
  1617. b00: a24b4017 subge r4, fp, #23
  1618. exit();
  1619. else
  1620. wait();
  1621. close(fd);
  1622. fd = open("sharedfd", 0);
  1623. if(fd < 0){
  1624. b04: ba000025 blt ba0 <sharedfd+0x154>
  1625. printf(1, "fstests: cannot open sharedfd for reading\n");
  1626. return;
  1627. }
  1628. nc = np = 0;
  1629. while((n = read(fd, buf, sizeof(buf))) > 0){
  1630. b08: e1a00007 mov r0, r7
  1631. b0c: e24b1020 sub r1, fp, #32
  1632. b10: e3a0200a mov r2, #10
  1633. b14: eb0009de bl 3294 <read>
  1634. b18: e3500000 cmp r0, #0
  1635. b1c: da00000e ble b5c <sharedfd+0x110>
  1636. b20: e24b3021 sub r3, fp, #33 ; 0x21
  1637. for(i = 0; i < sizeof(buf); i++){
  1638. if(buf[i] == 'c')
  1639. b24: e5f32001 ldrb r2, [r3, #1]!
  1640. b28: e3520063 cmp r2, #99 ; 0x63
  1641. nc++;
  1642. b2c: 02866001 addeq r6, r6, #1
  1643. return;
  1644. }
  1645. nc = np = 0;
  1646. while((n = read(fd, buf, sizeof(buf))) > 0){
  1647. for(i = 0; i < sizeof(buf); i++){
  1648. if(buf[i] == 'c')
  1649. b30: 0a000001 beq b3c <sharedfd+0xf0>
  1650. nc++;
  1651. if(buf[i] == 'p')
  1652. b34: e3520070 cmp r2, #112 ; 0x70
  1653. np++;
  1654. b38: 02855001 addeq r5, r5, #1
  1655. printf(1, "fstests: cannot open sharedfd for reading\n");
  1656. return;
  1657. }
  1658. nc = np = 0;
  1659. while((n = read(fd, buf, sizeof(buf))) > 0){
  1660. for(i = 0; i < sizeof(buf); i++){
  1661. b3c: e1530004 cmp r3, r4
  1662. b40: 1afffff7 bne b24 <sharedfd+0xd8>
  1663. if(fd < 0){
  1664. printf(1, "fstests: cannot open sharedfd for reading\n");
  1665. return;
  1666. }
  1667. nc = np = 0;
  1668. while((n = read(fd, buf, sizeof(buf))) > 0){
  1669. b44: e1a00007 mov r0, r7
  1670. b48: e24b1020 sub r1, fp, #32
  1671. b4c: e3a0200a mov r2, #10
  1672. b50: eb0009cf bl 3294 <read>
  1673. b54: e3500000 cmp r0, #0
  1674. b58: cafffff0 bgt b20 <sharedfd+0xd4>
  1675. nc++;
  1676. if(buf[i] == 'p')
  1677. np++;
  1678. }
  1679. }
  1680. close(fd);
  1681. b5c: e1a00007 mov r0, r7
  1682. b60: eb0009e5 bl 32fc <close>
  1683. unlink("sharedfd");
  1684. b64: e59f005c ldr r0, [pc, #92] ; bc8 <sharedfd+0x17c>
  1685. b68: eb000a24 bl 3400 <unlink>
  1686. if(nc == 10000 && np == 10000){
  1687. b6c: e59f3060 ldr r3, [pc, #96] ; bd4 <sharedfd+0x188>
  1688. printf(1, "sharedfd ok\n");
  1689. b70: e3a00001 mov r0, #1
  1690. np++;
  1691. }
  1692. }
  1693. close(fd);
  1694. unlink("sharedfd");
  1695. if(nc == 10000 && np == 10000){
  1696. b74: e1550003 cmp r5, r3
  1697. b78: 01560003 cmpeq r6, r3
  1698. b7c: 1a00000b bne bb0 <sharedfd+0x164>
  1699. printf(1, "sharedfd ok\n");
  1700. b80: e59f1050 ldr r1, [pc, #80] ; bd8 <sharedfd+0x18c>
  1701. b84: eb000aee bl 3744 <printf>
  1702. } else {
  1703. printf(1, "sharedfd oops %d %d\n", nc, np);
  1704. exit();
  1705. }
  1706. }
  1707. b88: e24bd014 sub sp, fp, #20
  1708. b8c: e8bd88f0 pop {r4, r5, r6, r7, fp, pc}
  1709. printf(1, "sharedfd test\n");
  1710. unlink("sharedfd");
  1711. fd = open("sharedfd", O_CREATE|O_RDWR);
  1712. if(fd < 0){
  1713. printf(1, "fstests: cannot open sharedfd for writing");
  1714. b90: e3a00001 mov r0, #1
  1715. b94: e59f1040 ldr r1, [pc, #64] ; bdc <sharedfd+0x190>
  1716. b98: eb000ae9 bl 3744 <printf>
  1717. return;
  1718. b9c: eafffff9 b b88 <sharedfd+0x13c>
  1719. else
  1720. wait();
  1721. close(fd);
  1722. fd = open("sharedfd", 0);
  1723. if(fd < 0){
  1724. printf(1, "fstests: cannot open sharedfd for reading\n");
  1725. ba0: e3a00001 mov r0, #1
  1726. ba4: e59f1034 ldr r1, [pc, #52] ; be0 <sharedfd+0x194>
  1727. ba8: eb000ae5 bl 3744 <printf>
  1728. return;
  1729. bac: eafffff5 b b88 <sharedfd+0x13c>
  1730. close(fd);
  1731. unlink("sharedfd");
  1732. if(nc == 10000 && np == 10000){
  1733. printf(1, "sharedfd ok\n");
  1734. } else {
  1735. printf(1, "sharedfd oops %d %d\n", nc, np);
  1736. bb0: e59f102c ldr r1, [pc, #44] ; be4 <sharedfd+0x198>
  1737. bb4: e1a02006 mov r2, r6
  1738. bb8: e1a03005 mov r3, r5
  1739. bbc: eb000ae0 bl 3744 <printf>
  1740. exit();
  1741. bc0: eb00098c bl 31f8 <exit>
  1742. bc4: 00003e9c .word 0x00003e9c
  1743. bc8: 00003eac .word 0x00003eac
  1744. bcc: 00000202 .word 0x00000202
  1745. bd0: 00003ee4 .word 0x00003ee4
  1746. bd4: 00002710 .word 0x00002710
  1747. bd8: 00003f30 .word 0x00003f30
  1748. bdc: 00003eb8 .word 0x00003eb8
  1749. be0: 00003f04 .word 0x00003f04
  1750. be4: 00003f40 .word 0x00003f40
  1751. 00000be8 <twofiles>:
  1752. // two processes write two different files at the same
  1753. // time, to test block allocation.
  1754. void
  1755. twofiles(void)
  1756. {
  1757. be8: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  1758. int fd, pid, i, j, n, total;
  1759. char *fname;
  1760. printf(1, "twofiles test\n");
  1761. bec: e3a00001 mov r0, #1
  1762. // two processes write two different files at the same
  1763. // time, to test block allocation.
  1764. void
  1765. twofiles(void)
  1766. {
  1767. bf0: e28db014 add fp, sp, #20
  1768. int fd, pid, i, j, n, total;
  1769. char *fname;
  1770. printf(1, "twofiles test\n");
  1771. bf4: e59f1194 ldr r1, [pc, #404] ; d90 <twofiles+0x1a8>
  1772. bf8: eb000ad1 bl 3744 <printf>
  1773. unlink("f1");
  1774. bfc: e59f0190 ldr r0, [pc, #400] ; d94 <twofiles+0x1ac>
  1775. c00: eb0009fe bl 3400 <unlink>
  1776. unlink("f2");
  1777. c04: e59f018c ldr r0, [pc, #396] ; d98 <twofiles+0x1b0>
  1778. c08: eb0009fc bl 3400 <unlink>
  1779. pid = fork();
  1780. c0c: eb00096c bl 31c4 <fork>
  1781. if(pid < 0){
  1782. c10: e2506000 subs r6, r0, #0
  1783. c14: ba000050 blt d5c <twofiles+0x174>
  1784. printf(1, "fork failed\n");
  1785. exit();
  1786. }
  1787. fname = pid ? "f1" : "f2";
  1788. c18: 159f0174 ldrne r0, [pc, #372] ; d94 <twofiles+0x1ac>
  1789. c1c: 059f0174 ldreq r0, [pc, #372] ; d98 <twofiles+0x1b0>
  1790. fd = open(fname, O_CREATE | O_RDWR);
  1791. c20: e59f1174 ldr r1, [pc, #372] ; d9c <twofiles+0x1b4>
  1792. c24: eb0009db bl 3398 <open>
  1793. if(fd < 0){
  1794. c28: e2505000 subs r5, r0, #0
  1795. c2c: ba00004e blt d6c <twofiles+0x184>
  1796. printf(1, "create failed\n");
  1797. exit();
  1798. }
  1799. memset(buf, pid?'p':'c', 512);
  1800. c30: e3560000 cmp r6, #0
  1801. c34: e59f0164 ldr r0, [pc, #356] ; da0 <twofiles+0x1b8>
  1802. c38: 03a01063 moveq r1, #99 ; 0x63
  1803. c3c: 13a01070 movne r1, #112 ; 0x70
  1804. c40: e3a02c02 mov r2, #512 ; 0x200
  1805. c44: eb0008f0 bl 300c <memset>
  1806. c48: e3a0400c mov r4, #12
  1807. for(i = 0; i < 12; i++){
  1808. if((n = write(fd, buf, 500)) != 500){
  1809. c4c: e3a02f7d mov r2, #500 ; 0x1f4
  1810. c50: e1a00005 mov r0, r5
  1811. c54: e59f1144 ldr r1, [pc, #324] ; da0 <twofiles+0x1b8>
  1812. c58: eb00099a bl 32c8 <write>
  1813. c5c: e3500f7d cmp r0, #500 ; 0x1f4
  1814. c60: e1a02000 mov r2, r0
  1815. c64: 1a000038 bne d4c <twofiles+0x164>
  1816. printf(1, "create failed\n");
  1817. exit();
  1818. }
  1819. memset(buf, pid?'p':'c', 512);
  1820. for(i = 0; i < 12; i++){
  1821. c68: e2544001 subs r4, r4, #1
  1822. c6c: 1afffff6 bne c4c <twofiles+0x64>
  1823. if((n = write(fd, buf, 500)) != 500){
  1824. printf(1, "write failed %d\n", n);
  1825. exit();
  1826. }
  1827. }
  1828. close(fd);
  1829. c70: e1a00005 mov r0, r5
  1830. c74: eb0009a0 bl 32fc <close>
  1831. if(pid)
  1832. c78: e3560000 cmp r6, #0
  1833. c7c: 0a000031 beq d48 <twofiles+0x160>
  1834. wait();
  1835. c80: eb000969 bl 322c <wait>
  1836. exit();
  1837. for(i = 0; i < 2; i++){
  1838. fd = open(i?"f1":"f2", 0);
  1839. total = 0;
  1840. while((n = read(fd, buf, sizeof(buf))) > 0){
  1841. c84: e59f7118 ldr r7, [pc, #280] ; da4 <twofiles+0x1bc>
  1842. wait();
  1843. else
  1844. exit();
  1845. for(i = 0; i < 2; i++){
  1846. fd = open(i?"f1":"f2", 0);
  1847. c88: e59f0108 ldr r0, [pc, #264] ; d98 <twofiles+0x1b0>
  1848. c8c: e3a01000 mov r1, #0
  1849. c90: eb0009c0 bl 3398 <open>
  1850. total = 0;
  1851. while((n = read(fd, buf, sizeof(buf))) > 0){
  1852. c94: e59f1104 ldr r1, [pc, #260] ; da0 <twofiles+0x1b8>
  1853. c98: e3a02a02 mov r2, #8192 ; 0x2000
  1854. else
  1855. exit();
  1856. for(i = 0; i < 2; i++){
  1857. fd = open(i?"f1":"f2", 0);
  1858. total = 0;
  1859. c9c: e3a05000 mov r5, #0
  1860. wait();
  1861. else
  1862. exit();
  1863. for(i = 0; i < 2; i++){
  1864. fd = open(i?"f1":"f2", 0);
  1865. ca0: e1a06000 mov r6, r0
  1866. total = 0;
  1867. while((n = read(fd, buf, sizeof(buf))) > 0){
  1868. ca4: e1a00006 mov r0, r6
  1869. ca8: eb000979 bl 3294 <read>
  1870. cac: e3500000 cmp r0, #0
  1871. cb0: da000010 ble cf8 <twofiles+0x110>
  1872. cb4: e59f30e8 ldr r3, [pc, #232] ; da4 <twofiles+0x1bc>
  1873. }
  1874. // two processes write two different files at the same
  1875. // time, to test block allocation.
  1876. void
  1877. twofiles(void)
  1878. cb8: e087c000 add ip, r7, r0
  1879. for(i = 0; i < 2; i++){
  1880. fd = open(i?"f1":"f2", 0);
  1881. total = 0;
  1882. while((n = read(fd, buf, sizeof(buf))) > 0){
  1883. for(j = 0; j < n; j++){
  1884. if(buf[j] != (i?'p':'c')){
  1885. cbc: e5f31001 ldrb r1, [r3, #1]!
  1886. cc0: e3540000 cmp r4, #0
  1887. cc4: 03a02063 moveq r2, #99 ; 0x63
  1888. cc8: 13a02070 movne r2, #112 ; 0x70
  1889. ccc: e1510002 cmp r1, r2
  1890. cd0: 1a000019 bne d3c <twofiles+0x154>
  1891. for(i = 0; i < 2; i++){
  1892. fd = open(i?"f1":"f2", 0);
  1893. total = 0;
  1894. while((n = read(fd, buf, sizeof(buf))) > 0){
  1895. for(j = 0; j < n; j++){
  1896. cd4: e153000c cmp r3, ip
  1897. cd8: 1afffff7 bne cbc <twofiles+0xd4>
  1898. if(buf[j] != (i?'p':'c')){
  1899. printf(1, "wrong char\n");
  1900. exit();
  1901. }
  1902. }
  1903. total += n;
  1904. cdc: e0855000 add r5, r5, r0
  1905. exit();
  1906. for(i = 0; i < 2; i++){
  1907. fd = open(i?"f1":"f2", 0);
  1908. total = 0;
  1909. while((n = read(fd, buf, sizeof(buf))) > 0){
  1910. ce0: e59f10b8 ldr r1, [pc, #184] ; da0 <twofiles+0x1b8>
  1911. ce4: e1a00006 mov r0, r6
  1912. ce8: e3a02a02 mov r2, #8192 ; 0x2000
  1913. cec: eb000968 bl 3294 <read>
  1914. cf0: e3500000 cmp r0, #0
  1915. cf4: caffffee bgt cb4 <twofiles+0xcc>
  1916. exit();
  1917. }
  1918. }
  1919. total += n;
  1920. }
  1921. close(fd);
  1922. cf8: e1a00006 mov r0, r6
  1923. cfc: eb00097e bl 32fc <close>
  1924. if(total != 12*500){
  1925. d00: e59f30a0 ldr r3, [pc, #160] ; da8 <twofiles+0x1c0>
  1926. d04: e1550003 cmp r5, r3
  1927. d08: 1a00001b bne d7c <twofiles+0x194>
  1928. if(pid)
  1929. wait();
  1930. else
  1931. exit();
  1932. for(i = 0; i < 2; i++){
  1933. d0c: e3540001 cmp r4, #1
  1934. d10: e59f007c ldr r0, [pc, #124] ; d94 <twofiles+0x1ac>
  1935. d14: 1a000006 bne d34 <twofiles+0x14c>
  1936. printf(1, "wrong length %d\n", total);
  1937. exit();
  1938. }
  1939. }
  1940. unlink("f1");
  1941. d18: eb0009b8 bl 3400 <unlink>
  1942. unlink("f2");
  1943. d1c: e59f0074 ldr r0, [pc, #116] ; d98 <twofiles+0x1b0>
  1944. d20: eb0009b6 bl 3400 <unlink>
  1945. printf(1, "twofiles ok\n");
  1946. d24: e1a00004 mov r0, r4
  1947. d28: e59f107c ldr r1, [pc, #124] ; dac <twofiles+0x1c4>
  1948. }
  1949. d2c: e8bd48f0 pop {r4, r5, r6, r7, fp, lr}
  1950. }
  1951. unlink("f1");
  1952. unlink("f2");
  1953. printf(1, "twofiles ok\n");
  1954. d30: ea000a83 b 3744 <printf>
  1955. if(pid)
  1956. wait();
  1957. else
  1958. exit();
  1959. for(i = 0; i < 2; i++){
  1960. d34: e3a04001 mov r4, #1
  1961. d38: eaffffd3 b c8c <twofiles+0xa4>
  1962. fd = open(i?"f1":"f2", 0);
  1963. total = 0;
  1964. while((n = read(fd, buf, sizeof(buf))) > 0){
  1965. for(j = 0; j < n; j++){
  1966. if(buf[j] != (i?'p':'c')){
  1967. printf(1, "wrong char\n");
  1968. d3c: e3a00001 mov r0, #1
  1969. d40: e59f1068 ldr r1, [pc, #104] ; db0 <twofiles+0x1c8>
  1970. d44: eb000a7e bl 3744 <printf>
  1971. exit();
  1972. d48: eb00092a bl 31f8 <exit>
  1973. }
  1974. memset(buf, pid?'p':'c', 512);
  1975. for(i = 0; i < 12; i++){
  1976. if((n = write(fd, buf, 500)) != 500){
  1977. printf(1, "write failed %d\n", n);
  1978. d4c: e3a00001 mov r0, #1
  1979. d50: e59f105c ldr r1, [pc, #92] ; db4 <twofiles+0x1cc>
  1980. d54: eb000a7a bl 3744 <printf>
  1981. exit();
  1982. d58: eb000926 bl 31f8 <exit>
  1983. unlink("f1");
  1984. unlink("f2");
  1985. pid = fork();
  1986. if(pid < 0){
  1987. printf(1, "fork failed\n");
  1988. d5c: e3a00001 mov r0, #1
  1989. d60: e59f1050 ldr r1, [pc, #80] ; db8 <twofiles+0x1d0>
  1990. d64: eb000a76 bl 3744 <printf>
  1991. exit();
  1992. d68: eb000922 bl 31f8 <exit>
  1993. }
  1994. fname = pid ? "f1" : "f2";
  1995. fd = open(fname, O_CREATE | O_RDWR);
  1996. if(fd < 0){
  1997. printf(1, "create failed\n");
  1998. d6c: e3a00001 mov r0, #1
  1999. d70: e59f1044 ldr r1, [pc, #68] ; dbc <twofiles+0x1d4>
  2000. d74: eb000a72 bl 3744 <printf>
  2001. exit();
  2002. d78: eb00091e bl 31f8 <exit>
  2003. }
  2004. total += n;
  2005. }
  2006. close(fd);
  2007. if(total != 12*500){
  2008. printf(1, "wrong length %d\n", total);
  2009. d7c: e3a00001 mov r0, #1
  2010. d80: e59f1038 ldr r1, [pc, #56] ; dc0 <twofiles+0x1d8>
  2011. d84: e1a02005 mov r2, r5
  2012. d88: eb000a6d bl 3744 <printf>
  2013. exit();
  2014. d8c: eb000919 bl 31f8 <exit>
  2015. d90: 00003f60 .word 0x00003f60
  2016. d94: 00003f58 .word 0x00003f58
  2017. d98: 00003f5c .word 0x00003f5c
  2018. d9c: 00000202 .word 0x00000202
  2019. da0: 000079fc .word 0x000079fc
  2020. da4: 000079fb .word 0x000079fb
  2021. da8: 00001770 .word 0x00001770
  2022. dac: 00003fb4 .word 0x00003fb4
  2023. db0: 00003f94 .word 0x00003f94
  2024. db4: 00003f80 .word 0x00003f80
  2025. db8: 00005148 .word 0x00005148
  2026. dbc: 00003f70 .word 0x00003f70
  2027. dc0: 00003fa0 .word 0x00003fa0
  2028. 00000dc4 <createdelete>:
  2029. }
  2030. // two processes create and delete different files in same directory
  2031. void
  2032. createdelete(void)
  2033. {
  2034. dc4: e92d4df0 push {r4, r5, r6, r7, r8, sl, fp, lr}
  2035. dc8: e28db01c add fp, sp, #28
  2036. dcc: e24dd020 sub sp, sp, #32
  2037. enum { N = 20 };
  2038. int pid, i, fd;
  2039. char name[32];
  2040. printf(1, "createdelete test\n");
  2041. dd0: e3a00001 mov r0, #1
  2042. dd4: e59f1214 ldr r1, [pc, #532] ; ff0 <createdelete+0x22c>
  2043. dd8: eb000a59 bl 3744 <printf>
  2044. pid = fork();
  2045. ddc: eb0008f8 bl 31c4 <fork>
  2046. if(pid < 0){
  2047. de0: e2507000 subs r7, r0, #0
  2048. de4: ba00007d blt fe0 <createdelete+0x21c>
  2049. printf(1, "fork failed\n");
  2050. exit();
  2051. }
  2052. name[0] = pid ? 'p' : 'c';
  2053. de8: 13a03070 movne r3, #112 ; 0x70
  2054. dec: 03a03063 moveq r3, #99 ; 0x63
  2055. name[2] = '\0';
  2056. df0: e3a04000 mov r4, #0
  2057. if(pid < 0){
  2058. printf(1, "fork failed\n");
  2059. exit();
  2060. }
  2061. name[0] = pid ? 'p' : 'c';
  2062. df4: e54b303c strb r3, [fp, #-60] ; 0x3c
  2063. name[2] = '\0';
  2064. df8: e54b403a strb r4, [fp, #-58] ; 0x3a
  2065. dfc: e3a06001 mov r6, #1
  2066. e00: e3a05030 mov r5, #48 ; 0x30
  2067. e04: ea000005 b e20 <createdelete+0x5c>
  2068. for(i = 0; i < N; i++){
  2069. e08: e3560014 cmp r6, #20
  2070. e0c: 0a000019 beq e78 <createdelete+0xb4>
  2071. printf(1, "fork failed\n");
  2072. exit();
  2073. }
  2074. name[0] = pid ? 'p' : 'c';
  2075. name[2] = '\0';
  2076. e10: e2855001 add r5, r5, #1
  2077. e14: e2844001 add r4, r4, #1
  2078. e18: e6ef5075 uxtb r5, r5
  2079. e1c: e2866001 add r6, r6, #1
  2080. for(i = 0; i < N; i++){
  2081. name[1] = '0' + i;
  2082. fd = open(name, O_CREATE | O_RDWR);
  2083. e20: e24b003c sub r0, fp, #60 ; 0x3c
  2084. e24: e59f11c8 ldr r1, [pc, #456] ; ff4 <createdelete+0x230>
  2085. }
  2086. name[0] = pid ? 'p' : 'c';
  2087. name[2] = '\0';
  2088. for(i = 0; i < N; i++){
  2089. name[1] = '0' + i;
  2090. e28: e54b503b strb r5, [fp, #-59] ; 0x3b
  2091. fd = open(name, O_CREATE | O_RDWR);
  2092. e2c: eb000959 bl 3398 <open>
  2093. if(fd < 0){
  2094. e30: e3500000 cmp r0, #0
  2095. e34: ba00005b blt fa8 <createdelete+0x1e4>
  2096. printf(1, "create failed\n");
  2097. exit();
  2098. }
  2099. close(fd);
  2100. e38: eb00092f bl 32fc <close>
  2101. if(i > 0 && (i % 2 ) == 0){
  2102. e3c: e3540000 cmp r4, #0
  2103. e40: 0afffff2 beq e10 <createdelete+0x4c>
  2104. e44: e3140001 tst r4, #1
  2105. e48: 1affffee bne e08 <createdelete+0x44>
  2106. name[1] = '0' + (i / 2);
  2107. e4c: e1a030c4 asr r3, r4, #1
  2108. e50: e2833030 add r3, r3, #48 ; 0x30
  2109. if(unlink(name) < 0){
  2110. e54: e24b003c sub r0, fp, #60 ; 0x3c
  2111. printf(1, "create failed\n");
  2112. exit();
  2113. }
  2114. close(fd);
  2115. if(i > 0 && (i % 2 ) == 0){
  2116. name[1] = '0' + (i / 2);
  2117. e58: e54b303b strb r3, [fp, #-59] ; 0x3b
  2118. if(unlink(name) < 0){
  2119. e5c: eb000967 bl 3400 <unlink>
  2120. e60: e3500000 cmp r0, #0
  2121. e64: aaffffe7 bge e08 <createdelete+0x44>
  2122. printf(1, "unlink failed\n");
  2123. e68: e3a00001 mov r0, #1
  2124. e6c: e59f1184 ldr r1, [pc, #388] ; ff8 <createdelete+0x234>
  2125. e70: eb000a33 bl 3744 <printf>
  2126. exit();
  2127. e74: eb0008df bl 31f8 <exit>
  2128. }
  2129. }
  2130. }
  2131. if(pid==0)
  2132. e78: e3570000 cmp r7, #0
  2133. e7c: 0a000056 beq fdc <createdelete+0x218>
  2134. exit();
  2135. else
  2136. wait();
  2137. e80: eb0008e9 bl 322c <wait>
  2138. e84: e3a05030 mov r5, #48 ; 0x30
  2139. for(i = 0; i < N; i++){
  2140. e88: e3a04000 mov r4, #0
  2141. name[0] = 'p';
  2142. e8c: e3a0a070 mov sl, #112 ; 0x70
  2143. exit();
  2144. }
  2145. if(fd >= 0)
  2146. close(fd);
  2147. name[0] = 'c';
  2148. e90: e3a08063 mov r8, #99 ; 0x63
  2149. wait();
  2150. for(i = 0; i < N; i++){
  2151. name[0] = 'p';
  2152. name[1] = '0' + i;
  2153. fd = open(name, 0);
  2154. e94: e24b003c sub r0, fp, #60 ; 0x3c
  2155. e98: e3a01000 mov r1, #0
  2156. exit();
  2157. else
  2158. wait();
  2159. for(i = 0; i < N; i++){
  2160. name[0] = 'p';
  2161. e9c: e54ba03c strb sl, [fp, #-60] ; 0x3c
  2162. name[1] = '0' + i;
  2163. ea0: e54b503b strb r5, [fp, #-59] ; 0x3b
  2164. fd = open(name, 0);
  2165. ea4: eb00093b bl 3398 <open>
  2166. if((i == 0 || i >= N/2) && fd < 0){
  2167. ea8: e2747001 rsbs r7, r4, #1
  2168. eac: 33a07000 movcc r7, #0
  2169. eb0: e3540009 cmp r4, #9
  2170. eb4: c3877001 orrgt r7, r7, #1
  2171. eb8: e3570000 cmp r7, #0
  2172. ebc: 0a000001 beq ec8 <createdelete+0x104>
  2173. ec0: e3500000 cmp r0, #0
  2174. ec4: ba000040 blt fcc <createdelete+0x208>
  2175. printf(1, "oops createdelete %s didn't exist\n", name);
  2176. exit();
  2177. } else if((i >= 1 && i < N/2) && fd >= 0){
  2178. ec8: e2446001 sub r6, r4, #1
  2179. ecc: e1e03000 mvn r3, r0
  2180. ed0: e3560008 cmp r6, #8
  2181. ed4: 83a06000 movhi r6, #0
  2182. ed8: 93a06001 movls r6, #1
  2183. edc: e1a03fa3 lsr r3, r3, #31
  2184. ee0: e1160003 tst r6, r3
  2185. ee4: 1a00002a bne f94 <createdelete+0x1d0>
  2186. printf(1, "oops createdelete %s did exist\n", name);
  2187. exit();
  2188. }
  2189. if(fd >= 0)
  2190. ee8: e3530000 cmp r3, #0
  2191. eec: 0a000000 beq ef4 <createdelete+0x130>
  2192. close(fd);
  2193. ef0: eb000901 bl 32fc <close>
  2194. name[0] = 'c';
  2195. name[1] = '0' + i;
  2196. fd = open(name, 0);
  2197. ef4: e24b003c sub r0, fp, #60 ; 0x3c
  2198. ef8: e3a01000 mov r1, #0
  2199. exit();
  2200. }
  2201. if(fd >= 0)
  2202. close(fd);
  2203. name[0] = 'c';
  2204. efc: e54b803c strb r8, [fp, #-60] ; 0x3c
  2205. name[1] = '0' + i;
  2206. f00: e54b503b strb r5, [fp, #-59] ; 0x3b
  2207. fd = open(name, 0);
  2208. f04: eb000923 bl 3398 <open>
  2209. if((i == 0 || i >= N/2) && fd < 0){
  2210. f08: e3570000 cmp r7, #0
  2211. f0c: 0a000001 beq f18 <createdelete+0x154>
  2212. f10: e3500000 cmp r0, #0
  2213. f14: ba000027 blt fb8 <createdelete+0x1f4>
  2214. printf(1, "oops createdelete %s didn't exist\n", name);
  2215. exit();
  2216. } else if((i >= 1 && i < N/2) && fd >= 0){
  2217. f18: e1e03000 mvn r3, r0
  2218. f1c: e1a03fa3 lsr r3, r3, #31
  2219. f20: e1130006 tst r3, r6
  2220. f24: 1a00001a bne f94 <createdelete+0x1d0>
  2221. printf(1, "oops createdelete %s did exist\n", name);
  2222. exit();
  2223. }
  2224. if(fd >= 0)
  2225. f28: e3530000 cmp r3, #0
  2226. f2c: 0a000000 beq f34 <createdelete+0x170>
  2227. close(fd);
  2228. f30: eb0008f1 bl 32fc <close>
  2229. if(pid==0)
  2230. exit();
  2231. else
  2232. wait();
  2233. for(i = 0; i < N; i++){
  2234. f34: e2844001 add r4, r4, #1
  2235. f38: e2855001 add r5, r5, #1
  2236. f3c: e3540014 cmp r4, #20
  2237. f40: e6ef5075 uxtb r5, r5
  2238. f44: 1affffd2 bne e94 <createdelete+0xd0>
  2239. f48: e3a04030 mov r4, #48 ; 0x30
  2240. if(fd >= 0)
  2241. close(fd);
  2242. }
  2243. for(i = 0; i < N; i++){
  2244. name[0] = 'p';
  2245. f4c: e3a06070 mov r6, #112 ; 0x70
  2246. name[1] = '0' + i;
  2247. unlink(name);
  2248. name[0] = 'c';
  2249. f50: e3a05063 mov r5, #99 ; 0x63
  2250. close(fd);
  2251. }
  2252. for(i = 0; i < N; i++){
  2253. name[0] = 'p';
  2254. name[1] = '0' + i;
  2255. f54: e54b403b strb r4, [fp, #-59] ; 0x3b
  2256. unlink(name);
  2257. name[0] = 'c';
  2258. unlink(name);
  2259. f58: e2844001 add r4, r4, #1
  2260. }
  2261. for(i = 0; i < N; i++){
  2262. name[0] = 'p';
  2263. name[1] = '0' + i;
  2264. unlink(name);
  2265. f5c: e24b003c sub r0, fp, #60 ; 0x3c
  2266. if(fd >= 0)
  2267. close(fd);
  2268. }
  2269. for(i = 0; i < N; i++){
  2270. name[0] = 'p';
  2271. f60: e54b603c strb r6, [fp, #-60] ; 0x3c
  2272. name[1] = '0' + i;
  2273. unlink(name);
  2274. name[0] = 'c';
  2275. unlink(name);
  2276. f64: e6ef4074 uxtb r4, r4
  2277. }
  2278. for(i = 0; i < N; i++){
  2279. name[0] = 'p';
  2280. name[1] = '0' + i;
  2281. unlink(name);
  2282. f68: eb000924 bl 3400 <unlink>
  2283. name[0] = 'c';
  2284. unlink(name);
  2285. f6c: e24b003c sub r0, fp, #60 ; 0x3c
  2286. for(i = 0; i < N; i++){
  2287. name[0] = 'p';
  2288. name[1] = '0' + i;
  2289. unlink(name);
  2290. name[0] = 'c';
  2291. f70: e54b503c strb r5, [fp, #-60] ; 0x3c
  2292. unlink(name);
  2293. f74: eb000921 bl 3400 <unlink>
  2294. }
  2295. if(fd >= 0)
  2296. close(fd);
  2297. }
  2298. for(i = 0; i < N; i++){
  2299. f78: e3540044 cmp r4, #68 ; 0x44
  2300. f7c: 1afffff4 bne f54 <createdelete+0x190>
  2301. unlink(name);
  2302. name[0] = 'c';
  2303. unlink(name);
  2304. }
  2305. printf(1, "createdelete ok\n");
  2306. f80: e3a00001 mov r0, #1
  2307. f84: e59f1070 ldr r1, [pc, #112] ; ffc <createdelete+0x238>
  2308. f88: eb0009ed bl 3744 <printf>
  2309. }
  2310. f8c: e24bd01c sub sp, fp, #28
  2311. f90: e8bd8df0 pop {r4, r5, r6, r7, r8, sl, fp, pc}
  2312. fd = open(name, 0);
  2313. if((i == 0 || i >= N/2) && fd < 0){
  2314. printf(1, "oops createdelete %s didn't exist\n", name);
  2315. exit();
  2316. } else if((i >= 1 && i < N/2) && fd >= 0){
  2317. printf(1, "oops createdelete %s did exist\n", name);
  2318. f94: e3a00001 mov r0, #1
  2319. f98: e59f1060 ldr r1, [pc, #96] ; 1000 <createdelete+0x23c>
  2320. f9c: e24b203c sub r2, fp, #60 ; 0x3c
  2321. fa0: eb0009e7 bl 3744 <printf>
  2322. exit();
  2323. fa4: eb000893 bl 31f8 <exit>
  2324. name[2] = '\0';
  2325. for(i = 0; i < N; i++){
  2326. name[1] = '0' + i;
  2327. fd = open(name, O_CREATE | O_RDWR);
  2328. if(fd < 0){
  2329. printf(1, "create failed\n");
  2330. fa8: e3a00001 mov r0, #1
  2331. fac: e59f1050 ldr r1, [pc, #80] ; 1004 <createdelete+0x240>
  2332. fb0: eb0009e3 bl 3744 <printf>
  2333. exit();
  2334. fb4: eb00088f bl 31f8 <exit>
  2335. name[0] = 'c';
  2336. name[1] = '0' + i;
  2337. fd = open(name, 0);
  2338. if((i == 0 || i >= N/2) && fd < 0){
  2339. printf(1, "oops createdelete %s didn't exist\n", name);
  2340. fb8: e3a00001 mov r0, #1
  2341. fbc: e59f1044 ldr r1, [pc, #68] ; 1008 <createdelete+0x244>
  2342. fc0: e24b203c sub r2, fp, #60 ; 0x3c
  2343. fc4: eb0009de bl 3744 <printf>
  2344. exit();
  2345. fc8: eb00088a bl 31f8 <exit>
  2346. for(i = 0; i < N; i++){
  2347. name[0] = 'p';
  2348. name[1] = '0' + i;
  2349. fd = open(name, 0);
  2350. if((i == 0 || i >= N/2) && fd < 0){
  2351. printf(1, "oops createdelete %s didn't exist\n", name);
  2352. fcc: e3a00001 mov r0, #1
  2353. fd0: e59f1030 ldr r1, [pc, #48] ; 1008 <createdelete+0x244>
  2354. fd4: e24b203c sub r2, fp, #60 ; 0x3c
  2355. fd8: eb0009d9 bl 3744 <printf>
  2356. exit();
  2357. fdc: eb000885 bl 31f8 <exit>
  2358. char name[32];
  2359. printf(1, "createdelete test\n");
  2360. pid = fork();
  2361. if(pid < 0){
  2362. printf(1, "fork failed\n");
  2363. fe0: e3a00001 mov r0, #1
  2364. fe4: e59f1020 ldr r1, [pc, #32] ; 100c <createdelete+0x248>
  2365. fe8: eb0009d5 bl 3744 <printf>
  2366. exit();
  2367. fec: eb000881 bl 31f8 <exit>
  2368. ff0: 00003fc4 .word 0x00003fc4
  2369. ff4: 00000202 .word 0x00000202
  2370. ff8: 00003fd8 .word 0x00003fd8
  2371. ffc: 0000402c .word 0x0000402c
  2372. 1000: 0000400c .word 0x0000400c
  2373. 1004: 00003f70 .word 0x00003f70
  2374. 1008: 00003fe8 .word 0x00003fe8
  2375. 100c: 00005148 .word 0x00005148
  2376. 00001010 <unlinkread>:
  2377. }
  2378. // can I unlink a file and still read it?
  2379. void
  2380. unlinkread(void)
  2381. {
  2382. 1010: e92d4878 push {r3, r4, r5, r6, fp, lr}
  2383. int fd, fd1;
  2384. printf(1, "unlinkread test\n");
  2385. 1014: e3a00001 mov r0, #1
  2386. }
  2387. // can I unlink a file and still read it?
  2388. void
  2389. unlinkread(void)
  2390. {
  2391. 1018: e28db014 add fp, sp, #20
  2392. int fd, fd1;
  2393. printf(1, "unlinkread test\n");
  2394. 101c: e59f1130 ldr r1, [pc, #304] ; 1154 <unlinkread+0x144>
  2395. 1020: eb0009c7 bl 3744 <printf>
  2396. fd = open("unlinkread", O_CREATE | O_RDWR);
  2397. 1024: e59f012c ldr r0, [pc, #300] ; 1158 <unlinkread+0x148>
  2398. 1028: e59f112c ldr r1, [pc, #300] ; 115c <unlinkread+0x14c>
  2399. 102c: eb0008d9 bl 3398 <open>
  2400. if(fd < 0){
  2401. 1030: e2504000 subs r4, r0, #0
  2402. 1034: ba00002e blt 10f4 <unlinkread+0xe4>
  2403. printf(1, "create unlinkread failed\n");
  2404. exit();
  2405. }
  2406. write(fd, "hello", 5);
  2407. 1038: e59f1120 ldr r1, [pc, #288] ; 1160 <unlinkread+0x150>
  2408. 103c: e3a02005 mov r2, #5
  2409. 1040: eb0008a0 bl 32c8 <write>
  2410. close(fd);
  2411. 1044: e1a00004 mov r0, r4
  2412. 1048: eb0008ab bl 32fc <close>
  2413. fd = open("unlinkread", O_RDWR);
  2414. 104c: e59f0104 ldr r0, [pc, #260] ; 1158 <unlinkread+0x148>
  2415. 1050: e3a01002 mov r1, #2
  2416. 1054: eb0008cf bl 3398 <open>
  2417. if(fd < 0){
  2418. 1058: e2504000 subs r4, r0, #0
  2419. 105c: ba000038 blt 1144 <unlinkread+0x134>
  2420. printf(1, "open unlinkread failed\n");
  2421. exit();
  2422. }
  2423. if(unlink("unlinkread") != 0){
  2424. 1060: e59f00f0 ldr r0, [pc, #240] ; 1158 <unlinkread+0x148>
  2425. 1064: eb0008e5 bl 3400 <unlink>
  2426. 1068: e3500000 cmp r0, #0
  2427. 106c: 1a000030 bne 1134 <unlinkread+0x124>
  2428. printf(1, "unlink unlinkread failed\n");
  2429. exit();
  2430. }
  2431. fd1 = open("unlinkread", O_CREATE | O_RDWR);
  2432. 1070: e59f10e4 ldr r1, [pc, #228] ; 115c <unlinkread+0x14c>
  2433. 1074: e59f00dc ldr r0, [pc, #220] ; 1158 <unlinkread+0x148>
  2434. 1078: eb0008c6 bl 3398 <open>
  2435. write(fd1, "yyy", 3);
  2436. close(fd1);
  2437. if(read(fd, buf, sizeof(buf)) != 5){
  2438. 107c: e59f50e0 ldr r5, [pc, #224] ; 1164 <unlinkread+0x154>
  2439. printf(1, "unlink unlinkread failed\n");
  2440. exit();
  2441. }
  2442. fd1 = open("unlinkread", O_CREATE | O_RDWR);
  2443. write(fd1, "yyy", 3);
  2444. 1080: e59f10e0 ldr r1, [pc, #224] ; 1168 <unlinkread+0x158>
  2445. 1084: e3a02003 mov r2, #3
  2446. if(unlink("unlinkread") != 0){
  2447. printf(1, "unlink unlinkread failed\n");
  2448. exit();
  2449. }
  2450. fd1 = open("unlinkread", O_CREATE | O_RDWR);
  2451. 1088: e1a06000 mov r6, r0
  2452. write(fd1, "yyy", 3);
  2453. 108c: eb00088d bl 32c8 <write>
  2454. close(fd1);
  2455. 1090: e1a00006 mov r0, r6
  2456. 1094: eb000898 bl 32fc <close>
  2457. if(read(fd, buf, sizeof(buf)) != 5){
  2458. 1098: e1a00004 mov r0, r4
  2459. 109c: e1a01005 mov r1, r5
  2460. 10a0: e3a02a02 mov r2, #8192 ; 0x2000
  2461. 10a4: eb00087a bl 3294 <read>
  2462. 10a8: e3500005 cmp r0, #5
  2463. 10ac: 1a00001c bne 1124 <unlinkread+0x114>
  2464. printf(1, "unlinkread read failed");
  2465. exit();
  2466. }
  2467. if(buf[0] != 'h'){
  2468. 10b0: e5d53000 ldrb r3, [r5]
  2469. 10b4: e3530068 cmp r3, #104 ; 0x68
  2470. 10b8: 1a000015 bne 1114 <unlinkread+0x104>
  2471. printf(1, "unlinkread wrong data\n");
  2472. exit();
  2473. }
  2474. if(write(fd, buf, 10) != 10){
  2475. 10bc: e1a00004 mov r0, r4
  2476. 10c0: e1a01005 mov r1, r5
  2477. 10c4: e3a0200a mov r2, #10
  2478. 10c8: eb00087e bl 32c8 <write>
  2479. 10cc: e350000a cmp r0, #10
  2480. 10d0: 1a00000b bne 1104 <unlinkread+0xf4>
  2481. printf(1, "unlinkread write failed\n");
  2482. exit();
  2483. }
  2484. close(fd);
  2485. 10d4: e1a00004 mov r0, r4
  2486. 10d8: eb000887 bl 32fc <close>
  2487. unlink("unlinkread");
  2488. 10dc: e59f0074 ldr r0, [pc, #116] ; 1158 <unlinkread+0x148>
  2489. 10e0: eb0008c6 bl 3400 <unlink>
  2490. printf(1, "unlinkread ok\n");
  2491. 10e4: e3a00001 mov r0, #1
  2492. 10e8: e59f107c ldr r1, [pc, #124] ; 116c <unlinkread+0x15c>
  2493. }
  2494. 10ec: e8bd4878 pop {r3, r4, r5, r6, fp, lr}
  2495. printf(1, "unlinkread write failed\n");
  2496. exit();
  2497. }
  2498. close(fd);
  2499. unlink("unlinkread");
  2500. printf(1, "unlinkread ok\n");
  2501. 10f0: ea000993 b 3744 <printf>
  2502. int fd, fd1;
  2503. printf(1, "unlinkread test\n");
  2504. fd = open("unlinkread", O_CREATE | O_RDWR);
  2505. if(fd < 0){
  2506. printf(1, "create unlinkread failed\n");
  2507. 10f4: e3a00001 mov r0, #1
  2508. 10f8: e59f1070 ldr r1, [pc, #112] ; 1170 <unlinkread+0x160>
  2509. 10fc: eb000990 bl 3744 <printf>
  2510. exit();
  2511. 1100: eb00083c bl 31f8 <exit>
  2512. if(buf[0] != 'h'){
  2513. printf(1, "unlinkread wrong data\n");
  2514. exit();
  2515. }
  2516. if(write(fd, buf, 10) != 10){
  2517. printf(1, "unlinkread write failed\n");
  2518. 1104: e3a00001 mov r0, #1
  2519. 1108: e59f1064 ldr r1, [pc, #100] ; 1174 <unlinkread+0x164>
  2520. 110c: eb00098c bl 3744 <printf>
  2521. exit();
  2522. 1110: eb000838 bl 31f8 <exit>
  2523. if(read(fd, buf, sizeof(buf)) != 5){
  2524. printf(1, "unlinkread read failed");
  2525. exit();
  2526. }
  2527. if(buf[0] != 'h'){
  2528. printf(1, "unlinkread wrong data\n");
  2529. 1114: e3a00001 mov r0, #1
  2530. 1118: e59f1058 ldr r1, [pc, #88] ; 1178 <unlinkread+0x168>
  2531. 111c: eb000988 bl 3744 <printf>
  2532. exit();
  2533. 1120: eb000834 bl 31f8 <exit>
  2534. fd1 = open("unlinkread", O_CREATE | O_RDWR);
  2535. write(fd1, "yyy", 3);
  2536. close(fd1);
  2537. if(read(fd, buf, sizeof(buf)) != 5){
  2538. printf(1, "unlinkread read failed");
  2539. 1124: e3a00001 mov r0, #1
  2540. 1128: e59f104c ldr r1, [pc, #76] ; 117c <unlinkread+0x16c>
  2541. 112c: eb000984 bl 3744 <printf>
  2542. exit();
  2543. 1130: eb000830 bl 31f8 <exit>
  2544. if(fd < 0){
  2545. printf(1, "open unlinkread failed\n");
  2546. exit();
  2547. }
  2548. if(unlink("unlinkread") != 0){
  2549. printf(1, "unlink unlinkread failed\n");
  2550. 1134: e3a00001 mov r0, #1
  2551. 1138: e59f1040 ldr r1, [pc, #64] ; 1180 <unlinkread+0x170>
  2552. 113c: eb000980 bl 3744 <printf>
  2553. exit();
  2554. 1140: eb00082c bl 31f8 <exit>
  2555. write(fd, "hello", 5);
  2556. close(fd);
  2557. fd = open("unlinkread", O_RDWR);
  2558. if(fd < 0){
  2559. printf(1, "open unlinkread failed\n");
  2560. 1144: e3a00001 mov r0, #1
  2561. 1148: e59f1034 ldr r1, [pc, #52] ; 1184 <unlinkread+0x174>
  2562. 114c: eb00097c bl 3744 <printf>
  2563. exit();
  2564. 1150: eb000828 bl 31f8 <exit>
  2565. 1154: 00004040 .word 0x00004040
  2566. 1158: 00004054 .word 0x00004054
  2567. 115c: 00000202 .word 0x00000202
  2568. 1160: 0000407c .word 0x0000407c
  2569. 1164: 000079fc .word 0x000079fc
  2570. 1168: 000040b8 .word 0x000040b8
  2571. 116c: 00004108 .word 0x00004108
  2572. 1170: 00004060 .word 0x00004060
  2573. 1174: 000040ec .word 0x000040ec
  2574. 1178: 000040d4 .word 0x000040d4
  2575. 117c: 000040bc .word 0x000040bc
  2576. 1180: 0000409c .word 0x0000409c
  2577. 1184: 00004084 .word 0x00004084
  2578. 00001188 <linktest>:
  2579. printf(1, "unlinkread ok\n");
  2580. }
  2581. void
  2582. linktest(void)
  2583. {
  2584. 1188: e92d4818 push {r3, r4, fp, lr}
  2585. int fd;
  2586. printf(1, "linktest\n");
  2587. 118c: e3a00001 mov r0, #1
  2588. printf(1, "unlinkread ok\n");
  2589. }
  2590. void
  2591. linktest(void)
  2592. {
  2593. 1190: e28db00c add fp, sp, #12
  2594. int fd;
  2595. printf(1, "linktest\n");
  2596. 1194: e59f1180 ldr r1, [pc, #384] ; 131c <linktest+0x194>
  2597. 1198: eb000969 bl 3744 <printf>
  2598. unlink("lf1");
  2599. 119c: e59f017c ldr r0, [pc, #380] ; 1320 <linktest+0x198>
  2600. 11a0: eb000896 bl 3400 <unlink>
  2601. unlink("lf2");
  2602. 11a4: e59f0178 ldr r0, [pc, #376] ; 1324 <linktest+0x19c>
  2603. 11a8: eb000894 bl 3400 <unlink>
  2604. fd = open("lf1", O_CREATE|O_RDWR);
  2605. 11ac: e59f016c ldr r0, [pc, #364] ; 1320 <linktest+0x198>
  2606. 11b0: e59f1170 ldr r1, [pc, #368] ; 1328 <linktest+0x1a0>
  2607. 11b4: eb000877 bl 3398 <open>
  2608. if(fd < 0){
  2609. 11b8: e2504000 subs r4, r0, #0
  2610. 11bc: ba000033 blt 1290 <linktest+0x108>
  2611. printf(1, "create lf1 failed\n");
  2612. exit();
  2613. }
  2614. if(write(fd, "hello", 5) != 5){
  2615. 11c0: e59f1164 ldr r1, [pc, #356] ; 132c <linktest+0x1a4>
  2616. 11c4: e3a02005 mov r2, #5
  2617. 11c8: eb00083e bl 32c8 <write>
  2618. 11cc: e3500005 cmp r0, #5
  2619. 11d0: 1a00004d bne 130c <linktest+0x184>
  2620. printf(1, "write lf1 failed\n");
  2621. exit();
  2622. }
  2623. close(fd);
  2624. 11d4: e1a00004 mov r0, r4
  2625. 11d8: eb000847 bl 32fc <close>
  2626. if(link("lf1", "lf2") < 0){
  2627. 11dc: e59f013c ldr r0, [pc, #316] ; 1320 <linktest+0x198>
  2628. 11e0: e59f113c ldr r1, [pc, #316] ; 1324 <linktest+0x19c>
  2629. 11e4: eb00089f bl 3468 <link>
  2630. 11e8: e3500000 cmp r0, #0
  2631. 11ec: ba000042 blt 12fc <linktest+0x174>
  2632. printf(1, "link lf1 lf2 failed\n");
  2633. exit();
  2634. }
  2635. unlink("lf1");
  2636. 11f0: e59f0128 ldr r0, [pc, #296] ; 1320 <linktest+0x198>
  2637. 11f4: eb000881 bl 3400 <unlink>
  2638. if(open("lf1", 0) >= 0){
  2639. 11f8: e59f0120 ldr r0, [pc, #288] ; 1320 <linktest+0x198>
  2640. 11fc: e3a01000 mov r1, #0
  2641. 1200: eb000864 bl 3398 <open>
  2642. 1204: e3500000 cmp r0, #0
  2643. 1208: aa000037 bge 12ec <linktest+0x164>
  2644. printf(1, "unlinked lf1 but it is still there!\n");
  2645. exit();
  2646. }
  2647. fd = open("lf2", 0);
  2648. 120c: e59f0110 ldr r0, [pc, #272] ; 1324 <linktest+0x19c>
  2649. 1210: e3a01000 mov r1, #0
  2650. 1214: eb00085f bl 3398 <open>
  2651. if(fd < 0){
  2652. 1218: e2504000 subs r4, r0, #0
  2653. 121c: ba00002e blt 12dc <linktest+0x154>
  2654. printf(1, "open lf2 failed\n");
  2655. exit();
  2656. }
  2657. if(read(fd, buf, sizeof(buf)) != 5){
  2658. 1220: e59f1108 ldr r1, [pc, #264] ; 1330 <linktest+0x1a8>
  2659. 1224: e3a02a02 mov r2, #8192 ; 0x2000
  2660. 1228: eb000819 bl 3294 <read>
  2661. 122c: e3500005 cmp r0, #5
  2662. 1230: 1a000025 bne 12cc <linktest+0x144>
  2663. printf(1, "read lf2 failed\n");
  2664. exit();
  2665. }
  2666. close(fd);
  2667. 1234: e1a00004 mov r0, r4
  2668. 1238: eb00082f bl 32fc <close>
  2669. if(link("lf2", "lf2") >= 0){
  2670. 123c: e59f00e0 ldr r0, [pc, #224] ; 1324 <linktest+0x19c>
  2671. 1240: e1a01000 mov r1, r0
  2672. 1244: eb000887 bl 3468 <link>
  2673. 1248: e3500000 cmp r0, #0
  2674. 124c: aa00001a bge 12bc <linktest+0x134>
  2675. printf(1, "link lf2 lf2 succeeded! oops\n");
  2676. exit();
  2677. }
  2678. unlink("lf2");
  2679. 1250: e59f00cc ldr r0, [pc, #204] ; 1324 <linktest+0x19c>
  2680. 1254: eb000869 bl 3400 <unlink>
  2681. if(link("lf2", "lf1") >= 0){
  2682. 1258: e59f00c4 ldr r0, [pc, #196] ; 1324 <linktest+0x19c>
  2683. 125c: e59f10bc ldr r1, [pc, #188] ; 1320 <linktest+0x198>
  2684. 1260: eb000880 bl 3468 <link>
  2685. 1264: e3500000 cmp r0, #0
  2686. 1268: aa00000f bge 12ac <linktest+0x124>
  2687. printf(1, "link non-existant succeeded! oops\n");
  2688. exit();
  2689. }
  2690. if(link(".", "lf1") >= 0){
  2691. 126c: e59f00c0 ldr r0, [pc, #192] ; 1334 <linktest+0x1ac>
  2692. 1270: e59f10a8 ldr r1, [pc, #168] ; 1320 <linktest+0x198>
  2693. 1274: eb00087b bl 3468 <link>
  2694. 1278: e3500000 cmp r0, #0
  2695. printf(1, "link . lf1 succeeded! oops\n");
  2696. 127c: e3a00001 mov r0, #1
  2697. if(link("lf2", "lf1") >= 0){
  2698. printf(1, "link non-existant succeeded! oops\n");
  2699. exit();
  2700. }
  2701. if(link(".", "lf1") >= 0){
  2702. 1280: aa000006 bge 12a0 <linktest+0x118>
  2703. printf(1, "link . lf1 succeeded! oops\n");
  2704. exit();
  2705. }
  2706. printf(1, "linktest ok\n");
  2707. 1284: e59f10ac ldr r1, [pc, #172] ; 1338 <linktest+0x1b0>
  2708. }
  2709. 1288: e8bd4818 pop {r3, r4, fp, lr}
  2710. if(link(".", "lf1") >= 0){
  2711. printf(1, "link . lf1 succeeded! oops\n");
  2712. exit();
  2713. }
  2714. printf(1, "linktest ok\n");
  2715. 128c: ea00092c b 3744 <printf>
  2716. unlink("lf1");
  2717. unlink("lf2");
  2718. fd = open("lf1", O_CREATE|O_RDWR);
  2719. if(fd < 0){
  2720. printf(1, "create lf1 failed\n");
  2721. 1290: e3a00001 mov r0, #1
  2722. 1294: e59f10a0 ldr r1, [pc, #160] ; 133c <linktest+0x1b4>
  2723. 1298: eb000929 bl 3744 <printf>
  2724. exit();
  2725. 129c: eb0007d5 bl 31f8 <exit>
  2726. printf(1, "link non-existant succeeded! oops\n");
  2727. exit();
  2728. }
  2729. if(link(".", "lf1") >= 0){
  2730. printf(1, "link . lf1 succeeded! oops\n");
  2731. 12a0: e59f1098 ldr r1, [pc, #152] ; 1340 <linktest+0x1b8>
  2732. 12a4: eb000926 bl 3744 <printf>
  2733. exit();
  2734. 12a8: eb0007d2 bl 31f8 <exit>
  2735. exit();
  2736. }
  2737. unlink("lf2");
  2738. if(link("lf2", "lf1") >= 0){
  2739. printf(1, "link non-existant succeeded! oops\n");
  2740. 12ac: e3a00001 mov r0, #1
  2741. 12b0: e59f108c ldr r1, [pc, #140] ; 1344 <linktest+0x1bc>
  2742. 12b4: eb000922 bl 3744 <printf>
  2743. exit();
  2744. 12b8: eb0007ce bl 31f8 <exit>
  2745. exit();
  2746. }
  2747. close(fd);
  2748. if(link("lf2", "lf2") >= 0){
  2749. printf(1, "link lf2 lf2 succeeded! oops\n");
  2750. 12bc: e3a00001 mov r0, #1
  2751. 12c0: e59f1080 ldr r1, [pc, #128] ; 1348 <linktest+0x1c0>
  2752. 12c4: eb00091e bl 3744 <printf>
  2753. exit();
  2754. 12c8: eb0007ca bl 31f8 <exit>
  2755. if(fd < 0){
  2756. printf(1, "open lf2 failed\n");
  2757. exit();
  2758. }
  2759. if(read(fd, buf, sizeof(buf)) != 5){
  2760. printf(1, "read lf2 failed\n");
  2761. 12cc: e3a00001 mov r0, #1
  2762. 12d0: e59f1074 ldr r1, [pc, #116] ; 134c <linktest+0x1c4>
  2763. 12d4: eb00091a bl 3744 <printf>
  2764. exit();
  2765. 12d8: eb0007c6 bl 31f8 <exit>
  2766. exit();
  2767. }
  2768. fd = open("lf2", 0);
  2769. if(fd < 0){
  2770. printf(1, "open lf2 failed\n");
  2771. 12dc: e3a00001 mov r0, #1
  2772. 12e0: e59f1068 ldr r1, [pc, #104] ; 1350 <linktest+0x1c8>
  2773. 12e4: eb000916 bl 3744 <printf>
  2774. exit();
  2775. 12e8: eb0007c2 bl 31f8 <exit>
  2776. exit();
  2777. }
  2778. unlink("lf1");
  2779. if(open("lf1", 0) >= 0){
  2780. printf(1, "unlinked lf1 but it is still there!\n");
  2781. 12ec: e3a00001 mov r0, #1
  2782. 12f0: e59f105c ldr r1, [pc, #92] ; 1354 <linktest+0x1cc>
  2783. 12f4: eb000912 bl 3744 <printf>
  2784. exit();
  2785. 12f8: eb0007be bl 31f8 <exit>
  2786. exit();
  2787. }
  2788. close(fd);
  2789. if(link("lf1", "lf2") < 0){
  2790. printf(1, "link lf1 lf2 failed\n");
  2791. 12fc: e3a00001 mov r0, #1
  2792. 1300: e59f1050 ldr r1, [pc, #80] ; 1358 <linktest+0x1d0>
  2793. 1304: eb00090e bl 3744 <printf>
  2794. exit();
  2795. 1308: eb0007ba bl 31f8 <exit>
  2796. if(fd < 0){
  2797. printf(1, "create lf1 failed\n");
  2798. exit();
  2799. }
  2800. if(write(fd, "hello", 5) != 5){
  2801. printf(1, "write lf1 failed\n");
  2802. 130c: e3a00001 mov r0, #1
  2803. 1310: e59f1044 ldr r1, [pc, #68] ; 135c <linktest+0x1d4>
  2804. 1314: eb00090a bl 3744 <printf>
  2805. exit();
  2806. 1318: eb0007b6 bl 31f8 <exit>
  2807. 131c: 00004118 .word 0x00004118
  2808. 1320: 00004124 .word 0x00004124
  2809. 1324: 00004128 .word 0x00004128
  2810. 1328: 00000202 .word 0x00000202
  2811. 132c: 0000407c .word 0x0000407c
  2812. 1330: 000079fc .word 0x000079fc
  2813. 1334: 00004200 .word 0x00004200
  2814. 1338: 00004220 .word 0x00004220
  2815. 133c: 0000412c .word 0x0000412c
  2816. 1340: 00004204 .word 0x00004204
  2817. 1344: 000041dc .word 0x000041dc
  2818. 1348: 000041bc .word 0x000041bc
  2819. 134c: 000041a8 .word 0x000041a8
  2820. 1350: 00004194 .word 0x00004194
  2821. 1354: 0000416c .word 0x0000416c
  2822. 1358: 00004154 .word 0x00004154
  2823. 135c: 00004140 .word 0x00004140
  2824. 00001360 <concreate>:
  2825. }
  2826. // test concurrent create/link/unlink of the same file
  2827. void
  2828. concreate(void)
  2829. {
  2830. 1360: e92d49f0 push {r4, r5, r6, r7, r8, fp, lr}
  2831. 1364: e28db018 add fp, sp, #24
  2832. 1368: e24dd044 sub sp, sp, #68 ; 0x44
  2833. struct {
  2834. ushort inum;
  2835. char name[14];
  2836. } de;
  2837. printf(1, "concreate test\n");
  2838. 136c: e3a00001 mov r0, #1
  2839. 1370: e59f12dc ldr r1, [pc, #732] ; 1654 <concreate+0x2f4>
  2840. 1374: eb0008f2 bl 3744 <printf>
  2841. file[0] = 'C';
  2842. file[2] = '\0';
  2843. 1378: e3a03000 mov r3, #0
  2844. ushort inum;
  2845. char name[14];
  2846. } de;
  2847. printf(1, "concreate test\n");
  2848. file[0] = 'C';
  2849. 137c: e3a02043 mov r2, #67 ; 0x43
  2850. file[1] = '0' + i;
  2851. unlink(file);
  2852. pid = fork();
  2853. if(pid && (i % 3) == 1){
  2854. link("C0", file);
  2855. } else if(pid == 0 && (i % 5) == 1){
  2856. 1380: e59f72d0 ldr r7, [pc, #720] ; 1658 <concreate+0x2f8>
  2857. file[2] = '\0';
  2858. for(i = 0; i < 40; i++){
  2859. file[1] = '0' + i;
  2860. unlink(file);
  2861. pid = fork();
  2862. if(pid && (i % 3) == 1){
  2863. 1384: e59f82d0 ldr r8, [pc, #720] ; 165c <concreate+0x2fc>
  2864. char name[14];
  2865. } de;
  2866. printf(1, "concreate test\n");
  2867. file[0] = 'C';
  2868. file[2] = '\0';
  2869. 1388: e3a05030 mov r5, #48 ; 0x30
  2870. for(i = 0; i < 40; i++){
  2871. 138c: e1a04003 mov r4, r3
  2872. ushort inum;
  2873. char name[14];
  2874. } de;
  2875. printf(1, "concreate test\n");
  2876. file[0] = 'C';
  2877. 1390: e54b2020 strb r2, [fp, #-32]
  2878. file[2] = '\0';
  2879. 1394: e54b301e strb r3, [fp, #-30]
  2880. 1398: ea000013 b 13ec <concreate+0x8c>
  2881. for(i = 0; i < 40; i++){
  2882. file[1] = '0' + i;
  2883. unlink(file);
  2884. pid = fork();
  2885. if(pid && (i % 3) == 1){
  2886. 139c: e0c32498 smull r2, r3, r8, r4
  2887. 13a0: e0433fc4 sub r3, r3, r4, asr #31
  2888. 13a4: e0833083 add r3, r3, r3, lsl #1
  2889. 13a8: e0633004 rsb r3, r3, r4
  2890. 13ac: e3530001 cmp r3, #1
  2891. 13b0: 0a00001e beq 1430 <concreate+0xd0>
  2892. link("C0", file);
  2893. } else if(pid == 0 && (i % 5) == 1){
  2894. link("C0", file);
  2895. } else {
  2896. fd = open(file, O_CREATE | O_RDWR);
  2897. 13b4: e24b0020 sub r0, fp, #32
  2898. 13b8: e59f12a0 ldr r1, [pc, #672] ; 1660 <concreate+0x300>
  2899. 13bc: eb0007f5 bl 3398 <open>
  2900. if(fd < 0){
  2901. 13c0: e3500000 cmp r0, #0
  2902. 13c4: ba00008f blt 1608 <concreate+0x2a8>
  2903. printf(1, "concreate create %s failed\n", file);
  2904. exit();
  2905. }
  2906. close(fd);
  2907. 13c8: eb0007cb bl 32fc <close>
  2908. }
  2909. if(pid == 0)
  2910. 13cc: e3560000 cmp r6, #0
  2911. 13d0: 0a000015 beq 142c <concreate+0xcc>
  2912. } de;
  2913. printf(1, "concreate test\n");
  2914. file[0] = 'C';
  2915. file[2] = '\0';
  2916. for(i = 0; i < 40; i++){
  2917. 13d4: e2844001 add r4, r4, #1
  2918. 13d8: e2855001 add r5, r5, #1
  2919. close(fd);
  2920. }
  2921. if(pid == 0)
  2922. exit();
  2923. else
  2924. wait();
  2925. 13dc: eb000792 bl 322c <wait>
  2926. } de;
  2927. printf(1, "concreate test\n");
  2928. file[0] = 'C';
  2929. file[2] = '\0';
  2930. for(i = 0; i < 40; i++){
  2931. 13e0: e3540028 cmp r4, #40 ; 0x28
  2932. 13e4: e6ef5075 uxtb r5, r5
  2933. 13e8: 0a000019 beq 1454 <concreate+0xf4>
  2934. file[1] = '0' + i;
  2935. unlink(file);
  2936. 13ec: e24b0020 sub r0, fp, #32
  2937. printf(1, "concreate test\n");
  2938. file[0] = 'C';
  2939. file[2] = '\0';
  2940. for(i = 0; i < 40; i++){
  2941. file[1] = '0' + i;
  2942. 13f0: e54b501f strb r5, [fp, #-31]
  2943. unlink(file);
  2944. 13f4: eb000801 bl 3400 <unlink>
  2945. pid = fork();
  2946. 13f8: eb000771 bl 31c4 <fork>
  2947. if(pid && (i % 3) == 1){
  2948. 13fc: e2506000 subs r6, r0, #0
  2949. 1400: 1affffe5 bne 139c <concreate+0x3c>
  2950. link("C0", file);
  2951. } else if(pid == 0 && (i % 5) == 1){
  2952. 1404: e0c23497 smull r3, r2, r7, r4
  2953. 1408: e1a03fc4 asr r3, r4, #31
  2954. 140c: e06330c2 rsb r3, r3, r2, asr #1
  2955. 1410: e0833103 add r3, r3, r3, lsl #2
  2956. 1414: e0633004 rsb r3, r3, r4
  2957. 1418: e3530001 cmp r3, #1
  2958. 141c: 1affffe4 bne 13b4 <concreate+0x54>
  2959. link("C0", file);
  2960. 1420: e24b1020 sub r1, fp, #32
  2961. 1424: e59f0238 ldr r0, [pc, #568] ; 1664 <concreate+0x304>
  2962. 1428: eb00080e bl 3468 <link>
  2963. continue;
  2964. if(de.name[0] == 'C' && de.name[2] == '\0'){
  2965. i = de.name[1] - '0';
  2966. if(i < 0 || i >= sizeof(fa)){
  2967. printf(1, "concreate weird file %s\n", de.name);
  2968. exit();
  2969. 142c: eb000771 bl 31f8 <exit>
  2970. for(i = 0; i < 40; i++){
  2971. file[1] = '0' + i;
  2972. unlink(file);
  2973. pid = fork();
  2974. if(pid && (i % 3) == 1){
  2975. link("C0", file);
  2976. 1430: e24b1020 sub r1, fp, #32
  2977. 1434: e59f0228 ldr r0, [pc, #552] ; 1664 <concreate+0x304>
  2978. } de;
  2979. printf(1, "concreate test\n");
  2980. file[0] = 'C';
  2981. file[2] = '\0';
  2982. for(i = 0; i < 40; i++){
  2983. 1438: e2844001 add r4, r4, #1
  2984. 143c: e2855001 add r5, r5, #1
  2985. file[1] = '0' + i;
  2986. unlink(file);
  2987. pid = fork();
  2988. if(pid && (i % 3) == 1){
  2989. link("C0", file);
  2990. 1440: eb000808 bl 3468 <link>
  2991. close(fd);
  2992. }
  2993. if(pid == 0)
  2994. exit();
  2995. else
  2996. wait();
  2997. 1444: eb000778 bl 322c <wait>
  2998. } de;
  2999. printf(1, "concreate test\n");
  3000. file[0] = 'C';
  3001. file[2] = '\0';
  3002. for(i = 0; i < 40; i++){
  3003. 1448: e3540028 cmp r4, #40 ; 0x28
  3004. 144c: e6ef5075 uxtb r5, r5
  3005. 1450: 1affffe5 bne 13ec <concreate+0x8c>
  3006. exit();
  3007. else
  3008. wait();
  3009. }
  3010. memset(fa, 0, sizeof(fa));
  3011. 1454: e1a02004 mov r2, r4
  3012. 1458: e3a01000 mov r1, #0
  3013. 145c: e24b0058 sub r0, fp, #88 ; 0x58
  3014. 1460: eb0006e9 bl 300c <memset>
  3015. fd = open(".", 0);
  3016. 1464: e59f01fc ldr r0, [pc, #508] ; 1668 <concreate+0x308>
  3017. 1468: e3a01000 mov r1, #0
  3018. 146c: eb0007c9 bl 3398 <open>
  3019. n = 0;
  3020. 1470: e3a05000 mov r5, #0
  3021. }
  3022. if(fa[i]){
  3023. printf(1, "concreate duplicate file %s\n", de.name);
  3024. exit();
  3025. }
  3026. fa[i] = 1;
  3027. 1474: e3a06001 mov r6, #1
  3028. else
  3029. wait();
  3030. }
  3031. memset(fa, 0, sizeof(fa));
  3032. fd = open(".", 0);
  3033. 1478: e1a04000 mov r4, r0
  3034. n = 0;
  3035. while(read(fd, &de, sizeof(de)) > 0){
  3036. 147c: e1a00004 mov r0, r4
  3037. 1480: e24b1030 sub r1, fp, #48 ; 0x30
  3038. 1484: e3a02010 mov r2, #16
  3039. 1488: eb000781 bl 3294 <read>
  3040. 148c: e3500000 cmp r0, #0
  3041. 1490: da000019 ble 14fc <concreate+0x19c>
  3042. if(de.inum == 0)
  3043. 1494: e15b33b0 ldrh r3, [fp, #-48] ; 0xffffffd0
  3044. 1498: e3530000 cmp r3, #0
  3045. 149c: 0afffff6 beq 147c <concreate+0x11c>
  3046. continue;
  3047. if(de.name[0] == 'C' && de.name[2] == '\0'){
  3048. 14a0: e55b302e ldrb r3, [fp, #-46] ; 0x2e
  3049. 14a4: e3530043 cmp r3, #67 ; 0x43
  3050. 14a8: 1afffff3 bne 147c <concreate+0x11c>
  3051. 14ac: e55b302c ldrb r3, [fp, #-44] ; 0x2c
  3052. 14b0: e3530000 cmp r3, #0
  3053. 14b4: 1afffff0 bne 147c <concreate+0x11c>
  3054. i = de.name[1] - '0';
  3055. 14b8: e55b302d ldrb r3, [fp, #-45] ; 0x2d
  3056. 14bc: e2433030 sub r3, r3, #48 ; 0x30
  3057. if(i < 0 || i >= sizeof(fa)){
  3058. 14c0: e3530027 cmp r3, #39 ; 0x27
  3059. 14c4: 8a00005d bhi 1640 <concreate+0x2e0>
  3060. printf(1, "concreate weird file %s\n", de.name);
  3061. exit();
  3062. }
  3063. if(fa[i]){
  3064. 14c8: e24b201c sub r2, fp, #28
  3065. 14cc: e0823003 add r3, r2, r3
  3066. 14d0: e553203c ldrb r2, [r3, #-60] ; 0x3c
  3067. 14d4: e3520000 cmp r2, #0
  3068. 14d8: 1a000053 bne 162c <concreate+0x2cc>
  3069. printf(1, "concreate duplicate file %s\n", de.name);
  3070. exit();
  3071. }
  3072. fa[i] = 1;
  3073. 14dc: e543603c strb r6, [r3, #-60] ; 0x3c
  3074. }
  3075. memset(fa, 0, sizeof(fa));
  3076. fd = open(".", 0);
  3077. n = 0;
  3078. while(read(fd, &de, sizeof(de)) > 0){
  3079. 14e0: e1a00004 mov r0, r4
  3080. 14e4: e24b1030 sub r1, fp, #48 ; 0x30
  3081. 14e8: e3a02010 mov r2, #16
  3082. 14ec: eb000768 bl 3294 <read>
  3083. if(fa[i]){
  3084. printf(1, "concreate duplicate file %s\n", de.name);
  3085. exit();
  3086. }
  3087. fa[i] = 1;
  3088. n++;
  3089. 14f0: e2855001 add r5, r5, #1
  3090. }
  3091. memset(fa, 0, sizeof(fa));
  3092. fd = open(".", 0);
  3093. n = 0;
  3094. while(read(fd, &de, sizeof(de)) > 0){
  3095. 14f4: e3500000 cmp r0, #0
  3096. 14f8: caffffe5 bgt 1494 <concreate+0x134>
  3097. }
  3098. fa[i] = 1;
  3099. n++;
  3100. }
  3101. }
  3102. close(fd);
  3103. 14fc: e1a00004 mov r0, r4
  3104. 1500: eb00077d bl 32fc <close>
  3105. if(n != 40){
  3106. 1504: e3550028 cmp r5, #40 ; 0x28
  3107. 1508: 1a000043 bne 161c <concreate+0x2bc>
  3108. pid = fork();
  3109. if(pid < 0){
  3110. printf(1, "fork failed\n");
  3111. exit();
  3112. }
  3113. if(((i % 3) == 0 && pid == 0) ||
  3114. 150c: e59f7148 ldr r7, [pc, #328] ; 165c <concreate+0x2fc>
  3115. n++;
  3116. }
  3117. }
  3118. close(fd);
  3119. if(n != 40){
  3120. 1510: e3a06030 mov r6, #48 ; 0x30
  3121. 1514: e3a04000 mov r4, #0
  3122. 1518: ea000017 b 157c <concreate+0x21c>
  3123. printf(1, "fork failed\n");
  3124. exit();
  3125. }
  3126. if(((i % 3) == 0 && pid == 0) ||
  3127. ((i % 3) == 1 && pid != 0)){
  3128. close(open(file, 0));
  3129. 151c: e3a01000 mov r1, #0
  3130. 1520: e24b0020 sub r0, fp, #32
  3131. 1524: eb00079b bl 3398 <open>
  3132. 1528: eb000773 bl 32fc <close>
  3133. close(open(file, 0));
  3134. 152c: e3a01000 mov r1, #0
  3135. 1530: e24b0020 sub r0, fp, #32
  3136. 1534: eb000797 bl 3398 <open>
  3137. 1538: eb00076f bl 32fc <close>
  3138. close(open(file, 0));
  3139. 153c: e3a01000 mov r1, #0
  3140. 1540: e24b0020 sub r0, fp, #32
  3141. 1544: eb000793 bl 3398 <open>
  3142. 1548: eb00076b bl 32fc <close>
  3143. close(open(file, 0));
  3144. 154c: e3a01000 mov r1, #0
  3145. 1550: e24b0020 sub r0, fp, #32
  3146. 1554: eb00078f bl 3398 <open>
  3147. 1558: eb000767 bl 32fc <close>
  3148. unlink(file);
  3149. unlink(file);
  3150. unlink(file);
  3151. unlink(file);
  3152. }
  3153. if(pid == 0)
  3154. 155c: e3550000 cmp r5, #0
  3155. 1560: 0affffb1 beq 142c <concreate+0xcc>
  3156. if(n != 40){
  3157. printf(1, "concreate not enough files in directory listing\n");
  3158. exit();
  3159. }
  3160. for(i = 0; i < 40; i++){
  3161. 1564: e2844001 add r4, r4, #1
  3162. 1568: e2866001 add r6, r6, #1
  3163. unlink(file);
  3164. }
  3165. if(pid == 0)
  3166. exit();
  3167. else
  3168. wait();
  3169. 156c: eb00072e bl 322c <wait>
  3170. if(n != 40){
  3171. printf(1, "concreate not enough files in directory listing\n");
  3172. exit();
  3173. }
  3174. for(i = 0; i < 40; i++){
  3175. 1570: e3540028 cmp r4, #40 ; 0x28
  3176. 1574: e6ef6076 uxtb r6, r6
  3177. 1578: 0a000019 beq 15e4 <concreate+0x284>
  3178. file[1] = '0' + i;
  3179. 157c: e54b601f strb r6, [fp, #-31]
  3180. pid = fork();
  3181. 1580: eb00070f bl 31c4 <fork>
  3182. if(pid < 0){
  3183. 1584: e2505000 subs r5, r0, #0
  3184. 1588: ba00001a blt 15f8 <concreate+0x298>
  3185. printf(1, "fork failed\n");
  3186. exit();
  3187. }
  3188. if(((i % 3) == 0 && pid == 0) ||
  3189. 158c: e0c32497 smull r2, r3, r7, r4
  3190. 1590: e0433fc4 sub r3, r3, r4, asr #31
  3191. 1594: e0833083 add r3, r3, r3, lsl #1
  3192. 1598: e0633004 rsb r3, r3, r4
  3193. 159c: e1932005 orrs r2, r3, r5
  3194. 15a0: 0affffdd beq 151c <concreate+0x1bc>
  3195. 15a4: e2432001 sub r2, r3, #1
  3196. 15a8: e2723000 rsbs r3, r2, #0
  3197. 15ac: e0a33002 adc r3, r3, r2
  3198. 15b0: e3550000 cmp r5, #0
  3199. 15b4: 03a03000 moveq r3, #0
  3200. 15b8: e3530000 cmp r3, #0
  3201. 15bc: 1affffd6 bne 151c <concreate+0x1bc>
  3202. close(open(file, 0));
  3203. close(open(file, 0));
  3204. close(open(file, 0));
  3205. close(open(file, 0));
  3206. } else {
  3207. unlink(file);
  3208. 15c0: e24b0020 sub r0, fp, #32
  3209. 15c4: eb00078d bl 3400 <unlink>
  3210. unlink(file);
  3211. 15c8: e24b0020 sub r0, fp, #32
  3212. 15cc: eb00078b bl 3400 <unlink>
  3213. unlink(file);
  3214. 15d0: e24b0020 sub r0, fp, #32
  3215. 15d4: eb000789 bl 3400 <unlink>
  3216. unlink(file);
  3217. 15d8: e24b0020 sub r0, fp, #32
  3218. 15dc: eb000787 bl 3400 <unlink>
  3219. 15e0: eaffffdd b 155c <concreate+0x1fc>
  3220. exit();
  3221. else
  3222. wait();
  3223. }
  3224. printf(1, "concreate ok\n");
  3225. 15e4: e3a00001 mov r0, #1
  3226. 15e8: e59f107c ldr r1, [pc, #124] ; 166c <concreate+0x30c>
  3227. 15ec: eb000854 bl 3744 <printf>
  3228. }
  3229. 15f0: e24bd018 sub sp, fp, #24
  3230. 15f4: e8bd89f0 pop {r4, r5, r6, r7, r8, fp, pc}
  3231. for(i = 0; i < 40; i++){
  3232. file[1] = '0' + i;
  3233. pid = fork();
  3234. if(pid < 0){
  3235. printf(1, "fork failed\n");
  3236. 15f8: e3a00001 mov r0, #1
  3237. 15fc: e59f106c ldr r1, [pc, #108] ; 1670 <concreate+0x310>
  3238. 1600: eb00084f bl 3744 <printf>
  3239. exit();
  3240. 1604: eb0006fb bl 31f8 <exit>
  3241. } else if(pid == 0 && (i % 5) == 1){
  3242. link("C0", file);
  3243. } else {
  3244. fd = open(file, O_CREATE | O_RDWR);
  3245. if(fd < 0){
  3246. printf(1, "concreate create %s failed\n", file);
  3247. 1608: e3a00001 mov r0, #1
  3248. 160c: e59f1060 ldr r1, [pc, #96] ; 1674 <concreate+0x314>
  3249. 1610: e24b2020 sub r2, fp, #32
  3250. 1614: eb00084a bl 3744 <printf>
  3251. exit();
  3252. 1618: eb0006f6 bl 31f8 <exit>
  3253. }
  3254. }
  3255. close(fd);
  3256. if(n != 40){
  3257. printf(1, "concreate not enough files in directory listing\n");
  3258. 161c: e3a00001 mov r0, #1
  3259. 1620: e59f1050 ldr r1, [pc, #80] ; 1678 <concreate+0x318>
  3260. 1624: eb000846 bl 3744 <printf>
  3261. exit();
  3262. 1628: eb0006f2 bl 31f8 <exit>
  3263. if(i < 0 || i >= sizeof(fa)){
  3264. printf(1, "concreate weird file %s\n", de.name);
  3265. exit();
  3266. }
  3267. if(fa[i]){
  3268. printf(1, "concreate duplicate file %s\n", de.name);
  3269. 162c: e3a00001 mov r0, #1
  3270. 1630: e59f1044 ldr r1, [pc, #68] ; 167c <concreate+0x31c>
  3271. 1634: e24b202e sub r2, fp, #46 ; 0x2e
  3272. 1638: eb000841 bl 3744 <printf>
  3273. exit();
  3274. 163c: eb0006ed bl 31f8 <exit>
  3275. if(de.inum == 0)
  3276. continue;
  3277. if(de.name[0] == 'C' && de.name[2] == '\0'){
  3278. i = de.name[1] - '0';
  3279. if(i < 0 || i >= sizeof(fa)){
  3280. printf(1, "concreate weird file %s\n", de.name);
  3281. 1640: e3a00001 mov r0, #1
  3282. 1644: e59f1034 ldr r1, [pc, #52] ; 1680 <concreate+0x320>
  3283. 1648: e24b202e sub r2, fp, #46 ; 0x2e
  3284. 164c: eb00083c bl 3744 <printf>
  3285. exit();
  3286. 1650: eb0006e8 bl 31f8 <exit>
  3287. 1654: 00004230 .word 0x00004230
  3288. 1658: 66666667 .word 0x66666667
  3289. 165c: 55555556 .word 0x55555556
  3290. 1660: 00000202 .word 0x00000202
  3291. 1664: 00004240 .word 0x00004240
  3292. 1668: 00004200 .word 0x00004200
  3293. 166c: 000042d0 .word 0x000042d0
  3294. 1670: 00005148 .word 0x00005148
  3295. 1674: 00004244 .word 0x00004244
  3296. 1678: 0000429c .word 0x0000429c
  3297. 167c: 0000427c .word 0x0000427c
  3298. 1680: 00004260 .word 0x00004260
  3299. 00001684 <linkunlink>:
  3300. // another concurrent link/unlink/create test,
  3301. // to look for deadlocks.
  3302. void
  3303. linkunlink()
  3304. {
  3305. 1684: e92d49f8 push {r3, r4, r5, r6, r7, r8, fp, lr}
  3306. int pid, i;
  3307. printf(1, "linkunlink test\n");
  3308. 1688: e3a00001 mov r0, #1
  3309. // another concurrent link/unlink/create test,
  3310. // to look for deadlocks.
  3311. void
  3312. linkunlink()
  3313. {
  3314. 168c: e28db01c add fp, sp, #28
  3315. int pid, i;
  3316. printf(1, "linkunlink test\n");
  3317. 1690: e59f10bc ldr r1, [pc, #188] ; 1754 <linkunlink+0xd0>
  3318. 1694: eb00082a bl 3744 <printf>
  3319. unlink("x");
  3320. 1698: e59f00b8 ldr r0, [pc, #184] ; 1758 <linkunlink+0xd4>
  3321. 169c: eb000757 bl 3400 <unlink>
  3322. pid = fork();
  3323. 16a0: eb0006c7 bl 31c4 <fork>
  3324. if(pid < 0){
  3325. 16a4: e2508000 subs r8, r0, #0
  3326. 16a8: ba000024 blt 1740 <linkunlink+0xbc>
  3327. printf(1, "fork failed\n");
  3328. exit();
  3329. }
  3330. unsigned int x = (pid ? 1 : 97);
  3331. 16ac: 13a04001 movne r4, #1
  3332. 16b0: 03a04061 moveq r4, #97 ; 0x61
  3333. for(i = 0; i < 100; i++){
  3334. x = x * 1103515245 + 12345;
  3335. 16b4: e59f70a0 ldr r7, [pc, #160] ; 175c <linkunlink+0xd8>
  3336. if((x % 3) == 0){
  3337. 16b8: e59f60a0 ldr r6, [pc, #160] ; 1760 <linkunlink+0xdc>
  3338. if(pid < 0){
  3339. printf(1, "fork failed\n");
  3340. exit();
  3341. }
  3342. unsigned int x = (pid ? 1 : 97);
  3343. 16bc: e3a05064 mov r5, #100 ; 0x64
  3344. 16c0: ea000005 b 16dc <linkunlink+0x58>
  3345. for(i = 0; i < 100; i++){
  3346. x = x * 1103515245 + 12345;
  3347. if((x % 3) == 0){
  3348. close(open("x", O_RDWR | O_CREATE));
  3349. } else if((x % 3) == 1){
  3350. 16c4: e3530001 cmp r3, #1
  3351. 16c8: 0a000018 beq 1730 <linkunlink+0xac>
  3352. link("cat", "x");
  3353. } else {
  3354. unlink("x");
  3355. 16cc: e59f0084 ldr r0, [pc, #132] ; 1758 <linkunlink+0xd4>
  3356. 16d0: eb00074a bl 3400 <unlink>
  3357. printf(1, "fork failed\n");
  3358. exit();
  3359. }
  3360. unsigned int x = (pid ? 1 : 97);
  3361. for(i = 0; i < 100; i++){
  3362. 16d4: e2555001 subs r5, r5, #1
  3363. 16d8: 0a00000d beq 1714 <linkunlink+0x90>
  3364. x = x * 1103515245 + 12345;
  3365. 16dc: e0040497 mul r4, r7, r4
  3366. 16e0: e2844a03 add r4, r4, #12288 ; 0x3000
  3367. 16e4: e2844039 add r4, r4, #57 ; 0x39
  3368. if((x % 3) == 0){
  3369. 16e8: e0832496 umull r2, r3, r6, r4
  3370. 16ec: e1a030a3 lsr r3, r3, #1
  3371. 16f0: e0833083 add r3, r3, r3, lsl #1
  3372. 16f4: e0543003 subs r3, r4, r3
  3373. 16f8: 1afffff1 bne 16c4 <linkunlink+0x40>
  3374. close(open("x", O_RDWR | O_CREATE));
  3375. 16fc: e59f1060 ldr r1, [pc, #96] ; 1764 <linkunlink+0xe0>
  3376. 1700: e59f0050 ldr r0, [pc, #80] ; 1758 <linkunlink+0xd4>
  3377. 1704: eb000723 bl 3398 <open>
  3378. 1708: eb0006fb bl 32fc <close>
  3379. printf(1, "fork failed\n");
  3380. exit();
  3381. }
  3382. unsigned int x = (pid ? 1 : 97);
  3383. for(i = 0; i < 100; i++){
  3384. 170c: e2555001 subs r5, r5, #1
  3385. 1710: 1afffff1 bne 16dc <linkunlink+0x58>
  3386. } else {
  3387. unlink("x");
  3388. }
  3389. }
  3390. if(pid)
  3391. 1714: e3580000 cmp r8, #0
  3392. 1718: 0a00000c beq 1750 <linkunlink+0xcc>
  3393. wait();
  3394. 171c: eb0006c2 bl 322c <wait>
  3395. else
  3396. exit();
  3397. printf(1, "linkunlink ok\n");
  3398. 1720: e3a00001 mov r0, #1
  3399. 1724: e59f103c ldr r1, [pc, #60] ; 1768 <linkunlink+0xe4>
  3400. }
  3401. 1728: e8bd49f8 pop {r3, r4, r5, r6, r7, r8, fp, lr}
  3402. if(pid)
  3403. wait();
  3404. else
  3405. exit();
  3406. printf(1, "linkunlink ok\n");
  3407. 172c: ea000804 b 3744 <printf>
  3408. for(i = 0; i < 100; i++){
  3409. x = x * 1103515245 + 12345;
  3410. if((x % 3) == 0){
  3411. close(open("x", O_RDWR | O_CREATE));
  3412. } else if((x % 3) == 1){
  3413. link("cat", "x");
  3414. 1730: e59f1020 ldr r1, [pc, #32] ; 1758 <linkunlink+0xd4>
  3415. 1734: e59f0030 ldr r0, [pc, #48] ; 176c <linkunlink+0xe8>
  3416. 1738: eb00074a bl 3468 <link>
  3417. 173c: eaffffe4 b 16d4 <linkunlink+0x50>
  3418. printf(1, "linkunlink test\n");
  3419. unlink("x");
  3420. pid = fork();
  3421. if(pid < 0){
  3422. printf(1, "fork failed\n");
  3423. 1740: e3a00001 mov r0, #1
  3424. 1744: e59f1024 ldr r1, [pc, #36] ; 1770 <linkunlink+0xec>
  3425. 1748: eb0007fd bl 3744 <printf>
  3426. exit();
  3427. 174c: eb0006a9 bl 31f8 <exit>
  3428. }
  3429. if(pid)
  3430. wait();
  3431. else
  3432. exit();
  3433. 1750: eb0006a8 bl 31f8 <exit>
  3434. 1754: 000042e0 .word 0x000042e0
  3435. 1758: 00004760 .word 0x00004760
  3436. 175c: 41c64e6d .word 0x41c64e6d
  3437. 1760: aaaaaaab .word 0xaaaaaaab
  3438. 1764: 00000202 .word 0x00000202
  3439. 1768: 000042f8 .word 0x000042f8
  3440. 176c: 000042f4 .word 0x000042f4
  3441. 1770: 00005148 .word 0x00005148
  3442. 00001774 <bigdir>:
  3443. }
  3444. // directory that uses indirect blocks
  3445. void
  3446. bigdir(void)
  3447. {
  3448. 1774: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  3449. 1778: e28db014 add fp, sp, #20
  3450. 177c: e24dd010 sub sp, sp, #16
  3451. int i, fd;
  3452. char name[10];
  3453. printf(1, "bigdir test\n");
  3454. 1780: e59f1104 ldr r1, [pc, #260] ; 188c <bigdir+0x118>
  3455. 1784: e3a00001 mov r0, #1
  3456. 1788: eb0007ed bl 3744 <printf>
  3457. unlink("bd");
  3458. 178c: e59f00fc ldr r0, [pc, #252] ; 1890 <bigdir+0x11c>
  3459. 1790: eb00071a bl 3400 <unlink>
  3460. fd = open("bd", O_CREATE);
  3461. 1794: e59f00f4 ldr r0, [pc, #244] ; 1890 <bigdir+0x11c>
  3462. 1798: e3a01c02 mov r1, #512 ; 0x200
  3463. 179c: eb0006fd bl 3398 <open>
  3464. if(fd < 0){
  3465. 17a0: e3500000 cmp r0, #0
  3466. 17a4: ba000034 blt 187c <bigdir+0x108>
  3467. printf(1, "bigdir create failed\n");
  3468. exit();
  3469. }
  3470. close(fd);
  3471. 17a8: eb0006d3 bl 32fc <close>
  3472. for(i = 0; i < 500; i++){
  3473. 17ac: e3a04000 mov r4, #0
  3474. name[0] = 'x';
  3475. 17b0: e3a06078 mov r6, #120 ; 0x78
  3476. name[1] = '0' + (i / 64);
  3477. name[2] = '0' + (i % 64);
  3478. name[3] = '\0';
  3479. 17b4: e1a05004 mov r5, r4
  3480. }
  3481. close(fd);
  3482. for(i = 0; i < 500; i++){
  3483. name[0] = 'x';
  3484. name[1] = '0' + (i / 64);
  3485. 17b8: e1a02344 asr r2, r4, #6
  3486. name[2] = '0' + (i % 64);
  3487. 17bc: e204303f and r3, r4, #63 ; 0x3f
  3488. }
  3489. close(fd);
  3490. for(i = 0; i < 500; i++){
  3491. name[0] = 'x';
  3492. name[1] = '0' + (i / 64);
  3493. 17c0: e2822030 add r2, r2, #48 ; 0x30
  3494. name[2] = '0' + (i % 64);
  3495. 17c4: e2833030 add r3, r3, #48 ; 0x30
  3496. name[3] = '\0';
  3497. if(link("bd", name) != 0){
  3498. 17c8: e59f00c0 ldr r0, [pc, #192] ; 1890 <bigdir+0x11c>
  3499. 17cc: e24b1020 sub r1, fp, #32
  3500. exit();
  3501. }
  3502. close(fd);
  3503. for(i = 0; i < 500; i++){
  3504. name[0] = 'x';
  3505. 17d0: e54b6020 strb r6, [fp, #-32]
  3506. name[1] = '0' + (i / 64);
  3507. 17d4: e54b201f strb r2, [fp, #-31]
  3508. name[2] = '0' + (i % 64);
  3509. 17d8: e54b301e strb r3, [fp, #-30]
  3510. name[3] = '\0';
  3511. 17dc: e54b501d strb r5, [fp, #-29]
  3512. if(link("bd", name) != 0){
  3513. 17e0: eb000720 bl 3468 <link>
  3514. 17e4: e2507000 subs r7, r0, #0
  3515. 17e8: 1a00001b bne 185c <bigdir+0xe8>
  3516. printf(1, "bigdir create failed\n");
  3517. exit();
  3518. }
  3519. close(fd);
  3520. for(i = 0; i < 500; i++){
  3521. 17ec: e2844001 add r4, r4, #1
  3522. 17f0: e3540f7d cmp r4, #500 ; 0x1f4
  3523. 17f4: 1affffef bne 17b8 <bigdir+0x44>
  3524. printf(1, "bigdir link failed\n");
  3525. exit();
  3526. }
  3527. }
  3528. unlink("bd");
  3529. 17f8: e59f0090 ldr r0, [pc, #144] ; 1890 <bigdir+0x11c>
  3530. 17fc: eb0006ff bl 3400 <unlink>
  3531. for(i = 0; i < 500; i++){
  3532. 1800: e1a04007 mov r4, r7
  3533. name[0] = 'x';
  3534. 1804: e3a06078 mov r6, #120 ; 0x78
  3535. name[1] = '0' + (i / 64);
  3536. name[2] = '0' + (i % 64);
  3537. name[3] = '\0';
  3538. 1808: e1a05007 mov r5, r7
  3539. }
  3540. unlink("bd");
  3541. for(i = 0; i < 500; i++){
  3542. name[0] = 'x';
  3543. name[1] = '0' + (i / 64);
  3544. 180c: e1a02344 asr r2, r4, #6
  3545. name[2] = '0' + (i % 64);
  3546. 1810: e204303f and r3, r4, #63 ; 0x3f
  3547. }
  3548. unlink("bd");
  3549. for(i = 0; i < 500; i++){
  3550. name[0] = 'x';
  3551. name[1] = '0' + (i / 64);
  3552. 1814: e2822030 add r2, r2, #48 ; 0x30
  3553. name[2] = '0' + (i % 64);
  3554. 1818: e2833030 add r3, r3, #48 ; 0x30
  3555. name[3] = '\0';
  3556. if(unlink(name) != 0){
  3557. 181c: e24b0020 sub r0, fp, #32
  3558. }
  3559. }
  3560. unlink("bd");
  3561. for(i = 0; i < 500; i++){
  3562. name[0] = 'x';
  3563. 1820: e54b6020 strb r6, [fp, #-32]
  3564. name[1] = '0' + (i / 64);
  3565. 1824: e54b201f strb r2, [fp, #-31]
  3566. name[2] = '0' + (i % 64);
  3567. 1828: e54b301e strb r3, [fp, #-30]
  3568. name[3] = '\0';
  3569. 182c: e54b501d strb r5, [fp, #-29]
  3570. if(unlink(name) != 0){
  3571. 1830: eb0006f2 bl 3400 <unlink>
  3572. 1834: e3500000 cmp r0, #0
  3573. 1838: 1a00000b bne 186c <bigdir+0xf8>
  3574. exit();
  3575. }
  3576. }
  3577. unlink("bd");
  3578. for(i = 0; i < 500; i++){
  3579. 183c: e2844001 add r4, r4, #1
  3580. 1840: e3540f7d cmp r4, #500 ; 0x1f4
  3581. 1844: 1afffff0 bne 180c <bigdir+0x98>
  3582. printf(1, "bigdir unlink failed");
  3583. exit();
  3584. }
  3585. }
  3586. printf(1, "bigdir ok\n");
  3587. 1848: e3a00001 mov r0, #1
  3588. 184c: e59f1040 ldr r1, [pc, #64] ; 1894 <bigdir+0x120>
  3589. 1850: eb0007bb bl 3744 <printf>
  3590. }
  3591. 1854: e24bd014 sub sp, fp, #20
  3592. 1858: e8bd88f0 pop {r4, r5, r6, r7, fp, pc}
  3593. name[0] = 'x';
  3594. name[1] = '0' + (i / 64);
  3595. name[2] = '0' + (i % 64);
  3596. name[3] = '\0';
  3597. if(link("bd", name) != 0){
  3598. printf(1, "bigdir link failed\n");
  3599. 185c: e3a00001 mov r0, #1
  3600. 1860: e59f1030 ldr r1, [pc, #48] ; 1898 <bigdir+0x124>
  3601. 1864: eb0007b6 bl 3744 <printf>
  3602. exit();
  3603. 1868: eb000662 bl 31f8 <exit>
  3604. name[0] = 'x';
  3605. name[1] = '0' + (i / 64);
  3606. name[2] = '0' + (i % 64);
  3607. name[3] = '\0';
  3608. if(unlink(name) != 0){
  3609. printf(1, "bigdir unlink failed");
  3610. 186c: e3a00001 mov r0, #1
  3611. 1870: e59f1024 ldr r1, [pc, #36] ; 189c <bigdir+0x128>
  3612. 1874: eb0007b2 bl 3744 <printf>
  3613. exit();
  3614. 1878: eb00065e bl 31f8 <exit>
  3615. printf(1, "bigdir test\n");
  3616. unlink("bd");
  3617. fd = open("bd", O_CREATE);
  3618. if(fd < 0){
  3619. printf(1, "bigdir create failed\n");
  3620. 187c: e3a00001 mov r0, #1
  3621. 1880: e59f1018 ldr r1, [pc, #24] ; 18a0 <bigdir+0x12c>
  3622. 1884: eb0007ae bl 3744 <printf>
  3623. exit();
  3624. 1888: eb00065a bl 31f8 <exit>
  3625. 188c: 00004308 .word 0x00004308
  3626. 1890: 00004318 .word 0x00004318
  3627. 1894: 00004360 .word 0x00004360
  3628. 1898: 00004334 .word 0x00004334
  3629. 189c: 00004348 .word 0x00004348
  3630. 18a0: 0000431c .word 0x0000431c
  3631. 000018a4 <subdir>:
  3632. printf(1, "bigdir ok\n");
  3633. }
  3634. void
  3635. subdir(void)
  3636. {
  3637. 18a4: e92d4830 push {r4, r5, fp, lr}
  3638. int fd, cc;
  3639. printf(1, "subdir test\n");
  3640. 18a8: e3a00001 mov r0, #1
  3641. printf(1, "bigdir ok\n");
  3642. }
  3643. void
  3644. subdir(void)
  3645. {
  3646. 18ac: e28db00c add fp, sp, #12
  3647. int fd, cc;
  3648. printf(1, "subdir test\n");
  3649. 18b0: e59f1520 ldr r1, [pc, #1312] ; 1dd8 <subdir+0x534>
  3650. 18b4: eb0007a2 bl 3744 <printf>
  3651. unlink("ff");
  3652. 18b8: e59f051c ldr r0, [pc, #1308] ; 1ddc <subdir+0x538>
  3653. 18bc: eb0006cf bl 3400 <unlink>
  3654. if(mkdir("dd") != 0){
  3655. 18c0: e59f0518 ldr r0, [pc, #1304] ; 1de0 <subdir+0x53c>
  3656. 18c4: eb0006f4 bl 349c <mkdir>
  3657. 18c8: e3500000 cmp r0, #0
  3658. 18cc: 1a00010e bne 1d0c <subdir+0x468>
  3659. printf(1, "subdir mkdir dd failed\n");
  3660. exit();
  3661. }
  3662. fd = open("dd/ff", O_CREATE | O_RDWR);
  3663. 18d0: e59f050c ldr r0, [pc, #1292] ; 1de4 <subdir+0x540>
  3664. 18d4: e59f150c ldr r1, [pc, #1292] ; 1de8 <subdir+0x544>
  3665. 18d8: eb0006ae bl 3398 <open>
  3666. if(fd < 0){
  3667. 18dc: e2504000 subs r4, r0, #0
  3668. 18e0: ba000105 blt 1cfc <subdir+0x458>
  3669. printf(1, "create dd/ff failed\n");
  3670. exit();
  3671. }
  3672. write(fd, "ff", 2);
  3673. 18e4: e59f14f0 ldr r1, [pc, #1264] ; 1ddc <subdir+0x538>
  3674. 18e8: e3a02002 mov r2, #2
  3675. 18ec: eb000675 bl 32c8 <write>
  3676. close(fd);
  3677. 18f0: e1a00004 mov r0, r4
  3678. 18f4: eb000680 bl 32fc <close>
  3679. if(unlink("dd") >= 0){
  3680. 18f8: e59f04e0 ldr r0, [pc, #1248] ; 1de0 <subdir+0x53c>
  3681. 18fc: eb0006bf bl 3400 <unlink>
  3682. 1900: e3500000 cmp r0, #0
  3683. 1904: aa0000f8 bge 1cec <subdir+0x448>
  3684. printf(1, "unlink dd (non-empty dir) succeeded!\n");
  3685. exit();
  3686. }
  3687. if(mkdir("/dd/dd") != 0){
  3688. 1908: e59f04dc ldr r0, [pc, #1244] ; 1dec <subdir+0x548>
  3689. 190c: eb0006e2 bl 349c <mkdir>
  3690. 1910: e2504000 subs r4, r0, #0
  3691. 1914: 1a0000f0 bne 1cdc <subdir+0x438>
  3692. printf(1, "subdir mkdir dd/dd failed\n");
  3693. exit();
  3694. }
  3695. fd = open("dd/dd/ff", O_CREATE | O_RDWR);
  3696. 1918: e59f04d0 ldr r0, [pc, #1232] ; 1df0 <subdir+0x54c>
  3697. 191c: e59f14c4 ldr r1, [pc, #1220] ; 1de8 <subdir+0x544>
  3698. 1920: eb00069c bl 3398 <open>
  3699. if(fd < 0){
  3700. 1924: e2505000 subs r5, r0, #0
  3701. 1928: ba0000bf blt 1c2c <subdir+0x388>
  3702. printf(1, "create dd/dd/ff failed\n");
  3703. exit();
  3704. }
  3705. write(fd, "FF", 2);
  3706. 192c: e59f14c0 ldr r1, [pc, #1216] ; 1df4 <subdir+0x550>
  3707. 1930: e3a02002 mov r2, #2
  3708. 1934: eb000663 bl 32c8 <write>
  3709. close(fd);
  3710. 1938: e1a00005 mov r0, r5
  3711. 193c: eb00066e bl 32fc <close>
  3712. fd = open("dd/dd/../ff", 0);
  3713. 1940: e59f04b0 ldr r0, [pc, #1200] ; 1df8 <subdir+0x554>
  3714. 1944: e1a01004 mov r1, r4
  3715. 1948: eb000692 bl 3398 <open>
  3716. if(fd < 0){
  3717. 194c: e2505000 subs r5, r0, #0
  3718. 1950: ba0000b1 blt 1c1c <subdir+0x378>
  3719. printf(1, "open dd/dd/../ff failed\n");
  3720. exit();
  3721. }
  3722. cc = read(fd, buf, sizeof(buf));
  3723. 1954: e59f44a0 ldr r4, [pc, #1184] ; 1dfc <subdir+0x558>
  3724. 1958: e3a02a02 mov r2, #8192 ; 0x2000
  3725. 195c: e1a01004 mov r1, r4
  3726. 1960: eb00064b bl 3294 <read>
  3727. if(cc != 2 || buf[0] != 'f'){
  3728. 1964: e3500002 cmp r0, #2
  3729. 1968: 1a00008f bne 1bac <subdir+0x308>
  3730. 196c: e5d43000 ldrb r3, [r4]
  3731. 1970: e3530066 cmp r3, #102 ; 0x66
  3732. 1974: 1a00008c bne 1bac <subdir+0x308>
  3733. printf(1, "dd/dd/../ff wrong content\n");
  3734. exit();
  3735. }
  3736. close(fd);
  3737. 1978: e1a00005 mov r0, r5
  3738. 197c: eb00065e bl 32fc <close>
  3739. if(link("dd/dd/ff", "dd/dd/ffff") != 0){
  3740. 1980: e59f0468 ldr r0, [pc, #1128] ; 1df0 <subdir+0x54c>
  3741. 1984: e59f1474 ldr r1, [pc, #1140] ; 1e00 <subdir+0x55c>
  3742. 1988: eb0006b6 bl 3468 <link>
  3743. 198c: e3500000 cmp r0, #0
  3744. 1990: 1a0000ad bne 1c4c <subdir+0x3a8>
  3745. printf(1, "link dd/dd/ff dd/dd/ffff failed\n");
  3746. exit();
  3747. }
  3748. if(unlink("dd/dd/ff") != 0){
  3749. 1994: e59f0454 ldr r0, [pc, #1108] ; 1df0 <subdir+0x54c>
  3750. 1998: eb000698 bl 3400 <unlink>
  3751. 199c: e3500000 cmp r0, #0
  3752. 19a0: 1a000089 bne 1bcc <subdir+0x328>
  3753. printf(1, "unlink dd/dd/ff failed\n");
  3754. exit();
  3755. }
  3756. if(open("dd/dd/ff", O_RDONLY) >= 0){
  3757. 19a4: e59f0444 ldr r0, [pc, #1092] ; 1df0 <subdir+0x54c>
  3758. 19a8: e3a01000 mov r1, #0
  3759. 19ac: eb000679 bl 3398 <open>
  3760. 19b0: e3500000 cmp r0, #0
  3761. 19b4: aa0000c4 bge 1ccc <subdir+0x428>
  3762. printf(1, "open (unlinked) dd/dd/ff succeeded\n");
  3763. exit();
  3764. }
  3765. if(chdir("dd") != 0){
  3766. 19b8: e59f0420 ldr r0, [pc, #1056] ; 1de0 <subdir+0x53c>
  3767. 19bc: eb0006c3 bl 34d0 <chdir>
  3768. 19c0: e3500000 cmp r0, #0
  3769. 19c4: 1a0000bc bne 1cbc <subdir+0x418>
  3770. printf(1, "chdir dd failed\n");
  3771. exit();
  3772. }
  3773. if(chdir("dd/../../dd") != 0){
  3774. 19c8: e59f0434 ldr r0, [pc, #1076] ; 1e04 <subdir+0x560>
  3775. 19cc: eb0006bf bl 34d0 <chdir>
  3776. 19d0: e3500000 cmp r0, #0
  3777. 19d4: 1a000078 bne 1bbc <subdir+0x318>
  3778. printf(1, "chdir dd/../../dd failed\n");
  3779. exit();
  3780. }
  3781. if(chdir("dd/../../../dd") != 0){
  3782. 19d8: e59f0428 ldr r0, [pc, #1064] ; 1e08 <subdir+0x564>
  3783. 19dc: eb0006bb bl 34d0 <chdir>
  3784. 19e0: e3500000 cmp r0, #0
  3785. 19e4: 1a000074 bne 1bbc <subdir+0x318>
  3786. printf(1, "chdir dd/../../dd failed\n");
  3787. exit();
  3788. }
  3789. if(chdir("./..") != 0){
  3790. 19e8: e59f041c ldr r0, [pc, #1052] ; 1e0c <subdir+0x568>
  3791. 19ec: eb0006b7 bl 34d0 <chdir>
  3792. 19f0: e2504000 subs r4, r0, #0
  3793. 19f4: 1a000090 bne 1c3c <subdir+0x398>
  3794. printf(1, "chdir ./.. failed\n");
  3795. exit();
  3796. }
  3797. fd = open("dd/dd/ffff", 0);
  3798. 19f8: e59f0400 ldr r0, [pc, #1024] ; 1e00 <subdir+0x55c>
  3799. 19fc: e1a01004 mov r1, r4
  3800. 1a00: eb000664 bl 3398 <open>
  3801. if(fd < 0){
  3802. 1a04: e2505000 subs r5, r0, #0
  3803. 1a08: ba0000ee blt 1dc8 <subdir+0x524>
  3804. printf(1, "open dd/dd/ffff failed\n");
  3805. exit();
  3806. }
  3807. if(read(fd, buf, sizeof(buf)) != 2){
  3808. 1a0c: e59f13e8 ldr r1, [pc, #1000] ; 1dfc <subdir+0x558>
  3809. 1a10: e3a02a02 mov r2, #8192 ; 0x2000
  3810. 1a14: eb00061e bl 3294 <read>
  3811. 1a18: e3500002 cmp r0, #2
  3812. 1a1c: 1a0000e5 bne 1db8 <subdir+0x514>
  3813. printf(1, "read dd/dd/ffff wrong len\n");
  3814. exit();
  3815. }
  3816. close(fd);
  3817. 1a20: e1a00005 mov r0, r5
  3818. 1a24: eb000634 bl 32fc <close>
  3819. if(open("dd/dd/ff", O_RDONLY) >= 0){
  3820. 1a28: e59f03c0 ldr r0, [pc, #960] ; 1df0 <subdir+0x54c>
  3821. 1a2c: e1a01004 mov r1, r4
  3822. 1a30: eb000658 bl 3398 <open>
  3823. 1a34: e3500000 cmp r0, #0
  3824. 1a38: aa00006b bge 1bec <subdir+0x348>
  3825. printf(1, "open (unlinked) dd/dd/ff succeeded!\n");
  3826. exit();
  3827. }
  3828. if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){
  3829. 1a3c: e59f03cc ldr r0, [pc, #972] ; 1e10 <subdir+0x56c>
  3830. 1a40: e59f13a0 ldr r1, [pc, #928] ; 1de8 <subdir+0x544>
  3831. 1a44: eb000653 bl 3398 <open>
  3832. 1a48: e3500000 cmp r0, #0
  3833. 1a4c: aa000062 bge 1bdc <subdir+0x338>
  3834. printf(1, "create dd/ff/ff succeeded!\n");
  3835. exit();
  3836. }
  3837. if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){
  3838. 1a50: e59f03bc ldr r0, [pc, #956] ; 1e14 <subdir+0x570>
  3839. 1a54: e59f138c ldr r1, [pc, #908] ; 1de8 <subdir+0x544>
  3840. 1a58: eb00064e bl 3398 <open>
  3841. 1a5c: e3500000 cmp r0, #0
  3842. 1a60: aa000091 bge 1cac <subdir+0x408>
  3843. printf(1, "create dd/xx/ff succeeded!\n");
  3844. exit();
  3845. }
  3846. if(open("dd", O_CREATE) >= 0){
  3847. 1a64: e59f0374 ldr r0, [pc, #884] ; 1de0 <subdir+0x53c>
  3848. 1a68: e3a01c02 mov r1, #512 ; 0x200
  3849. 1a6c: eb000649 bl 3398 <open>
  3850. 1a70: e3500000 cmp r0, #0
  3851. 1a74: aa000088 bge 1c9c <subdir+0x3f8>
  3852. printf(1, "create dd succeeded!\n");
  3853. exit();
  3854. }
  3855. if(open("dd", O_RDWR) >= 0){
  3856. 1a78: e59f0360 ldr r0, [pc, #864] ; 1de0 <subdir+0x53c>
  3857. 1a7c: e3a01002 mov r1, #2
  3858. 1a80: eb000644 bl 3398 <open>
  3859. 1a84: e3500000 cmp r0, #0
  3860. 1a88: aa00007f bge 1c8c <subdir+0x3e8>
  3861. printf(1, "open dd rdwr succeeded!\n");
  3862. exit();
  3863. }
  3864. if(open("dd", O_WRONLY) >= 0){
  3865. 1a8c: e59f034c ldr r0, [pc, #844] ; 1de0 <subdir+0x53c>
  3866. 1a90: e3a01001 mov r1, #1
  3867. 1a94: eb00063f bl 3398 <open>
  3868. 1a98: e3500000 cmp r0, #0
  3869. 1a9c: aa000076 bge 1c7c <subdir+0x3d8>
  3870. printf(1, "open dd wronly succeeded!\n");
  3871. exit();
  3872. }
  3873. if(link("dd/ff/ff", "dd/dd/xx") == 0){
  3874. 1aa0: e59f0368 ldr r0, [pc, #872] ; 1e10 <subdir+0x56c>
  3875. 1aa4: e59f136c ldr r1, [pc, #876] ; 1e18 <subdir+0x574>
  3876. 1aa8: eb00066e bl 3468 <link>
  3877. 1aac: e3500000 cmp r0, #0
  3878. 1ab0: 0a00006d beq 1c6c <subdir+0x3c8>
  3879. printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n");
  3880. exit();
  3881. }
  3882. if(link("dd/xx/ff", "dd/dd/xx") == 0){
  3883. 1ab4: e59f0358 ldr r0, [pc, #856] ; 1e14 <subdir+0x570>
  3884. 1ab8: e59f1358 ldr r1, [pc, #856] ; 1e18 <subdir+0x574>
  3885. 1abc: eb000669 bl 3468 <link>
  3886. 1ac0: e3500000 cmp r0, #0
  3887. 1ac4: 0a000064 beq 1c5c <subdir+0x3b8>
  3888. printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n");
  3889. exit();
  3890. }
  3891. if(link("dd/ff", "dd/dd/ffff") == 0){
  3892. 1ac8: e59f0314 ldr r0, [pc, #788] ; 1de4 <subdir+0x540>
  3893. 1acc: e59f132c ldr r1, [pc, #812] ; 1e00 <subdir+0x55c>
  3894. 1ad0: eb000664 bl 3468 <link>
  3895. 1ad4: e3500000 cmp r0, #0
  3896. 1ad8: 0a00004b beq 1c0c <subdir+0x368>
  3897. printf(1, "link dd/ff dd/dd/ffff succeeded!\n");
  3898. exit();
  3899. }
  3900. if(mkdir("dd/ff/ff") == 0){
  3901. 1adc: e59f032c ldr r0, [pc, #812] ; 1e10 <subdir+0x56c>
  3902. 1ae0: eb00066d bl 349c <mkdir>
  3903. 1ae4: e3500000 cmp r0, #0
  3904. 1ae8: 0a000043 beq 1bfc <subdir+0x358>
  3905. printf(1, "mkdir dd/ff/ff succeeded!\n");
  3906. exit();
  3907. }
  3908. if(mkdir("dd/xx/ff") == 0){
  3909. 1aec: e59f0320 ldr r0, [pc, #800] ; 1e14 <subdir+0x570>
  3910. 1af0: eb000669 bl 349c <mkdir>
  3911. 1af4: e3500000 cmp r0, #0
  3912. 1af8: 0a0000aa beq 1da8 <subdir+0x504>
  3913. printf(1, "mkdir dd/xx/ff succeeded!\n");
  3914. exit();
  3915. }
  3916. if(mkdir("dd/dd/ffff") == 0){
  3917. 1afc: e59f02fc ldr r0, [pc, #764] ; 1e00 <subdir+0x55c>
  3918. 1b00: eb000665 bl 349c <mkdir>
  3919. 1b04: e3500000 cmp r0, #0
  3920. 1b08: 0a0000a2 beq 1d98 <subdir+0x4f4>
  3921. printf(1, "mkdir dd/dd/ffff succeeded!\n");
  3922. exit();
  3923. }
  3924. if(unlink("dd/xx/ff") == 0){
  3925. 1b0c: e59f0300 ldr r0, [pc, #768] ; 1e14 <subdir+0x570>
  3926. 1b10: eb00063a bl 3400 <unlink>
  3927. 1b14: e3500000 cmp r0, #0
  3928. 1b18: 0a00009a beq 1d88 <subdir+0x4e4>
  3929. printf(1, "unlink dd/xx/ff succeeded!\n");
  3930. exit();
  3931. }
  3932. if(unlink("dd/ff/ff") == 0){
  3933. 1b1c: e59f02ec ldr r0, [pc, #748] ; 1e10 <subdir+0x56c>
  3934. 1b20: eb000636 bl 3400 <unlink>
  3935. 1b24: e3500000 cmp r0, #0
  3936. 1b28: 0a000092 beq 1d78 <subdir+0x4d4>
  3937. printf(1, "unlink dd/ff/ff succeeded!\n");
  3938. exit();
  3939. }
  3940. if(chdir("dd/ff") == 0){
  3941. 1b2c: e59f02b0 ldr r0, [pc, #688] ; 1de4 <subdir+0x540>
  3942. 1b30: eb000666 bl 34d0 <chdir>
  3943. 1b34: e3500000 cmp r0, #0
  3944. 1b38: 0a00008a beq 1d68 <subdir+0x4c4>
  3945. printf(1, "chdir dd/ff succeeded!\n");
  3946. exit();
  3947. }
  3948. if(chdir("dd/xx") == 0){
  3949. 1b3c: e59f02d8 ldr r0, [pc, #728] ; 1e1c <subdir+0x578>
  3950. 1b40: eb000662 bl 34d0 <chdir>
  3951. 1b44: e3500000 cmp r0, #0
  3952. 1b48: 0a000082 beq 1d58 <subdir+0x4b4>
  3953. printf(1, "chdir dd/xx succeeded!\n");
  3954. exit();
  3955. }
  3956. if(unlink("dd/dd/ffff") != 0){
  3957. 1b4c: e59f02ac ldr r0, [pc, #684] ; 1e00 <subdir+0x55c>
  3958. 1b50: eb00062a bl 3400 <unlink>
  3959. 1b54: e3500000 cmp r0, #0
  3960. 1b58: 1a00001b bne 1bcc <subdir+0x328>
  3961. printf(1, "unlink dd/dd/ff failed\n");
  3962. exit();
  3963. }
  3964. if(unlink("dd/ff") != 0){
  3965. 1b5c: e59f0280 ldr r0, [pc, #640] ; 1de4 <subdir+0x540>
  3966. 1b60: eb000626 bl 3400 <unlink>
  3967. 1b64: e3500000 cmp r0, #0
  3968. 1b68: 1a000076 bne 1d48 <subdir+0x4a4>
  3969. printf(1, "unlink dd/ff failed\n");
  3970. exit();
  3971. }
  3972. if(unlink("dd") == 0){
  3973. 1b6c: e59f026c ldr r0, [pc, #620] ; 1de0 <subdir+0x53c>
  3974. 1b70: eb000622 bl 3400 <unlink>
  3975. 1b74: e3500000 cmp r0, #0
  3976. 1b78: 0a00006e beq 1d38 <subdir+0x494>
  3977. printf(1, "unlink non-empty dd succeeded!\n");
  3978. exit();
  3979. }
  3980. if(unlink("dd/dd") < 0){
  3981. 1b7c: e59f029c ldr r0, [pc, #668] ; 1e20 <subdir+0x57c>
  3982. 1b80: eb00061e bl 3400 <unlink>
  3983. 1b84: e3500000 cmp r0, #0
  3984. 1b88: ba000066 blt 1d28 <subdir+0x484>
  3985. printf(1, "unlink dd/dd failed\n");
  3986. exit();
  3987. }
  3988. if(unlink("dd") < 0){
  3989. 1b8c: e59f024c ldr r0, [pc, #588] ; 1de0 <subdir+0x53c>
  3990. 1b90: eb00061a bl 3400 <unlink>
  3991. 1b94: e3500000 cmp r0, #0
  3992. printf(1, "unlink dd failed\n");
  3993. 1b98: e3a00001 mov r0, #1
  3994. }
  3995. if(unlink("dd/dd") < 0){
  3996. printf(1, "unlink dd/dd failed\n");
  3997. exit();
  3998. }
  3999. if(unlink("dd") < 0){
  4000. 1b9c: ba00005e blt 1d1c <subdir+0x478>
  4001. printf(1, "unlink dd failed\n");
  4002. exit();
  4003. }
  4004. printf(1, "subdir ok\n");
  4005. 1ba0: e59f127c ldr r1, [pc, #636] ; 1e24 <subdir+0x580>
  4006. }
  4007. 1ba4: e8bd4830 pop {r4, r5, fp, lr}
  4008. if(unlink("dd") < 0){
  4009. printf(1, "unlink dd failed\n");
  4010. exit();
  4011. }
  4012. printf(1, "subdir ok\n");
  4013. 1ba8: ea0006e5 b 3744 <printf>
  4014. printf(1, "open dd/dd/../ff failed\n");
  4015. exit();
  4016. }
  4017. cc = read(fd, buf, sizeof(buf));
  4018. if(cc != 2 || buf[0] != 'f'){
  4019. printf(1, "dd/dd/../ff wrong content\n");
  4020. 1bac: e3a00001 mov r0, #1
  4021. 1bb0: e59f1270 ldr r1, [pc, #624] ; 1e28 <subdir+0x584>
  4022. 1bb4: eb0006e2 bl 3744 <printf>
  4023. exit();
  4024. 1bb8: eb00058e bl 31f8 <exit>
  4025. if(chdir("dd/../../dd") != 0){
  4026. printf(1, "chdir dd/../../dd failed\n");
  4027. exit();
  4028. }
  4029. if(chdir("dd/../../../dd") != 0){
  4030. printf(1, "chdir dd/../../dd failed\n");
  4031. 1bbc: e3a00001 mov r0, #1
  4032. 1bc0: e59f1264 ldr r1, [pc, #612] ; 1e2c <subdir+0x588>
  4033. 1bc4: eb0006de bl 3744 <printf>
  4034. exit();
  4035. 1bc8: eb00058a bl 31f8 <exit>
  4036. printf(1, "chdir dd/xx succeeded!\n");
  4037. exit();
  4038. }
  4039. if(unlink("dd/dd/ffff") != 0){
  4040. printf(1, "unlink dd/dd/ff failed\n");
  4041. 1bcc: e3a00001 mov r0, #1
  4042. 1bd0: e59f1258 ldr r1, [pc, #600] ; 1e30 <subdir+0x58c>
  4043. 1bd4: eb0006da bl 3744 <printf>
  4044. exit();
  4045. 1bd8: eb000586 bl 31f8 <exit>
  4046. printf(1, "open (unlinked) dd/dd/ff succeeded!\n");
  4047. exit();
  4048. }
  4049. if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){
  4050. printf(1, "create dd/ff/ff succeeded!\n");
  4051. 1bdc: e3a00001 mov r0, #1
  4052. 1be0: e59f124c ldr r1, [pc, #588] ; 1e34 <subdir+0x590>
  4053. 1be4: eb0006d6 bl 3744 <printf>
  4054. exit();
  4055. 1be8: eb000582 bl 31f8 <exit>
  4056. exit();
  4057. }
  4058. close(fd);
  4059. if(open("dd/dd/ff", O_RDONLY) >= 0){
  4060. printf(1, "open (unlinked) dd/dd/ff succeeded!\n");
  4061. 1bec: e3a00001 mov r0, #1
  4062. 1bf0: e59f1240 ldr r1, [pc, #576] ; 1e38 <subdir+0x594>
  4063. 1bf4: eb0006d2 bl 3744 <printf>
  4064. exit();
  4065. 1bf8: eb00057e bl 31f8 <exit>
  4066. if(link("dd/ff", "dd/dd/ffff") == 0){
  4067. printf(1, "link dd/ff dd/dd/ffff succeeded!\n");
  4068. exit();
  4069. }
  4070. if(mkdir("dd/ff/ff") == 0){
  4071. printf(1, "mkdir dd/ff/ff succeeded!\n");
  4072. 1bfc: e3a00001 mov r0, #1
  4073. 1c00: e59f1234 ldr r1, [pc, #564] ; 1e3c <subdir+0x598>
  4074. 1c04: eb0006ce bl 3744 <printf>
  4075. exit();
  4076. 1c08: eb00057a bl 31f8 <exit>
  4077. if(link("dd/xx/ff", "dd/dd/xx") == 0){
  4078. printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n");
  4079. exit();
  4080. }
  4081. if(link("dd/ff", "dd/dd/ffff") == 0){
  4082. printf(1, "link dd/ff dd/dd/ffff succeeded!\n");
  4083. 1c0c: e3a00001 mov r0, #1
  4084. 1c10: e59f1228 ldr r1, [pc, #552] ; 1e40 <subdir+0x59c>
  4085. 1c14: eb0006ca bl 3744 <printf>
  4086. exit();
  4087. 1c18: eb000576 bl 31f8 <exit>
  4088. write(fd, "FF", 2);
  4089. close(fd);
  4090. fd = open("dd/dd/../ff", 0);
  4091. if(fd < 0){
  4092. printf(1, "open dd/dd/../ff failed\n");
  4093. 1c1c: e3a00001 mov r0, #1
  4094. 1c20: e59f121c ldr r1, [pc, #540] ; 1e44 <subdir+0x5a0>
  4095. 1c24: eb0006c6 bl 3744 <printf>
  4096. exit();
  4097. 1c28: eb000572 bl 31f8 <exit>
  4098. exit();
  4099. }
  4100. fd = open("dd/dd/ff", O_CREATE | O_RDWR);
  4101. if(fd < 0){
  4102. printf(1, "create dd/dd/ff failed\n");
  4103. 1c2c: e3a00001 mov r0, #1
  4104. 1c30: e59f1210 ldr r1, [pc, #528] ; 1e48 <subdir+0x5a4>
  4105. 1c34: eb0006c2 bl 3744 <printf>
  4106. exit();
  4107. 1c38: eb00056e bl 31f8 <exit>
  4108. if(chdir("dd/../../../dd") != 0){
  4109. printf(1, "chdir dd/../../dd failed\n");
  4110. exit();
  4111. }
  4112. if(chdir("./..") != 0){
  4113. printf(1, "chdir ./.. failed\n");
  4114. 1c3c: e3a00001 mov r0, #1
  4115. 1c40: e59f1204 ldr r1, [pc, #516] ; 1e4c <subdir+0x5a8>
  4116. 1c44: eb0006be bl 3744 <printf>
  4117. exit();
  4118. 1c48: eb00056a bl 31f8 <exit>
  4119. exit();
  4120. }
  4121. close(fd);
  4122. if(link("dd/dd/ff", "dd/dd/ffff") != 0){
  4123. printf(1, "link dd/dd/ff dd/dd/ffff failed\n");
  4124. 1c4c: e3a00001 mov r0, #1
  4125. 1c50: e59f11f8 ldr r1, [pc, #504] ; 1e50 <subdir+0x5ac>
  4126. 1c54: eb0006ba bl 3744 <printf>
  4127. exit();
  4128. 1c58: eb000566 bl 31f8 <exit>
  4129. if(link("dd/ff/ff", "dd/dd/xx") == 0){
  4130. printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n");
  4131. exit();
  4132. }
  4133. if(link("dd/xx/ff", "dd/dd/xx") == 0){
  4134. printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n");
  4135. 1c5c: e3a00001 mov r0, #1
  4136. 1c60: e59f11ec ldr r1, [pc, #492] ; 1e54 <subdir+0x5b0>
  4137. 1c64: eb0006b6 bl 3744 <printf>
  4138. exit();
  4139. 1c68: eb000562 bl 31f8 <exit>
  4140. if(open("dd", O_WRONLY) >= 0){
  4141. printf(1, "open dd wronly succeeded!\n");
  4142. exit();
  4143. }
  4144. if(link("dd/ff/ff", "dd/dd/xx") == 0){
  4145. printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n");
  4146. 1c6c: e3a00001 mov r0, #1
  4147. 1c70: e59f11e0 ldr r1, [pc, #480] ; 1e58 <subdir+0x5b4>
  4148. 1c74: eb0006b2 bl 3744 <printf>
  4149. exit();
  4150. 1c78: eb00055e bl 31f8 <exit>
  4151. if(open("dd", O_RDWR) >= 0){
  4152. printf(1, "open dd rdwr succeeded!\n");
  4153. exit();
  4154. }
  4155. if(open("dd", O_WRONLY) >= 0){
  4156. printf(1, "open dd wronly succeeded!\n");
  4157. 1c7c: e3a00001 mov r0, #1
  4158. 1c80: e59f11d4 ldr r1, [pc, #468] ; 1e5c <subdir+0x5b8>
  4159. 1c84: eb0006ae bl 3744 <printf>
  4160. exit();
  4161. 1c88: eb00055a bl 31f8 <exit>
  4162. if(open("dd", O_CREATE) >= 0){
  4163. printf(1, "create dd succeeded!\n");
  4164. exit();
  4165. }
  4166. if(open("dd", O_RDWR) >= 0){
  4167. printf(1, "open dd rdwr succeeded!\n");
  4168. 1c8c: e3a00001 mov r0, #1
  4169. 1c90: e59f11c8 ldr r1, [pc, #456] ; 1e60 <subdir+0x5bc>
  4170. 1c94: eb0006aa bl 3744 <printf>
  4171. exit();
  4172. 1c98: eb000556 bl 31f8 <exit>
  4173. if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){
  4174. printf(1, "create dd/xx/ff succeeded!\n");
  4175. exit();
  4176. }
  4177. if(open("dd", O_CREATE) >= 0){
  4178. printf(1, "create dd succeeded!\n");
  4179. 1c9c: e3a00001 mov r0, #1
  4180. 1ca0: e59f11bc ldr r1, [pc, #444] ; 1e64 <subdir+0x5c0>
  4181. 1ca4: eb0006a6 bl 3744 <printf>
  4182. exit();
  4183. 1ca8: eb000552 bl 31f8 <exit>
  4184. if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){
  4185. printf(1, "create dd/ff/ff succeeded!\n");
  4186. exit();
  4187. }
  4188. if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){
  4189. printf(1, "create dd/xx/ff succeeded!\n");
  4190. 1cac: e3a00001 mov r0, #1
  4191. 1cb0: e59f11b0 ldr r1, [pc, #432] ; 1e68 <subdir+0x5c4>
  4192. 1cb4: eb0006a2 bl 3744 <printf>
  4193. exit();
  4194. 1cb8: eb00054e bl 31f8 <exit>
  4195. printf(1, "open (unlinked) dd/dd/ff succeeded\n");
  4196. exit();
  4197. }
  4198. if(chdir("dd") != 0){
  4199. printf(1, "chdir dd failed\n");
  4200. 1cbc: e3a00001 mov r0, #1
  4201. 1cc0: e59f11a4 ldr r1, [pc, #420] ; 1e6c <subdir+0x5c8>
  4202. 1cc4: eb00069e bl 3744 <printf>
  4203. exit();
  4204. 1cc8: eb00054a bl 31f8 <exit>
  4205. if(unlink("dd/dd/ff") != 0){
  4206. printf(1, "unlink dd/dd/ff failed\n");
  4207. exit();
  4208. }
  4209. if(open("dd/dd/ff", O_RDONLY) >= 0){
  4210. printf(1, "open (unlinked) dd/dd/ff succeeded\n");
  4211. 1ccc: e3a00001 mov r0, #1
  4212. 1cd0: e59f1198 ldr r1, [pc, #408] ; 1e70 <subdir+0x5cc>
  4213. 1cd4: eb00069a bl 3744 <printf>
  4214. exit();
  4215. 1cd8: eb000546 bl 31f8 <exit>
  4216. printf(1, "unlink dd (non-empty dir) succeeded!\n");
  4217. exit();
  4218. }
  4219. if(mkdir("/dd/dd") != 0){
  4220. printf(1, "subdir mkdir dd/dd failed\n");
  4221. 1cdc: e3a00001 mov r0, #1
  4222. 1ce0: e59f118c ldr r1, [pc, #396] ; 1e74 <subdir+0x5d0>
  4223. 1ce4: eb000696 bl 3744 <printf>
  4224. exit();
  4225. 1ce8: eb000542 bl 31f8 <exit>
  4226. }
  4227. write(fd, "ff", 2);
  4228. close(fd);
  4229. if(unlink("dd") >= 0){
  4230. printf(1, "unlink dd (non-empty dir) succeeded!\n");
  4231. 1cec: e3a00001 mov r0, #1
  4232. 1cf0: e59f1180 ldr r1, [pc, #384] ; 1e78 <subdir+0x5d4>
  4233. 1cf4: eb000692 bl 3744 <printf>
  4234. exit();
  4235. 1cf8: eb00053e bl 31f8 <exit>
  4236. exit();
  4237. }
  4238. fd = open("dd/ff", O_CREATE | O_RDWR);
  4239. if(fd < 0){
  4240. printf(1, "create dd/ff failed\n");
  4241. 1cfc: e3a00001 mov r0, #1
  4242. 1d00: e59f1174 ldr r1, [pc, #372] ; 1e7c <subdir+0x5d8>
  4243. 1d04: eb00068e bl 3744 <printf>
  4244. exit();
  4245. 1d08: eb00053a bl 31f8 <exit>
  4246. printf(1, "subdir test\n");
  4247. unlink("ff");
  4248. if(mkdir("dd") != 0){
  4249. printf(1, "subdir mkdir dd failed\n");
  4250. 1d0c: e3a00001 mov r0, #1
  4251. 1d10: e59f1168 ldr r1, [pc, #360] ; 1e80 <subdir+0x5dc>
  4252. 1d14: eb00068a bl 3744 <printf>
  4253. exit();
  4254. 1d18: eb000536 bl 31f8 <exit>
  4255. if(unlink("dd/dd") < 0){
  4256. printf(1, "unlink dd/dd failed\n");
  4257. exit();
  4258. }
  4259. if(unlink("dd") < 0){
  4260. printf(1, "unlink dd failed\n");
  4261. 1d1c: e59f1160 ldr r1, [pc, #352] ; 1e84 <subdir+0x5e0>
  4262. 1d20: eb000687 bl 3744 <printf>
  4263. exit();
  4264. 1d24: eb000533 bl 31f8 <exit>
  4265. if(unlink("dd") == 0){
  4266. printf(1, "unlink non-empty dd succeeded!\n");
  4267. exit();
  4268. }
  4269. if(unlink("dd/dd") < 0){
  4270. printf(1, "unlink dd/dd failed\n");
  4271. 1d28: e3a00001 mov r0, #1
  4272. 1d2c: e59f1154 ldr r1, [pc, #340] ; 1e88 <subdir+0x5e4>
  4273. 1d30: eb000683 bl 3744 <printf>
  4274. exit();
  4275. 1d34: eb00052f bl 31f8 <exit>
  4276. if(unlink("dd/ff") != 0){
  4277. printf(1, "unlink dd/ff failed\n");
  4278. exit();
  4279. }
  4280. if(unlink("dd") == 0){
  4281. printf(1, "unlink non-empty dd succeeded!\n");
  4282. 1d38: e3a00001 mov r0, #1
  4283. 1d3c: e59f1148 ldr r1, [pc, #328] ; 1e8c <subdir+0x5e8>
  4284. 1d40: eb00067f bl 3744 <printf>
  4285. exit();
  4286. 1d44: eb00052b bl 31f8 <exit>
  4287. if(unlink("dd/dd/ffff") != 0){
  4288. printf(1, "unlink dd/dd/ff failed\n");
  4289. exit();
  4290. }
  4291. if(unlink("dd/ff") != 0){
  4292. printf(1, "unlink dd/ff failed\n");
  4293. 1d48: e3a00001 mov r0, #1
  4294. 1d4c: e59f113c ldr r1, [pc, #316] ; 1e90 <subdir+0x5ec>
  4295. 1d50: eb00067b bl 3744 <printf>
  4296. exit();
  4297. 1d54: eb000527 bl 31f8 <exit>
  4298. if(chdir("dd/ff") == 0){
  4299. printf(1, "chdir dd/ff succeeded!\n");
  4300. exit();
  4301. }
  4302. if(chdir("dd/xx") == 0){
  4303. printf(1, "chdir dd/xx succeeded!\n");
  4304. 1d58: e3a00001 mov r0, #1
  4305. 1d5c: e59f1130 ldr r1, [pc, #304] ; 1e94 <subdir+0x5f0>
  4306. 1d60: eb000677 bl 3744 <printf>
  4307. exit();
  4308. 1d64: eb000523 bl 31f8 <exit>
  4309. if(unlink("dd/ff/ff") == 0){
  4310. printf(1, "unlink dd/ff/ff succeeded!\n");
  4311. exit();
  4312. }
  4313. if(chdir("dd/ff") == 0){
  4314. printf(1, "chdir dd/ff succeeded!\n");
  4315. 1d68: e3a00001 mov r0, #1
  4316. 1d6c: e59f1124 ldr r1, [pc, #292] ; 1e98 <subdir+0x5f4>
  4317. 1d70: eb000673 bl 3744 <printf>
  4318. exit();
  4319. 1d74: eb00051f bl 31f8 <exit>
  4320. if(unlink("dd/xx/ff") == 0){
  4321. printf(1, "unlink dd/xx/ff succeeded!\n");
  4322. exit();
  4323. }
  4324. if(unlink("dd/ff/ff") == 0){
  4325. printf(1, "unlink dd/ff/ff succeeded!\n");
  4326. 1d78: e3a00001 mov r0, #1
  4327. 1d7c: e59f1118 ldr r1, [pc, #280] ; 1e9c <subdir+0x5f8>
  4328. 1d80: eb00066f bl 3744 <printf>
  4329. exit();
  4330. 1d84: eb00051b bl 31f8 <exit>
  4331. if(mkdir("dd/dd/ffff") == 0){
  4332. printf(1, "mkdir dd/dd/ffff succeeded!\n");
  4333. exit();
  4334. }
  4335. if(unlink("dd/xx/ff") == 0){
  4336. printf(1, "unlink dd/xx/ff succeeded!\n");
  4337. 1d88: e3a00001 mov r0, #1
  4338. 1d8c: e59f110c ldr r1, [pc, #268] ; 1ea0 <subdir+0x5fc>
  4339. 1d90: eb00066b bl 3744 <printf>
  4340. exit();
  4341. 1d94: eb000517 bl 31f8 <exit>
  4342. if(mkdir("dd/xx/ff") == 0){
  4343. printf(1, "mkdir dd/xx/ff succeeded!\n");
  4344. exit();
  4345. }
  4346. if(mkdir("dd/dd/ffff") == 0){
  4347. printf(1, "mkdir dd/dd/ffff succeeded!\n");
  4348. 1d98: e3a00001 mov r0, #1
  4349. 1d9c: e59f1100 ldr r1, [pc, #256] ; 1ea4 <subdir+0x600>
  4350. 1da0: eb000667 bl 3744 <printf>
  4351. exit();
  4352. 1da4: eb000513 bl 31f8 <exit>
  4353. if(mkdir("dd/ff/ff") == 0){
  4354. printf(1, "mkdir dd/ff/ff succeeded!\n");
  4355. exit();
  4356. }
  4357. if(mkdir("dd/xx/ff") == 0){
  4358. printf(1, "mkdir dd/xx/ff succeeded!\n");
  4359. 1da8: e3a00001 mov r0, #1
  4360. 1dac: e59f10f4 ldr r1, [pc, #244] ; 1ea8 <subdir+0x604>
  4361. 1db0: eb000663 bl 3744 <printf>
  4362. exit();
  4363. 1db4: eb00050f bl 31f8 <exit>
  4364. if(fd < 0){
  4365. printf(1, "open dd/dd/ffff failed\n");
  4366. exit();
  4367. }
  4368. if(read(fd, buf, sizeof(buf)) != 2){
  4369. printf(1, "read dd/dd/ffff wrong len\n");
  4370. 1db8: e3a00001 mov r0, #1
  4371. 1dbc: e59f10e8 ldr r1, [pc, #232] ; 1eac <subdir+0x608>
  4372. 1dc0: eb00065f bl 3744 <printf>
  4373. exit();
  4374. 1dc4: eb00050b bl 31f8 <exit>
  4375. exit();
  4376. }
  4377. fd = open("dd/dd/ffff", 0);
  4378. if(fd < 0){
  4379. printf(1, "open dd/dd/ffff failed\n");
  4380. 1dc8: e3a00001 mov r0, #1
  4381. 1dcc: e59f10dc ldr r1, [pc, #220] ; 1eb0 <subdir+0x60c>
  4382. 1dd0: eb00065b bl 3744 <printf>
  4383. exit();
  4384. 1dd4: eb000507 bl 31f8 <exit>
  4385. 1dd8: 0000436c .word 0x0000436c
  4386. 1ddc: 00004474 .word 0x00004474
  4387. 1de0: 00004520 .word 0x00004520
  4388. 1de4: 00004394 .word 0x00004394
  4389. 1de8: 00000202 .word 0x00000202
  4390. 1dec: 000043dc .word 0x000043dc
  4391. 1df0: 00004400 .word 0x00004400
  4392. 1df4: 00004424 .word 0x00004424
  4393. 1df8: 00004428 .word 0x00004428
  4394. 1dfc: 000079fc .word 0x000079fc
  4395. 1e00: 0000446c .word 0x0000446c
  4396. 1e04: 000044ec .word 0x000044ec
  4397. 1e08: 00004514 .word 0x00004514
  4398. 1e0c: 00004524 .word 0x00004524
  4399. 1e10: 0000459c .word 0x0000459c
  4400. 1e14: 000045c4 .word 0x000045c4
  4401. 1e18: 0000463c .word 0x0000463c
  4402. 1e1c: 0000475c .word 0x0000475c
  4403. 1e20: 000047b4 .word 0x000047b4
  4404. 1e24: 000047e8 .word 0x000047e8
  4405. 1e28: 00004450 .word 0x00004450
  4406. 1e2c: 000044f8 .word 0x000044f8
  4407. 1e30: 0000449c .word 0x0000449c
  4408. 1e34: 000045a8 .word 0x000045a8
  4409. 1e38: 00004574 .word 0x00004574
  4410. 1e3c: 000046b4 .word 0x000046b4
  4411. 1e40: 00004690 .word 0x00004690
  4412. 1e44: 00004434 .word 0x00004434
  4413. 1e48: 0000440c .word 0x0000440c
  4414. 1e4c: 0000452c .word 0x0000452c
  4415. 1e50: 00004478 .word 0x00004478
  4416. 1e54: 0000466c .word 0x0000466c
  4417. 1e58: 00004648 .word 0x00004648
  4418. 1e5c: 00004620 .word 0x00004620
  4419. 1e60: 00004604 .word 0x00004604
  4420. 1e64: 000045ec .word 0x000045ec
  4421. 1e68: 000045d0 .word 0x000045d0
  4422. 1e6c: 000044d8 .word 0x000044d8
  4423. 1e70: 000044b4 .word 0x000044b4
  4424. 1e74: 000043e4 .word 0x000043e4
  4425. 1e78: 000043b4 .word 0x000043b4
  4426. 1e7c: 0000439c .word 0x0000439c
  4427. 1e80: 0000437c .word 0x0000437c
  4428. 1e84: 000047d4 .word 0x000047d4
  4429. 1e88: 000047bc .word 0x000047bc
  4430. 1e8c: 00004794 .word 0x00004794
  4431. 1e90: 0000477c .word 0x0000477c
  4432. 1e94: 00004764 .word 0x00004764
  4433. 1e98: 00004744 .word 0x00004744
  4434. 1e9c: 00004728 .word 0x00004728
  4435. 1ea0: 0000470c .word 0x0000470c
  4436. 1ea4: 000046ec .word 0x000046ec
  4437. 1ea8: 000046d0 .word 0x000046d0
  4438. 1eac: 00004558 .word 0x00004558
  4439. 1eb0: 00004540 .word 0x00004540
  4440. 00001eb4 <bigwrite>:
  4441. }
  4442. // test writes that are larger than the log.
  4443. void
  4444. bigwrite(void)
  4445. {
  4446. 1eb4: e92d4878 push {r3, r4, r5, r6, fp, lr}
  4447. int fd, sz;
  4448. printf(1, "bigwrite test\n");
  4449. 1eb8: e3a00001 mov r0, #1
  4450. }
  4451. // test writes that are larger than the log.
  4452. void
  4453. bigwrite(void)
  4454. {
  4455. 1ebc: e28db014 add fp, sp, #20
  4456. int fd, sz;
  4457. printf(1, "bigwrite test\n");
  4458. 1ec0: e59f10ac ldr r1, [pc, #172] ; 1f74 <bigwrite+0xc0>
  4459. 1ec4: eb00061e bl 3744 <printf>
  4460. unlink("bigwrite");
  4461. 1ec8: e59f00a8 ldr r0, [pc, #168] ; 1f78 <bigwrite+0xc4>
  4462. 1ecc: eb00054b bl 3400 <unlink>
  4463. for(sz = 499; sz < 12*512; sz += 471){
  4464. 1ed0: e59f40a4 ldr r4, [pc, #164] ; 1f7c <bigwrite+0xc8>
  4465. 1ed4: e59f60a4 ldr r6, [pc, #164] ; 1f80 <bigwrite+0xcc>
  4466. fd = open("bigwrite", O_CREATE | O_RDWR);
  4467. 1ed8: e59f0098 ldr r0, [pc, #152] ; 1f78 <bigwrite+0xc4>
  4468. 1edc: e59f10a0 ldr r1, [pc, #160] ; 1f84 <bigwrite+0xd0>
  4469. 1ee0: eb00052c bl 3398 <open>
  4470. if(fd < 0){
  4471. 1ee4: e2505000 subs r5, r0, #0
  4472. 1ee8: ba00001d blt 1f64 <bigwrite+0xb0>
  4473. printf(1, "cannot create bigwrite\n");
  4474. exit();
  4475. }
  4476. int i;
  4477. for(i = 0; i < 2; i++){
  4478. int cc = write(fd, buf, sz);
  4479. 1eec: e59f1094 ldr r1, [pc, #148] ; 1f88 <bigwrite+0xd4>
  4480. 1ef0: e1a02004 mov r2, r4
  4481. 1ef4: eb0004f3 bl 32c8 <write>
  4482. if(cc != sz){
  4483. 1ef8: e1500004 cmp r0, r4
  4484. printf(1, "cannot create bigwrite\n");
  4485. exit();
  4486. }
  4487. int i;
  4488. for(i = 0; i < 2; i++){
  4489. int cc = write(fd, buf, sz);
  4490. 1efc: e1a03000 mov r3, r0
  4491. if(cc != sz){
  4492. 1f00: 1a000012 bne 1f50 <bigwrite+0x9c>
  4493. printf(1, "cannot create bigwrite\n");
  4494. exit();
  4495. }
  4496. int i;
  4497. for(i = 0; i < 2; i++){
  4498. int cc = write(fd, buf, sz);
  4499. 1f04: e1a00005 mov r0, r5
  4500. 1f08: e59f1078 ldr r1, [pc, #120] ; 1f88 <bigwrite+0xd4>
  4501. 1f0c: e1a02004 mov r2, r4
  4502. 1f10: eb0004ec bl 32c8 <write>
  4503. if(cc != sz){
  4504. 1f14: e1540000 cmp r4, r0
  4505. 1f18: 1a00000b bne 1f4c <bigwrite+0x98>
  4506. printf(1, "write(%d) ret %d\n", sz, cc);
  4507. exit();
  4508. }
  4509. }
  4510. close(fd);
  4511. 1f1c: e1a00005 mov r0, r5
  4512. int fd, sz;
  4513. printf(1, "bigwrite test\n");
  4514. unlink("bigwrite");
  4515. for(sz = 499; sz < 12*512; sz += 471){
  4516. 1f20: e2844f75 add r4, r4, #468 ; 0x1d4
  4517. if(cc != sz){
  4518. printf(1, "write(%d) ret %d\n", sz, cc);
  4519. exit();
  4520. }
  4521. }
  4522. close(fd);
  4523. 1f24: eb0004f4 bl 32fc <close>
  4524. int fd, sz;
  4525. printf(1, "bigwrite test\n");
  4526. unlink("bigwrite");
  4527. for(sz = 499; sz < 12*512; sz += 471){
  4528. 1f28: e2844003 add r4, r4, #3
  4529. printf(1, "write(%d) ret %d\n", sz, cc);
  4530. exit();
  4531. }
  4532. }
  4533. close(fd);
  4534. unlink("bigwrite");
  4535. 1f2c: e59f0044 ldr r0, [pc, #68] ; 1f78 <bigwrite+0xc4>
  4536. 1f30: eb000532 bl 3400 <unlink>
  4537. int fd, sz;
  4538. printf(1, "bigwrite test\n");
  4539. unlink("bigwrite");
  4540. for(sz = 499; sz < 12*512; sz += 471){
  4541. 1f34: e1540006 cmp r4, r6
  4542. 1f38: 1affffe6 bne 1ed8 <bigwrite+0x24>
  4543. }
  4544. close(fd);
  4545. unlink("bigwrite");
  4546. }
  4547. printf(1, "bigwrite ok\n");
  4548. 1f3c: e3a00001 mov r0, #1
  4549. 1f40: e59f1044 ldr r1, [pc, #68] ; 1f8c <bigwrite+0xd8>
  4550. }
  4551. 1f44: e8bd4878 pop {r3, r4, r5, r6, fp, lr}
  4552. }
  4553. close(fd);
  4554. unlink("bigwrite");
  4555. }
  4556. printf(1, "bigwrite ok\n");
  4557. 1f48: ea0005fd b 3744 <printf>
  4558. printf(1, "cannot create bigwrite\n");
  4559. exit();
  4560. }
  4561. int i;
  4562. for(i = 0; i < 2; i++){
  4563. int cc = write(fd, buf, sz);
  4564. 1f4c: e1a03000 mov r3, r0
  4565. if(cc != sz){
  4566. printf(1, "write(%d) ret %d\n", sz, cc);
  4567. 1f50: e3a00001 mov r0, #1
  4568. 1f54: e59f1034 ldr r1, [pc, #52] ; 1f90 <bigwrite+0xdc>
  4569. 1f58: e1a02004 mov r2, r4
  4570. 1f5c: eb0005f8 bl 3744 <printf>
  4571. exit();
  4572. 1f60: eb0004a4 bl 31f8 <exit>
  4573. unlink("bigwrite");
  4574. for(sz = 499; sz < 12*512; sz += 471){
  4575. fd = open("bigwrite", O_CREATE | O_RDWR);
  4576. if(fd < 0){
  4577. printf(1, "cannot create bigwrite\n");
  4578. 1f64: e3a00001 mov r0, #1
  4579. 1f68: e59f1024 ldr r1, [pc, #36] ; 1f94 <bigwrite+0xe0>
  4580. 1f6c: eb0005f4 bl 3744 <printf>
  4581. exit();
  4582. 1f70: eb0004a0 bl 31f8 <exit>
  4583. 1f74: 000047f4 .word 0x000047f4
  4584. 1f78: 00004804 .word 0x00004804
  4585. 1f7c: 000001f3 .word 0x000001f3
  4586. 1f80: 00001807 .word 0x00001807
  4587. 1f84: 00000202 .word 0x00000202
  4588. 1f88: 000079fc .word 0x000079fc
  4589. 1f8c: 0000483c .word 0x0000483c
  4590. 1f90: 00004828 .word 0x00004828
  4591. 1f94: 00004810 .word 0x00004810
  4592. 00001f98 <bigfile>:
  4593. printf(1, "bigwrite ok\n");
  4594. }
  4595. void
  4596. bigfile(void)
  4597. {
  4598. 1f98: e92d48f0 push {r4, r5, r6, r7, fp, lr}
  4599. int fd, i, total, cc;
  4600. printf(1, "bigfile test\n");
  4601. 1f9c: e3a00001 mov r0, #1
  4602. printf(1, "bigwrite ok\n");
  4603. }
  4604. void
  4605. bigfile(void)
  4606. {
  4607. 1fa0: e28db014 add fp, sp, #20
  4608. int fd, i, total, cc;
  4609. printf(1, "bigfile test\n");
  4610. 1fa4: e59f1160 ldr r1, [pc, #352] ; 210c <bigfile+0x174>
  4611. 1fa8: eb0005e5 bl 3744 <printf>
  4612. unlink("bigfile");
  4613. 1fac: e59f015c ldr r0, [pc, #348] ; 2110 <bigfile+0x178>
  4614. 1fb0: eb000512 bl 3400 <unlink>
  4615. fd = open("bigfile", O_CREATE | O_RDWR);
  4616. 1fb4: e59f0154 ldr r0, [pc, #340] ; 2110 <bigfile+0x178>
  4617. 1fb8: e59f1154 ldr r1, [pc, #340] ; 2114 <bigfile+0x17c>
  4618. 1fbc: eb0004f5 bl 3398 <open>
  4619. if(fd < 0){
  4620. 1fc0: e2505000 subs r5, r0, #0
  4621. 1fc4: a3a04000 movge r4, #0
  4622. 1fc8: ba000047 blt 20ec <bigfile+0x154>
  4623. printf(1, "cannot create bigfile");
  4624. exit();
  4625. }
  4626. for(i = 0; i < 20; i++){
  4627. memset(buf, i, 600);
  4628. 1fcc: e1a01004 mov r1, r4
  4629. 1fd0: e3a02f96 mov r2, #600 ; 0x258
  4630. 1fd4: e59f013c ldr r0, [pc, #316] ; 2118 <bigfile+0x180>
  4631. 1fd8: eb00040b bl 300c <memset>
  4632. if(write(fd, buf, 600) != 600){
  4633. 1fdc: e1a00005 mov r0, r5
  4634. 1fe0: e59f1130 ldr r1, [pc, #304] ; 2118 <bigfile+0x180>
  4635. 1fe4: e3a02f96 mov r2, #600 ; 0x258
  4636. 1fe8: eb0004b6 bl 32c8 <write>
  4637. 1fec: e3500f96 cmp r0, #600 ; 0x258
  4638. 1ff0: 1a000035 bne 20cc <bigfile+0x134>
  4639. fd = open("bigfile", O_CREATE | O_RDWR);
  4640. if(fd < 0){
  4641. printf(1, "cannot create bigfile");
  4642. exit();
  4643. }
  4644. for(i = 0; i < 20; i++){
  4645. 1ff4: e2844001 add r4, r4, #1
  4646. 1ff8: e3540014 cmp r4, #20
  4647. 1ffc: 1afffff2 bne 1fcc <bigfile+0x34>
  4648. if(write(fd, buf, 600) != 600){
  4649. printf(1, "write bigfile failed\n");
  4650. exit();
  4651. }
  4652. }
  4653. close(fd);
  4654. 2000: e1a00005 mov r0, r5
  4655. 2004: eb0004bc bl 32fc <close>
  4656. fd = open("bigfile", 0);
  4657. 2008: e59f0100 ldr r0, [pc, #256] ; 2110 <bigfile+0x178>
  4658. 200c: e3a01000 mov r1, #0
  4659. 2010: eb0004e0 bl 3398 <open>
  4660. if(fd < 0){
  4661. 2014: e2507000 subs r7, r0, #0
  4662. 2018: ba00002f blt 20dc <bigfile+0x144>
  4663. 201c: e3a05000 mov r5, #0
  4664. printf(1, "cannot open bigfile\n");
  4665. exit();
  4666. }
  4667. total = 0;
  4668. for(i = 0; ; i++){
  4669. cc = read(fd, buf, 300);
  4670. 2020: e59f60f0 ldr r6, [pc, #240] ; 2118 <bigfile+0x180>
  4671. }
  4672. }
  4673. close(fd);
  4674. fd = open("bigfile", 0);
  4675. if(fd < 0){
  4676. 2024: e1a04005 mov r4, r5
  4677. 2028: ea000009 b 2054 <bigfile+0xbc>
  4678. printf(1, "read bigfile failed\n");
  4679. exit();
  4680. }
  4681. if(cc == 0)
  4682. break;
  4683. if(cc != 300){
  4684. 202c: e3500f4b cmp r0, #300 ; 0x12c
  4685. 2030: 1a00001d bne 20ac <bigfile+0x114>
  4686. printf(1, "short read bigfile\n");
  4687. exit();
  4688. }
  4689. if(buf[0] != i/2 || buf[299] != i/2){
  4690. 2034: e5d63000 ldrb r3, [r6]
  4691. 2038: e15300c4 cmp r3, r4, asr #1
  4692. 203c: 1a000016 bne 209c <bigfile+0x104>
  4693. 2040: e5d6212b ldrb r2, [r6, #299] ; 0x12b
  4694. 2044: e1530002 cmp r3, r2
  4695. 2048: 1a000013 bne 209c <bigfile+0x104>
  4696. printf(1, "read bigfile wrong data\n");
  4697. exit();
  4698. }
  4699. total += cc;
  4700. 204c: e2855f4b add r5, r5, #300 ; 0x12c
  4701. if(fd < 0){
  4702. printf(1, "cannot open bigfile\n");
  4703. exit();
  4704. }
  4705. total = 0;
  4706. for(i = 0; ; i++){
  4707. 2050: e2844001 add r4, r4, #1
  4708. cc = read(fd, buf, 300);
  4709. 2054: e1a00007 mov r0, r7
  4710. 2058: e59f10b8 ldr r1, [pc, #184] ; 2118 <bigfile+0x180>
  4711. 205c: e3a02f4b mov r2, #300 ; 0x12c
  4712. 2060: eb00048b bl 3294 <read>
  4713. if(cc < 0){
  4714. 2064: e3500000 cmp r0, #0
  4715. 2068: ba000013 blt 20bc <bigfile+0x124>
  4716. printf(1, "read bigfile failed\n");
  4717. exit();
  4718. }
  4719. if(cc == 0)
  4720. 206c: 1affffee bne 202c <bigfile+0x94>
  4721. printf(1, "read bigfile wrong data\n");
  4722. exit();
  4723. }
  4724. total += cc;
  4725. }
  4726. close(fd);
  4727. 2070: e1a00007 mov r0, r7
  4728. 2074: eb0004a0 bl 32fc <close>
  4729. if(total != 20*600){
  4730. 2078: e59f309c ldr r3, [pc, #156] ; 211c <bigfile+0x184>
  4731. 207c: e1550003 cmp r5, r3
  4732. 2080: 1a00001d bne 20fc <bigfile+0x164>
  4733. printf(1, "read bigfile wrong total\n");
  4734. exit();
  4735. }
  4736. unlink("bigfile");
  4737. 2084: e59f0084 ldr r0, [pc, #132] ; 2110 <bigfile+0x178>
  4738. 2088: eb0004dc bl 3400 <unlink>
  4739. printf(1, "bigfile test ok\n");
  4740. 208c: e3a00001 mov r0, #1
  4741. 2090: e59f1088 ldr r1, [pc, #136] ; 2120 <bigfile+0x188>
  4742. }
  4743. 2094: e8bd48f0 pop {r4, r5, r6, r7, fp, lr}
  4744. printf(1, "read bigfile wrong total\n");
  4745. exit();
  4746. }
  4747. unlink("bigfile");
  4748. printf(1, "bigfile test ok\n");
  4749. 2098: ea0005a9 b 3744 <printf>
  4750. if(cc != 300){
  4751. printf(1, "short read bigfile\n");
  4752. exit();
  4753. }
  4754. if(buf[0] != i/2 || buf[299] != i/2){
  4755. printf(1, "read bigfile wrong data\n");
  4756. 209c: e3a00001 mov r0, #1
  4757. 20a0: e59f107c ldr r1, [pc, #124] ; 2124 <bigfile+0x18c>
  4758. 20a4: eb0005a6 bl 3744 <printf>
  4759. exit();
  4760. 20a8: eb000452 bl 31f8 <exit>
  4761. exit();
  4762. }
  4763. if(cc == 0)
  4764. break;
  4765. if(cc != 300){
  4766. printf(1, "short read bigfile\n");
  4767. 20ac: e3a00001 mov r0, #1
  4768. 20b0: e59f1070 ldr r1, [pc, #112] ; 2128 <bigfile+0x190>
  4769. 20b4: eb0005a2 bl 3744 <printf>
  4770. exit();
  4771. 20b8: eb00044e bl 31f8 <exit>
  4772. }
  4773. total = 0;
  4774. for(i = 0; ; i++){
  4775. cc = read(fd, buf, 300);
  4776. if(cc < 0){
  4777. printf(1, "read bigfile failed\n");
  4778. 20bc: e3a00001 mov r0, #1
  4779. 20c0: e59f1064 ldr r1, [pc, #100] ; 212c <bigfile+0x194>
  4780. 20c4: eb00059e bl 3744 <printf>
  4781. exit();
  4782. 20c8: eb00044a bl 31f8 <exit>
  4783. exit();
  4784. }
  4785. for(i = 0; i < 20; i++){
  4786. memset(buf, i, 600);
  4787. if(write(fd, buf, 600) != 600){
  4788. printf(1, "write bigfile failed\n");
  4789. 20cc: e3a00001 mov r0, #1
  4790. 20d0: e59f1058 ldr r1, [pc, #88] ; 2130 <bigfile+0x198>
  4791. 20d4: eb00059a bl 3744 <printf>
  4792. exit();
  4793. 20d8: eb000446 bl 31f8 <exit>
  4794. }
  4795. close(fd);
  4796. fd = open("bigfile", 0);
  4797. if(fd < 0){
  4798. printf(1, "cannot open bigfile\n");
  4799. 20dc: e3a00001 mov r0, #1
  4800. 20e0: e59f104c ldr r1, [pc, #76] ; 2134 <bigfile+0x19c>
  4801. 20e4: eb000596 bl 3744 <printf>
  4802. exit();
  4803. 20e8: eb000442 bl 31f8 <exit>
  4804. printf(1, "bigfile test\n");
  4805. unlink("bigfile");
  4806. fd = open("bigfile", O_CREATE | O_RDWR);
  4807. if(fd < 0){
  4808. printf(1, "cannot create bigfile");
  4809. 20ec: e3a00001 mov r0, #1
  4810. 20f0: e59f1040 ldr r1, [pc, #64] ; 2138 <bigfile+0x1a0>
  4811. 20f4: eb000592 bl 3744 <printf>
  4812. exit();
  4813. 20f8: eb00043e bl 31f8 <exit>
  4814. }
  4815. total += cc;
  4816. }
  4817. close(fd);
  4818. if(total != 20*600){
  4819. printf(1, "read bigfile wrong total\n");
  4820. 20fc: e3a00001 mov r0, #1
  4821. 2100: e59f1034 ldr r1, [pc, #52] ; 213c <bigfile+0x1a4>
  4822. 2104: eb00058e bl 3744 <printf>
  4823. exit();
  4824. 2108: eb00043a bl 31f8 <exit>
  4825. 210c: 0000484c .word 0x0000484c
  4826. 2110: 0000485c .word 0x0000485c
  4827. 2114: 00000202 .word 0x00000202
  4828. 2118: 000079fc .word 0x000079fc
  4829. 211c: 00002ee0 .word 0x00002ee0
  4830. 2120: 00004910 .word 0x00004910
  4831. 2124: 000048d8 .word 0x000048d8
  4832. 2128: 000048c4 .word 0x000048c4
  4833. 212c: 000048ac .word 0x000048ac
  4834. 2130: 0000487c .word 0x0000487c
  4835. 2134: 00004894 .word 0x00004894
  4836. 2138: 00004864 .word 0x00004864
  4837. 213c: 000048f4 .word 0x000048f4
  4838. 00002140 <fourteen>:
  4839. printf(1, "bigfile test ok\n");
  4840. }
  4841. void
  4842. fourteen(void)
  4843. {
  4844. 2140: e92d4818 push {r3, r4, fp, lr}
  4845. int fd;
  4846. // DIRSIZ is 14.
  4847. printf(1, "fourteen test\n");
  4848. 2144: e3a00001 mov r0, #1
  4849. printf(1, "bigfile test ok\n");
  4850. }
  4851. void
  4852. fourteen(void)
  4853. {
  4854. 2148: e28db00c add fp, sp, #12
  4855. int fd;
  4856. // DIRSIZ is 14.
  4857. printf(1, "fourteen test\n");
  4858. 214c: e59f10dc ldr r1, [pc, #220] ; 2230 <fourteen+0xf0>
  4859. 2150: eb00057b bl 3744 <printf>
  4860. if(mkdir("12345678901234") != 0){
  4861. 2154: e59f00d8 ldr r0, [pc, #216] ; 2234 <fourteen+0xf4>
  4862. 2158: eb0004cf bl 349c <mkdir>
  4863. 215c: e3500000 cmp r0, #0
  4864. 2160: 1a00001b bne 21d4 <fourteen+0x94>
  4865. printf(1, "mkdir 12345678901234 failed\n");
  4866. exit();
  4867. }
  4868. if(mkdir("12345678901234/123456789012345") != 0){
  4869. 2164: e59f00cc ldr r0, [pc, #204] ; 2238 <fourteen+0xf8>
  4870. 2168: eb0004cb bl 349c <mkdir>
  4871. 216c: e2504000 subs r4, r0, #0
  4872. 2170: 1a00002a bne 2220 <fourteen+0xe0>
  4873. printf(1, "mkdir 12345678901234/123456789012345 failed\n");
  4874. exit();
  4875. }
  4876. fd = open("123456789012345/123456789012345/123456789012345", O_CREATE);
  4877. 2174: e59f00c0 ldr r0, [pc, #192] ; 223c <fourteen+0xfc>
  4878. 2178: e3a01c02 mov r1, #512 ; 0x200
  4879. 217c: eb000485 bl 3398 <open>
  4880. if(fd < 0){
  4881. 2180: e3500000 cmp r0, #0
  4882. 2184: ba000021 blt 2210 <fourteen+0xd0>
  4883. printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n");
  4884. exit();
  4885. }
  4886. close(fd);
  4887. 2188: eb00045b bl 32fc <close>
  4888. fd = open("12345678901234/12345678901234/12345678901234", 0);
  4889. 218c: e59f00ac ldr r0, [pc, #172] ; 2240 <fourteen+0x100>
  4890. 2190: e1a01004 mov r1, r4
  4891. 2194: eb00047f bl 3398 <open>
  4892. if(fd < 0){
  4893. 2198: e3500000 cmp r0, #0
  4894. 219c: ba000017 blt 2200 <fourteen+0xc0>
  4895. printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n");
  4896. exit();
  4897. }
  4898. close(fd);
  4899. 21a0: eb000455 bl 32fc <close>
  4900. if(mkdir("12345678901234/12345678901234") == 0){
  4901. 21a4: e59f0098 ldr r0, [pc, #152] ; 2244 <fourteen+0x104>
  4902. 21a8: eb0004bb bl 349c <mkdir>
  4903. 21ac: e3500000 cmp r0, #0
  4904. 21b0: 0a00000e beq 21f0 <fourteen+0xb0>
  4905. printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n");
  4906. exit();
  4907. }
  4908. if(mkdir("123456789012345/12345678901234") == 0){
  4909. 21b4: e59f008c ldr r0, [pc, #140] ; 2248 <fourteen+0x108>
  4910. 21b8: eb0004b7 bl 349c <mkdir>
  4911. 21bc: e3500000 cmp r0, #0
  4912. printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n");
  4913. 21c0: e3a00001 mov r0, #1
  4914. if(mkdir("12345678901234/12345678901234") == 0){
  4915. printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n");
  4916. exit();
  4917. }
  4918. if(mkdir("123456789012345/12345678901234") == 0){
  4919. 21c4: 0a000006 beq 21e4 <fourteen+0xa4>
  4920. printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n");
  4921. exit();
  4922. }
  4923. printf(1, "fourteen ok\n");
  4924. 21c8: e59f107c ldr r1, [pc, #124] ; 224c <fourteen+0x10c>
  4925. }
  4926. 21cc: e8bd4818 pop {r3, r4, fp, lr}
  4927. if(mkdir("123456789012345/12345678901234") == 0){
  4928. printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n");
  4929. exit();
  4930. }
  4931. printf(1, "fourteen ok\n");
  4932. 21d0: ea00055b b 3744 <printf>
  4933. // DIRSIZ is 14.
  4934. printf(1, "fourteen test\n");
  4935. if(mkdir("12345678901234") != 0){
  4936. printf(1, "mkdir 12345678901234 failed\n");
  4937. 21d4: e3a00001 mov r0, #1
  4938. 21d8: e59f1070 ldr r1, [pc, #112] ; 2250 <fourteen+0x110>
  4939. 21dc: eb000558 bl 3744 <printf>
  4940. exit();
  4941. 21e0: eb000404 bl 31f8 <exit>
  4942. if(mkdir("12345678901234/12345678901234") == 0){
  4943. printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n");
  4944. exit();
  4945. }
  4946. if(mkdir("123456789012345/12345678901234") == 0){
  4947. printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n");
  4948. 21e4: e59f1068 ldr r1, [pc, #104] ; 2254 <fourteen+0x114>
  4949. 21e8: eb000555 bl 3744 <printf>
  4950. exit();
  4951. 21ec: eb000401 bl 31f8 <exit>
  4952. exit();
  4953. }
  4954. close(fd);
  4955. if(mkdir("12345678901234/12345678901234") == 0){
  4956. printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n");
  4957. 21f0: e3a00001 mov r0, #1
  4958. 21f4: e59f105c ldr r1, [pc, #92] ; 2258 <fourteen+0x118>
  4959. 21f8: eb000551 bl 3744 <printf>
  4960. exit();
  4961. 21fc: eb0003fd bl 31f8 <exit>
  4962. exit();
  4963. }
  4964. close(fd);
  4965. fd = open("12345678901234/12345678901234/12345678901234", 0);
  4966. if(fd < 0){
  4967. printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n");
  4968. 2200: e3a00001 mov r0, #1
  4969. 2204: e59f1050 ldr r1, [pc, #80] ; 225c <fourteen+0x11c>
  4970. 2208: eb00054d bl 3744 <printf>
  4971. exit();
  4972. 220c: eb0003f9 bl 31f8 <exit>
  4973. printf(1, "mkdir 12345678901234/123456789012345 failed\n");
  4974. exit();
  4975. }
  4976. fd = open("123456789012345/123456789012345/123456789012345", O_CREATE);
  4977. if(fd < 0){
  4978. printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n");
  4979. 2210: e3a00001 mov r0, #1
  4980. 2214: e59f1044 ldr r1, [pc, #68] ; 2260 <fourteen+0x120>
  4981. 2218: eb000549 bl 3744 <printf>
  4982. exit();
  4983. 221c: eb0003f5 bl 31f8 <exit>
  4984. if(mkdir("12345678901234") != 0){
  4985. printf(1, "mkdir 12345678901234 failed\n");
  4986. exit();
  4987. }
  4988. if(mkdir("12345678901234/123456789012345") != 0){
  4989. printf(1, "mkdir 12345678901234/123456789012345 failed\n");
  4990. 2220: e3a00001 mov r0, #1
  4991. 2224: e59f1038 ldr r1, [pc, #56] ; 2264 <fourteen+0x124>
  4992. 2228: eb000545 bl 3744 <printf>
  4993. exit();
  4994. 222c: eb0003f1 bl 31f8 <exit>
  4995. 2230: 00004924 .word 0x00004924
  4996. 2234: 00004ae0 .word 0x00004ae0
  4997. 2238: 00004954 .word 0x00004954
  4998. 223c: 000049a4 .word 0x000049a4
  4999. 2240: 00004a14 .word 0x00004a14
  5000. 2244: 00004a80 .word 0x00004a80
  5001. 2248: 00004ad0 .word 0x00004ad0
  5002. 224c: 00004b24 .word 0x00004b24
  5003. 2250: 00004934 .word 0x00004934
  5004. 2254: 00004af0 .word 0x00004af0
  5005. 2258: 00004aa0 .word 0x00004aa0
  5006. 225c: 00004a44 .word 0x00004a44
  5007. 2260: 000049d4 .word 0x000049d4
  5008. 2264: 00004974 .word 0x00004974
  5009. 00002268 <rmdot>:
  5010. printf(1, "fourteen ok\n");
  5011. }
  5012. void
  5013. rmdot(void)
  5014. {
  5015. 2268: e92d4800 push {fp, lr}
  5016. printf(1, "rmdot test\n");
  5017. 226c: e3a00001 mov r0, #1
  5018. printf(1, "fourteen ok\n");
  5019. }
  5020. void
  5021. rmdot(void)
  5022. {
  5023. 2270: e28db004 add fp, sp, #4
  5024. printf(1, "rmdot test\n");
  5025. 2274: e59f110c ldr r1, [pc, #268] ; 2388 <rmdot+0x120>
  5026. 2278: eb000531 bl 3744 <printf>
  5027. if(mkdir("dots") != 0){
  5028. 227c: e59f0108 ldr r0, [pc, #264] ; 238c <rmdot+0x124>
  5029. 2280: eb000485 bl 349c <mkdir>
  5030. 2284: e3500000 cmp r0, #0
  5031. 2288: 1a00001f bne 230c <rmdot+0xa4>
  5032. printf(1, "mkdir dots failed\n");
  5033. exit();
  5034. }
  5035. if(chdir("dots") != 0){
  5036. 228c: e59f00f8 ldr r0, [pc, #248] ; 238c <rmdot+0x124>
  5037. 2290: eb00048e bl 34d0 <chdir>
  5038. 2294: e3500000 cmp r0, #0
  5039. 2298: 1a000036 bne 2378 <rmdot+0x110>
  5040. printf(1, "chdir dots failed\n");
  5041. exit();
  5042. }
  5043. if(unlink(".") == 0){
  5044. 229c: e59f00ec ldr r0, [pc, #236] ; 2390 <rmdot+0x128>
  5045. 22a0: eb000456 bl 3400 <unlink>
  5046. 22a4: e3500000 cmp r0, #0
  5047. 22a8: 0a00002e beq 2368 <rmdot+0x100>
  5048. printf(1, "rm . worked!\n");
  5049. exit();
  5050. }
  5051. if(unlink("..") == 0){
  5052. 22ac: e59f00e0 ldr r0, [pc, #224] ; 2394 <rmdot+0x12c>
  5053. 22b0: eb000452 bl 3400 <unlink>
  5054. 22b4: e3500000 cmp r0, #0
  5055. 22b8: 0a000026 beq 2358 <rmdot+0xf0>
  5056. printf(1, "rm .. worked!\n");
  5057. exit();
  5058. }
  5059. if(chdir("/") != 0){
  5060. 22bc: e59f00d4 ldr r0, [pc, #212] ; 2398 <rmdot+0x130>
  5061. 22c0: eb000482 bl 34d0 <chdir>
  5062. 22c4: e3500000 cmp r0, #0
  5063. 22c8: 1a00001e bne 2348 <rmdot+0xe0>
  5064. printf(1, "chdir / failed\n");
  5065. exit();
  5066. }
  5067. if(unlink("dots/.") == 0){
  5068. 22cc: e59f00c8 ldr r0, [pc, #200] ; 239c <rmdot+0x134>
  5069. 22d0: eb00044a bl 3400 <unlink>
  5070. 22d4: e3500000 cmp r0, #0
  5071. 22d8: 0a000016 beq 2338 <rmdot+0xd0>
  5072. printf(1, "unlink dots/. worked!\n");
  5073. exit();
  5074. }
  5075. if(unlink("dots/..") == 0){
  5076. 22dc: e59f00bc ldr r0, [pc, #188] ; 23a0 <rmdot+0x138>
  5077. 22e0: eb000446 bl 3400 <unlink>
  5078. 22e4: e3500000 cmp r0, #0
  5079. 22e8: 0a00000e beq 2328 <rmdot+0xc0>
  5080. printf(1, "unlink dots/.. worked!\n");
  5081. exit();
  5082. }
  5083. if(unlink("dots") != 0){
  5084. 22ec: e59f0098 ldr r0, [pc, #152] ; 238c <rmdot+0x124>
  5085. 22f0: eb000442 bl 3400 <unlink>
  5086. 22f4: e3500000 cmp r0, #0
  5087. printf(1, "unlink dots failed!\n");
  5088. 22f8: e3a00001 mov r0, #1
  5089. }
  5090. if(unlink("dots/..") == 0){
  5091. printf(1, "unlink dots/.. worked!\n");
  5092. exit();
  5093. }
  5094. if(unlink("dots") != 0){
  5095. 22fc: 1a000006 bne 231c <rmdot+0xb4>
  5096. printf(1, "unlink dots failed!\n");
  5097. exit();
  5098. }
  5099. printf(1, "rmdot ok\n");
  5100. 2300: e59f109c ldr r1, [pc, #156] ; 23a4 <rmdot+0x13c>
  5101. }
  5102. 2304: e8bd4800 pop {fp, lr}
  5103. }
  5104. if(unlink("dots") != 0){
  5105. printf(1, "unlink dots failed!\n");
  5106. exit();
  5107. }
  5108. printf(1, "rmdot ok\n");
  5109. 2308: ea00050d b 3744 <printf>
  5110. void
  5111. rmdot(void)
  5112. {
  5113. printf(1, "rmdot test\n");
  5114. if(mkdir("dots") != 0){
  5115. printf(1, "mkdir dots failed\n");
  5116. 230c: e3a00001 mov r0, #1
  5117. 2310: e59f1090 ldr r1, [pc, #144] ; 23a8 <rmdot+0x140>
  5118. 2314: eb00050a bl 3744 <printf>
  5119. exit();
  5120. 2318: eb0003b6 bl 31f8 <exit>
  5121. if(unlink("dots/..") == 0){
  5122. printf(1, "unlink dots/.. worked!\n");
  5123. exit();
  5124. }
  5125. if(unlink("dots") != 0){
  5126. printf(1, "unlink dots failed!\n");
  5127. 231c: e59f1088 ldr r1, [pc, #136] ; 23ac <rmdot+0x144>
  5128. 2320: eb000507 bl 3744 <printf>
  5129. exit();
  5130. 2324: eb0003b3 bl 31f8 <exit>
  5131. if(unlink("dots/.") == 0){
  5132. printf(1, "unlink dots/. worked!\n");
  5133. exit();
  5134. }
  5135. if(unlink("dots/..") == 0){
  5136. printf(1, "unlink dots/.. worked!\n");
  5137. 2328: e3a00001 mov r0, #1
  5138. 232c: e59f107c ldr r1, [pc, #124] ; 23b0 <rmdot+0x148>
  5139. 2330: eb000503 bl 3744 <printf>
  5140. exit();
  5141. 2334: eb0003af bl 31f8 <exit>
  5142. if(chdir("/") != 0){
  5143. printf(1, "chdir / failed\n");
  5144. exit();
  5145. }
  5146. if(unlink("dots/.") == 0){
  5147. printf(1, "unlink dots/. worked!\n");
  5148. 2338: e3a00001 mov r0, #1
  5149. 233c: e59f1070 ldr r1, [pc, #112] ; 23b4 <rmdot+0x14c>
  5150. 2340: eb0004ff bl 3744 <printf>
  5151. exit();
  5152. 2344: eb0003ab bl 31f8 <exit>
  5153. if(unlink("..") == 0){
  5154. printf(1, "rm .. worked!\n");
  5155. exit();
  5156. }
  5157. if(chdir("/") != 0){
  5158. printf(1, "chdir / failed\n");
  5159. 2348: e3a00001 mov r0, #1
  5160. 234c: e59f1064 ldr r1, [pc, #100] ; 23b8 <rmdot+0x150>
  5161. 2350: eb0004fb bl 3744 <printf>
  5162. exit();
  5163. 2354: eb0003a7 bl 31f8 <exit>
  5164. if(unlink(".") == 0){
  5165. printf(1, "rm . worked!\n");
  5166. exit();
  5167. }
  5168. if(unlink("..") == 0){
  5169. printf(1, "rm .. worked!\n");
  5170. 2358: e3a00001 mov r0, #1
  5171. 235c: e59f1058 ldr r1, [pc, #88] ; 23bc <rmdot+0x154>
  5172. 2360: eb0004f7 bl 3744 <printf>
  5173. exit();
  5174. 2364: eb0003a3 bl 31f8 <exit>
  5175. if(chdir("dots") != 0){
  5176. printf(1, "chdir dots failed\n");
  5177. exit();
  5178. }
  5179. if(unlink(".") == 0){
  5180. printf(1, "rm . worked!\n");
  5181. 2368: e3a00001 mov r0, #1
  5182. 236c: e59f104c ldr r1, [pc, #76] ; 23c0 <rmdot+0x158>
  5183. 2370: eb0004f3 bl 3744 <printf>
  5184. exit();
  5185. 2374: eb00039f bl 31f8 <exit>
  5186. if(mkdir("dots") != 0){
  5187. printf(1, "mkdir dots failed\n");
  5188. exit();
  5189. }
  5190. if(chdir("dots") != 0){
  5191. printf(1, "chdir dots failed\n");
  5192. 2378: e3a00001 mov r0, #1
  5193. 237c: e59f1040 ldr r1, [pc, #64] ; 23c4 <rmdot+0x15c>
  5194. 2380: eb0004ef bl 3744 <printf>
  5195. exit();
  5196. 2384: eb00039b bl 31f8 <exit>
  5197. 2388: 00004b34 .word 0x00004b34
  5198. 238c: 00004b40 .word 0x00004b40
  5199. 2390: 00004200 .word 0x00004200
  5200. 2394: 00003d44 .word 0x00003d44
  5201. 2398: 00004b90 .word 0x00004b90
  5202. 239c: 00004ba4 .word 0x00004ba4
  5203. 23a0: 00004bc4 .word 0x00004bc4
  5204. 23a4: 00004bfc .word 0x00004bfc
  5205. 23a8: 00004b48 .word 0x00004b48
  5206. 23ac: 00004be4 .word 0x00004be4
  5207. 23b0: 00004bcc .word 0x00004bcc
  5208. 23b4: 00004bac .word 0x00004bac
  5209. 23b8: 00004b94 .word 0x00004b94
  5210. 23bc: 00004b80 .word 0x00004b80
  5211. 23c0: 00004b70 .word 0x00004b70
  5212. 23c4: 00004b5c .word 0x00004b5c
  5213. 000023c8 <dirfile>:
  5214. printf(1, "rmdot ok\n");
  5215. }
  5216. void
  5217. dirfile(void)
  5218. {
  5219. 23c8: e92d4818 push {r3, r4, fp, lr}
  5220. int fd;
  5221. printf(1, "dir vs file\n");
  5222. 23cc: e3a00001 mov r0, #1
  5223. printf(1, "rmdot ok\n");
  5224. }
  5225. void
  5226. dirfile(void)
  5227. {
  5228. 23d0: e28db00c add fp, sp, #12
  5229. int fd;
  5230. printf(1, "dir vs file\n");
  5231. 23d4: e59f1174 ldr r1, [pc, #372] ; 2550 <dirfile+0x188>
  5232. 23d8: eb0004d9 bl 3744 <printf>
  5233. fd = open("dirfile", O_CREATE);
  5234. 23dc: e59f0170 ldr r0, [pc, #368] ; 2554 <dirfile+0x18c>
  5235. 23e0: e3a01c02 mov r1, #512 ; 0x200
  5236. 23e4: eb0003eb bl 3398 <open>
  5237. if(fd < 0){
  5238. 23e8: e3500000 cmp r0, #0
  5239. 23ec: ba00003b blt 24e0 <dirfile+0x118>
  5240. printf(1, "create dirfile failed\n");
  5241. exit();
  5242. }
  5243. close(fd);
  5244. 23f0: eb0003c1 bl 32fc <close>
  5245. if(chdir("dirfile") == 0){
  5246. 23f4: e59f0158 ldr r0, [pc, #344] ; 2554 <dirfile+0x18c>
  5247. 23f8: eb000434 bl 34d0 <chdir>
  5248. 23fc: e3500000 cmp r0, #0
  5249. 2400: 0a000032 beq 24d0 <dirfile+0x108>
  5250. printf(1, "chdir dirfile succeeded!\n");
  5251. exit();
  5252. }
  5253. fd = open("dirfile/xx", 0);
  5254. 2404: e59f014c ldr r0, [pc, #332] ; 2558 <dirfile+0x190>
  5255. 2408: e3a01000 mov r1, #0
  5256. 240c: eb0003e1 bl 3398 <open>
  5257. if(fd >= 0){
  5258. 2410: e3500000 cmp r0, #0
  5259. 2414: aa000029 bge 24c0 <dirfile+0xf8>
  5260. printf(1, "create dirfile/xx succeeded!\n");
  5261. exit();
  5262. }
  5263. fd = open("dirfile/xx", O_CREATE);
  5264. 2418: e59f0138 ldr r0, [pc, #312] ; 2558 <dirfile+0x190>
  5265. 241c: e3a01c02 mov r1, #512 ; 0x200
  5266. 2420: eb0003dc bl 3398 <open>
  5267. if(fd >= 0){
  5268. 2424: e3500000 cmp r0, #0
  5269. 2428: aa000024 bge 24c0 <dirfile+0xf8>
  5270. printf(1, "create dirfile/xx succeeded!\n");
  5271. exit();
  5272. }
  5273. if(mkdir("dirfile/xx") == 0){
  5274. 242c: e59f0124 ldr r0, [pc, #292] ; 2558 <dirfile+0x190>
  5275. 2430: eb000419 bl 349c <mkdir>
  5276. 2434: e3500000 cmp r0, #0
  5277. 2438: 0a000040 beq 2540 <dirfile+0x178>
  5278. printf(1, "mkdir dirfile/xx succeeded!\n");
  5279. exit();
  5280. }
  5281. if(unlink("dirfile/xx") == 0){
  5282. 243c: e59f0114 ldr r0, [pc, #276] ; 2558 <dirfile+0x190>
  5283. 2440: eb0003ee bl 3400 <unlink>
  5284. 2444: e3500000 cmp r0, #0
  5285. 2448: 0a000038 beq 2530 <dirfile+0x168>
  5286. printf(1, "unlink dirfile/xx succeeded!\n");
  5287. exit();
  5288. }
  5289. if(link("README", "dirfile/xx") == 0){
  5290. 244c: e59f0108 ldr r0, [pc, #264] ; 255c <dirfile+0x194>
  5291. 2450: e59f1100 ldr r1, [pc, #256] ; 2558 <dirfile+0x190>
  5292. 2454: eb000403 bl 3468 <link>
  5293. 2458: e3500000 cmp r0, #0
  5294. 245c: 0a00002f beq 2520 <dirfile+0x158>
  5295. printf(1, "link to dirfile/xx succeeded!\n");
  5296. exit();
  5297. }
  5298. if(unlink("dirfile") != 0){
  5299. 2460: e59f00ec ldr r0, [pc, #236] ; 2554 <dirfile+0x18c>
  5300. 2464: eb0003e5 bl 3400 <unlink>
  5301. 2468: e2504000 subs r4, r0, #0
  5302. 246c: 1a000027 bne 2510 <dirfile+0x148>
  5303. printf(1, "unlink dirfile failed!\n");
  5304. exit();
  5305. }
  5306. fd = open(".", O_RDWR);
  5307. 2470: e59f00e8 ldr r0, [pc, #232] ; 2560 <dirfile+0x198>
  5308. 2474: e3a01002 mov r1, #2
  5309. 2478: eb0003c6 bl 3398 <open>
  5310. if(fd >= 0){
  5311. 247c: e3500000 cmp r0, #0
  5312. 2480: aa00001e bge 2500 <dirfile+0x138>
  5313. printf(1, "open . for writing succeeded!\n");
  5314. exit();
  5315. }
  5316. fd = open(".", 0);
  5317. 2484: e1a01004 mov r1, r4
  5318. 2488: e59f00d0 ldr r0, [pc, #208] ; 2560 <dirfile+0x198>
  5319. 248c: eb0003c1 bl 3398 <open>
  5320. if(write(fd, "x", 1) > 0){
  5321. 2490: e59f10cc ldr r1, [pc, #204] ; 2564 <dirfile+0x19c>
  5322. 2494: e3a02001 mov r2, #1
  5323. fd = open(".", O_RDWR);
  5324. if(fd >= 0){
  5325. printf(1, "open . for writing succeeded!\n");
  5326. exit();
  5327. }
  5328. fd = open(".", 0);
  5329. 2498: e1a04000 mov r4, r0
  5330. if(write(fd, "x", 1) > 0){
  5331. 249c: eb000389 bl 32c8 <write>
  5332. 24a0: e3500000 cmp r0, #0
  5333. 24a4: ca000011 bgt 24f0 <dirfile+0x128>
  5334. printf(1, "write . succeeded!\n");
  5335. exit();
  5336. }
  5337. close(fd);
  5338. 24a8: e1a00004 mov r0, r4
  5339. 24ac: eb000392 bl 32fc <close>
  5340. printf(1, "dir vs file OK\n");
  5341. 24b0: e3a00001 mov r0, #1
  5342. 24b4: e59f10ac ldr r1, [pc, #172] ; 2568 <dirfile+0x1a0>
  5343. }
  5344. 24b8: e8bd4818 pop {r3, r4, fp, lr}
  5345. printf(1, "write . succeeded!\n");
  5346. exit();
  5347. }
  5348. close(fd);
  5349. printf(1, "dir vs file OK\n");
  5350. 24bc: ea0004a0 b 3744 <printf>
  5351. printf(1, "create dirfile/xx succeeded!\n");
  5352. exit();
  5353. }
  5354. fd = open("dirfile/xx", O_CREATE);
  5355. if(fd >= 0){
  5356. printf(1, "create dirfile/xx succeeded!\n");
  5357. 24c0: e3a00001 mov r0, #1
  5358. 24c4: e59f10a0 ldr r1, [pc, #160] ; 256c <dirfile+0x1a4>
  5359. 24c8: eb00049d bl 3744 <printf>
  5360. exit();
  5361. 24cc: eb000349 bl 31f8 <exit>
  5362. printf(1, "create dirfile failed\n");
  5363. exit();
  5364. }
  5365. close(fd);
  5366. if(chdir("dirfile") == 0){
  5367. printf(1, "chdir dirfile succeeded!\n");
  5368. 24d0: e3a00001 mov r0, #1
  5369. 24d4: e59f1094 ldr r1, [pc, #148] ; 2570 <dirfile+0x1a8>
  5370. 24d8: eb000499 bl 3744 <printf>
  5371. exit();
  5372. 24dc: eb000345 bl 31f8 <exit>
  5373. printf(1, "dir vs file\n");
  5374. fd = open("dirfile", O_CREATE);
  5375. if(fd < 0){
  5376. printf(1, "create dirfile failed\n");
  5377. 24e0: e3a00001 mov r0, #1
  5378. 24e4: e59f1088 ldr r1, [pc, #136] ; 2574 <dirfile+0x1ac>
  5379. 24e8: eb000495 bl 3744 <printf>
  5380. exit();
  5381. 24ec: eb000341 bl 31f8 <exit>
  5382. printf(1, "open . for writing succeeded!\n");
  5383. exit();
  5384. }
  5385. fd = open(".", 0);
  5386. if(write(fd, "x", 1) > 0){
  5387. printf(1, "write . succeeded!\n");
  5388. 24f0: e3a00001 mov r0, #1
  5389. 24f4: e59f107c ldr r1, [pc, #124] ; 2578 <dirfile+0x1b0>
  5390. 24f8: eb000491 bl 3744 <printf>
  5391. exit();
  5392. 24fc: eb00033d bl 31f8 <exit>
  5393. exit();
  5394. }
  5395. fd = open(".", O_RDWR);
  5396. if(fd >= 0){
  5397. printf(1, "open . for writing succeeded!\n");
  5398. 2500: e3a00001 mov r0, #1
  5399. 2504: e59f1070 ldr r1, [pc, #112] ; 257c <dirfile+0x1b4>
  5400. 2508: eb00048d bl 3744 <printf>
  5401. exit();
  5402. 250c: eb000339 bl 31f8 <exit>
  5403. if(link("README", "dirfile/xx") == 0){
  5404. printf(1, "link to dirfile/xx succeeded!\n");
  5405. exit();
  5406. }
  5407. if(unlink("dirfile") != 0){
  5408. printf(1, "unlink dirfile failed!\n");
  5409. 2510: e3a00001 mov r0, #1
  5410. 2514: e59f1064 ldr r1, [pc, #100] ; 2580 <dirfile+0x1b8>
  5411. 2518: eb000489 bl 3744 <printf>
  5412. exit();
  5413. 251c: eb000335 bl 31f8 <exit>
  5414. if(unlink("dirfile/xx") == 0){
  5415. printf(1, "unlink dirfile/xx succeeded!\n");
  5416. exit();
  5417. }
  5418. if(link("README", "dirfile/xx") == 0){
  5419. printf(1, "link to dirfile/xx succeeded!\n");
  5420. 2520: e3a00001 mov r0, #1
  5421. 2524: e59f1058 ldr r1, [pc, #88] ; 2584 <dirfile+0x1bc>
  5422. 2528: eb000485 bl 3744 <printf>
  5423. exit();
  5424. 252c: eb000331 bl 31f8 <exit>
  5425. if(mkdir("dirfile/xx") == 0){
  5426. printf(1, "mkdir dirfile/xx succeeded!\n");
  5427. exit();
  5428. }
  5429. if(unlink("dirfile/xx") == 0){
  5430. printf(1, "unlink dirfile/xx succeeded!\n");
  5431. 2530: e3a00001 mov r0, #1
  5432. 2534: e59f104c ldr r1, [pc, #76] ; 2588 <dirfile+0x1c0>
  5433. 2538: eb000481 bl 3744 <printf>
  5434. exit();
  5435. 253c: eb00032d bl 31f8 <exit>
  5436. if(fd >= 0){
  5437. printf(1, "create dirfile/xx succeeded!\n");
  5438. exit();
  5439. }
  5440. if(mkdir("dirfile/xx") == 0){
  5441. printf(1, "mkdir dirfile/xx succeeded!\n");
  5442. 2540: e3a00001 mov r0, #1
  5443. 2544: e59f1040 ldr r1, [pc, #64] ; 258c <dirfile+0x1c4>
  5444. 2548: eb00047d bl 3744 <printf>
  5445. exit();
  5446. 254c: eb000329 bl 31f8 <exit>
  5447. 2550: 00004c08 .word 0x00004c08
  5448. 2554: 00004c18 .word 0x00004c18
  5449. 2558: 00004c54 .word 0x00004c54
  5450. 255c: 00004cc0 .word 0x00004cc0
  5451. 2560: 00004200 .word 0x00004200
  5452. 2564: 00004760 .word 0x00004760
  5453. 2568: 00004d34 .word 0x00004d34
  5454. 256c: 00004c60 .word 0x00004c60
  5455. 2570: 00004c38 .word 0x00004c38
  5456. 2574: 00004c20 .word 0x00004c20
  5457. 2578: 00004d20 .word 0x00004d20
  5458. 257c: 00004d00 .word 0x00004d00
  5459. 2580: 00004ce8 .word 0x00004ce8
  5460. 2584: 00004cc8 .word 0x00004cc8
  5461. 2588: 00004ca0 .word 0x00004ca0
  5462. 258c: 00004c80 .word 0x00004c80
  5463. 00002590 <iref>:
  5464. }
  5465. // test that iput() is called at the end of _namei()
  5466. void
  5467. iref(void)
  5468. {
  5469. 2590: e92d4818 push {r3, r4, fp, lr}
  5470. int i, fd;
  5471. printf(1, "empty file name\n");
  5472. 2594: e3a00001 mov r0, #1
  5473. }
  5474. // test that iput() is called at the end of _namei()
  5475. void
  5476. iref(void)
  5477. {
  5478. 2598: e28db00c add fp, sp, #12
  5479. int i, fd;
  5480. printf(1, "empty file name\n");
  5481. 259c: e59f10b0 ldr r1, [pc, #176] ; 2654 <iref+0xc4>
  5482. 25a0: eb000467 bl 3744 <printf>
  5483. 25a4: e3a04033 mov r4, #51 ; 0x33
  5484. // the 50 is NINODE
  5485. for(i = 0; i < 50 + 1; i++){
  5486. if(mkdir("irefd") != 0){
  5487. 25a8: e59f00a8 ldr r0, [pc, #168] ; 2658 <iref+0xc8>
  5488. 25ac: eb0003ba bl 349c <mkdir>
  5489. 25b0: e3500000 cmp r0, #0
  5490. 25b4: 1a00001e bne 2634 <iref+0xa4>
  5491. printf(1, "mkdir irefd failed\n");
  5492. exit();
  5493. }
  5494. if(chdir("irefd") != 0){
  5495. 25b8: e59f0098 ldr r0, [pc, #152] ; 2658 <iref+0xc8>
  5496. 25bc: eb0003c3 bl 34d0 <chdir>
  5497. 25c0: e3500000 cmp r0, #0
  5498. 25c4: 1a00001e bne 2644 <iref+0xb4>
  5499. printf(1, "chdir irefd failed\n");
  5500. exit();
  5501. }
  5502. mkdir("");
  5503. 25c8: e59f008c ldr r0, [pc, #140] ; 265c <iref+0xcc>
  5504. 25cc: eb0003b2 bl 349c <mkdir>
  5505. link("README", "");
  5506. 25d0: e59f1084 ldr r1, [pc, #132] ; 265c <iref+0xcc>
  5507. 25d4: e59f0084 ldr r0, [pc, #132] ; 2660 <iref+0xd0>
  5508. 25d8: eb0003a2 bl 3468 <link>
  5509. fd = open("", O_CREATE);
  5510. 25dc: e59f0078 ldr r0, [pc, #120] ; 265c <iref+0xcc>
  5511. 25e0: e3a01c02 mov r1, #512 ; 0x200
  5512. 25e4: eb00036b bl 3398 <open>
  5513. if(fd >= 0)
  5514. 25e8: e3500000 cmp r0, #0
  5515. 25ec: ba000000 blt 25f4 <iref+0x64>
  5516. close(fd);
  5517. 25f0: eb000341 bl 32fc <close>
  5518. fd = open("xx", O_CREATE);
  5519. 25f4: e59f0068 ldr r0, [pc, #104] ; 2664 <iref+0xd4>
  5520. 25f8: e3a01c02 mov r1, #512 ; 0x200
  5521. 25fc: eb000365 bl 3398 <open>
  5522. if(fd >= 0)
  5523. 2600: e3500000 cmp r0, #0
  5524. 2604: ba000000 blt 260c <iref+0x7c>
  5525. close(fd);
  5526. 2608: eb00033b bl 32fc <close>
  5527. unlink("xx");
  5528. 260c: e59f0050 ldr r0, [pc, #80] ; 2664 <iref+0xd4>
  5529. 2610: eb00037a bl 3400 <unlink>
  5530. int i, fd;
  5531. printf(1, "empty file name\n");
  5532. // the 50 is NINODE
  5533. for(i = 0; i < 50 + 1; i++){
  5534. 2614: e2544001 subs r4, r4, #1
  5535. 2618: 1affffe2 bne 25a8 <iref+0x18>
  5536. if(fd >= 0)
  5537. close(fd);
  5538. unlink("xx");
  5539. }
  5540. chdir("/");
  5541. 261c: e59f0044 ldr r0, [pc, #68] ; 2668 <iref+0xd8>
  5542. 2620: eb0003aa bl 34d0 <chdir>
  5543. printf(1, "empty file name OK\n");
  5544. 2624: e3a00001 mov r0, #1
  5545. 2628: e59f103c ldr r1, [pc, #60] ; 266c <iref+0xdc>
  5546. }
  5547. 262c: e8bd4818 pop {r3, r4, fp, lr}
  5548. close(fd);
  5549. unlink("xx");
  5550. }
  5551. chdir("/");
  5552. printf(1, "empty file name OK\n");
  5553. 2630: ea000443 b 3744 <printf>
  5554. printf(1, "empty file name\n");
  5555. // the 50 is NINODE
  5556. for(i = 0; i < 50 + 1; i++){
  5557. if(mkdir("irefd") != 0){
  5558. printf(1, "mkdir irefd failed\n");
  5559. 2634: e3a00001 mov r0, #1
  5560. 2638: e59f1030 ldr r1, [pc, #48] ; 2670 <iref+0xe0>
  5561. 263c: eb000440 bl 3744 <printf>
  5562. exit();
  5563. 2640: eb0002ec bl 31f8 <exit>
  5564. }
  5565. if(chdir("irefd") != 0){
  5566. printf(1, "chdir irefd failed\n");
  5567. 2644: e3a00001 mov r0, #1
  5568. 2648: e59f1024 ldr r1, [pc, #36] ; 2674 <iref+0xe4>
  5569. 264c: eb00043c bl 3744 <printf>
  5570. exit();
  5571. 2650: eb0002e8 bl 31f8 <exit>
  5572. 2654: 00004d44 .word 0x00004d44
  5573. 2658: 00004d58 .word 0x00004d58
  5574. 265c: 00004b20 .word 0x00004b20
  5575. 2660: 00004cc0 .word 0x00004cc0
  5576. 2664: 00004c5c .word 0x00004c5c
  5577. 2668: 00004b90 .word 0x00004b90
  5578. 266c: 00004d88 .word 0x00004d88
  5579. 2670: 00004d60 .word 0x00004d60
  5580. 2674: 00004d74 .word 0x00004d74
  5581. 00002678 <forktest>:
  5582. // test that fork fails gracefully
  5583. // the forktest binary also does this, but it runs out of proc entries first.
  5584. // inside the bigger usertests binary, we run out of memory first.
  5585. void
  5586. forktest(void)
  5587. {
  5588. 2678: e92d4818 push {r3, r4, fp, lr}
  5589. int n, pid;
  5590. printf(1, "fork test\n");
  5591. 267c: e3a00001 mov r0, #1
  5592. // test that fork fails gracefully
  5593. // the forktest binary also does this, but it runs out of proc entries first.
  5594. // inside the bigger usertests binary, we run out of memory first.
  5595. void
  5596. forktest(void)
  5597. {
  5598. 2680: e28db00c add fp, sp, #12
  5599. int n, pid;
  5600. printf(1, "fork test\n");
  5601. 2684: e59f1088 ldr r1, [pc, #136] ; 2714 <forktest+0x9c>
  5602. 2688: eb00042d bl 3744 <printf>
  5603. for(n=0; n<1000; n++){
  5604. 268c: e3a04000 mov r4, #0
  5605. 2690: ea000003 b 26a4 <forktest+0x2c>
  5606. pid = fork();
  5607. if(pid < 0)
  5608. break;
  5609. if(pid == 0)
  5610. 2694: 0a00001a beq 2704 <forktest+0x8c>
  5611. {
  5612. int n, pid;
  5613. printf(1, "fork test\n");
  5614. for(n=0; n<1000; n++){
  5615. 2698: e2844001 add r4, r4, #1
  5616. 269c: e3540ffa cmp r4, #1000 ; 0x3e8
  5617. 26a0: 0a000010 beq 26e8 <forktest+0x70>
  5618. pid = fork();
  5619. 26a4: eb0002c6 bl 31c4 <fork>
  5620. if(pid < 0)
  5621. 26a8: e3500000 cmp r0, #0
  5622. 26ac: aafffff8 bge 2694 <forktest+0x1c>
  5623. if(n == 1000){
  5624. printf(1, "fork claimed to work 1000 times!\n");
  5625. exit();
  5626. }
  5627. for(; n > 0; n--){
  5628. 26b0: e3540000 cmp r4, #0
  5629. 26b4: 0a000004 beq 26cc <forktest+0x54>
  5630. if(wait() < 0){
  5631. 26b8: eb0002db bl 322c <wait>
  5632. 26bc: e3500000 cmp r0, #0
  5633. 26c0: ba00000c blt 26f8 <forktest+0x80>
  5634. if(n == 1000){
  5635. printf(1, "fork claimed to work 1000 times!\n");
  5636. exit();
  5637. }
  5638. for(; n > 0; n--){
  5639. 26c4: e2544001 subs r4, r4, #1
  5640. 26c8: 1afffffa bne 26b8 <forktest+0x40>
  5641. printf(1, "wait stopped early\n");
  5642. exit();
  5643. }
  5644. }
  5645. if(wait() != -1){
  5646. 26cc: eb0002d6 bl 322c <wait>
  5647. 26d0: e3700001 cmn r0, #1
  5648. printf(1, "wait got too many\n");
  5649. 26d4: e3a00001 mov r0, #1
  5650. printf(1, "wait stopped early\n");
  5651. exit();
  5652. }
  5653. }
  5654. if(wait() != -1){
  5655. 26d8: 1a00000a bne 2708 <forktest+0x90>
  5656. printf(1, "wait got too many\n");
  5657. exit();
  5658. }
  5659. printf(1, "fork test OK\n");
  5660. 26dc: e59f1034 ldr r1, [pc, #52] ; 2718 <forktest+0xa0>
  5661. }
  5662. 26e0: e8bd4818 pop {r3, r4, fp, lr}
  5663. if(wait() != -1){
  5664. printf(1, "wait got too many\n");
  5665. exit();
  5666. }
  5667. printf(1, "fork test OK\n");
  5668. 26e4: ea000416 b 3744 <printf>
  5669. if(pid == 0)
  5670. exit();
  5671. }
  5672. if(n == 1000){
  5673. printf(1, "fork claimed to work 1000 times!\n");
  5674. 26e8: e3a00001 mov r0, #1
  5675. 26ec: e59f1028 ldr r1, [pc, #40] ; 271c <forktest+0xa4>
  5676. 26f0: eb000413 bl 3744 <printf>
  5677. exit();
  5678. 26f4: eb0002bf bl 31f8 <exit>
  5679. }
  5680. for(; n > 0; n--){
  5681. if(wait() < 0){
  5682. printf(1, "wait stopped early\n");
  5683. 26f8: e3a00001 mov r0, #1
  5684. 26fc: e59f101c ldr r1, [pc, #28] ; 2720 <forktest+0xa8>
  5685. 2700: eb00040f bl 3744 <printf>
  5686. exit();
  5687. 2704: eb0002bb bl 31f8 <exit>
  5688. }
  5689. }
  5690. if(wait() != -1){
  5691. printf(1, "wait got too many\n");
  5692. 2708: e59f1014 ldr r1, [pc, #20] ; 2724 <forktest+0xac>
  5693. 270c: eb00040c bl 3744 <printf>
  5694. exit();
  5695. 2710: eb0002b8 bl 31f8 <exit>
  5696. 2714: 00004d9c .word 0x00004d9c
  5697. 2718: 00004dd0 .word 0x00004dd0
  5698. 271c: 00004de0 .word 0x00004de0
  5699. 2720: 00004da8 .word 0x00004da8
  5700. 2724: 00004dbc .word 0x00004dbc
  5701. 00002728 <sbrktest>:
  5702. printf(1, "fork test OK\n");
  5703. }
  5704. void
  5705. sbrktest(void)
  5706. {
  5707. 2728: e92d4df0 push {r4, r5, r6, r7, r8, sl, fp, lr}
  5708. 272c: e28db01c add fp, sp, #28
  5709. int fds[2], pid, pids[10], ppid;
  5710. char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch;
  5711. uint amt;
  5712. printf(stdout, "sbrk test\n");
  5713. 2730: e59f4358 ldr r4, [pc, #856] ; 2a90 <sbrktest+0x368>
  5714. printf(1, "fork test OK\n");
  5715. }
  5716. void
  5717. sbrktest(void)
  5718. {
  5719. 2734: e24dd040 sub sp, sp, #64 ; 0x40
  5720. int fds[2], pid, pids[10], ppid;
  5721. char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch;
  5722. uint amt;
  5723. printf(stdout, "sbrk test\n");
  5724. 2738: e59f1354 ldr r1, [pc, #852] ; 2a94 <sbrktest+0x36c>
  5725. 273c: e5940000 ldr r0, [r4]
  5726. 2740: eb0003ff bl 3744 <printf>
  5727. oldbrk = sbrk(0);
  5728. 2744: e3a00000 mov r0, #0
  5729. 2748: eb000387 bl 356c <sbrk>
  5730. // can one sbrk() less than a page?
  5731. a = sbrk(0);
  5732. int i;
  5733. for(i = 0; i < 5000; i++){
  5734. 274c: e59f8344 ldr r8, [pc, #836] ; 2a98 <sbrktest+0x370>
  5735. 2750: e3a07000 mov r7, #0
  5736. b = sbrk(1);
  5737. 2754: e3a0a001 mov sl, #1
  5738. int fds[2], pid, pids[10], ppid;
  5739. char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch;
  5740. uint amt;
  5741. printf(stdout, "sbrk test\n");
  5742. oldbrk = sbrk(0);
  5743. 2758: e1a06000 mov r6, r0
  5744. // can one sbrk() less than a page?
  5745. a = sbrk(0);
  5746. 275c: e3a00000 mov r0, #0
  5747. 2760: eb000381 bl 356c <sbrk>
  5748. 2764: e1a05000 mov r5, r0
  5749. int i;
  5750. for(i = 0; i < 5000; i++){
  5751. b = sbrk(1);
  5752. 2768: e3a00001 mov r0, #1
  5753. 276c: eb00037e bl 356c <sbrk>
  5754. if(b != a){
  5755. 2770: e1500005 cmp r0, r5
  5756. // can one sbrk() less than a page?
  5757. a = sbrk(0);
  5758. int i;
  5759. for(i = 0; i < 5000; i++){
  5760. b = sbrk(1);
  5761. 2774: e1a0c000 mov ip, r0
  5762. if(b != a){
  5763. 2778: 1a000085 bne 2994 <sbrktest+0x26c>
  5764. oldbrk = sbrk(0);
  5765. // can one sbrk() less than a page?
  5766. a = sbrk(0);
  5767. int i;
  5768. for(i = 0; i < 5000; i++){
  5769. 277c: e2877001 add r7, r7, #1
  5770. 2780: e1570008 cmp r7, r8
  5771. b = sbrk(1);
  5772. if(b != a){
  5773. printf(stdout, "sbrk test failed %d %x %x\n", i, a, b);
  5774. exit();
  5775. }
  5776. *b = 1;
  5777. 2784: e4c5a001 strb sl, [r5], #1
  5778. oldbrk = sbrk(0);
  5779. // can one sbrk() less than a page?
  5780. a = sbrk(0);
  5781. int i;
  5782. for(i = 0; i < 5000; i++){
  5783. 2788: 1afffff6 bne 2768 <sbrktest+0x40>
  5784. exit();
  5785. }
  5786. *b = 1;
  5787. a = b + 1;
  5788. }
  5789. pid = fork();
  5790. 278c: eb00028c bl 31c4 <fork>
  5791. if(pid < 0){
  5792. 2790: e2507000 subs r7, r0, #0
  5793. 2794: ba0000b9 blt 2a80 <sbrktest+0x358>
  5794. printf(stdout, "sbrk test fork failed\n");
  5795. exit();
  5796. }
  5797. c = sbrk(1);
  5798. 2798: e3a00001 mov r0, #1
  5799. 279c: eb000372 bl 356c <sbrk>
  5800. c = sbrk(1);
  5801. 27a0: e3a00001 mov r0, #1
  5802. 27a4: eb000370 bl 356c <sbrk>
  5803. if(c != a + 1){
  5804. 27a8: e2855001 add r5, r5, #1
  5805. 27ac: e1550000 cmp r5, r0
  5806. 27b0: 1a0000ae bne 2a70 <sbrktest+0x348>
  5807. printf(stdout, "sbrk test failed post-fork\n");
  5808. exit();
  5809. }
  5810. if(pid == 0)
  5811. 27b4: e3570000 cmp r7, #0
  5812. 27b8: 0a0000ab beq 2a6c <sbrktest+0x344>
  5813. exit();
  5814. wait();
  5815. 27bc: eb00029a bl 322c <wait>
  5816. // can one grow address space to something big?
  5817. #define BIG (100*1024*1024)
  5818. a = sbrk(0);
  5819. 27c0: e3a00000 mov r0, #0
  5820. 27c4: eb000368 bl 356c <sbrk>
  5821. 27c8: e1a05000 mov r5, r0
  5822. amt = (BIG) - (uint)a;
  5823. p = sbrk(amt);
  5824. 27cc: e2600519 rsb r0, r0, #104857600 ; 0x6400000
  5825. 27d0: eb000365 bl 356c <sbrk>
  5826. if (p != a) {
  5827. 27d4: e1550000 cmp r5, r0
  5828. 27d8: 1a0000a0 bne 2a60 <sbrktest+0x338>
  5829. printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n");
  5830. exit();
  5831. }
  5832. lastaddr = (char*) (BIG-1);
  5833. *lastaddr = 99;
  5834. 27dc: e59f32b8 ldr r3, [pc, #696] ; 2a9c <sbrktest+0x374>
  5835. 27e0: e3a02063 mov r2, #99 ; 0x63
  5836. // can one de-allocate?
  5837. a = sbrk(0);
  5838. 27e4: e3a00000 mov r0, #0
  5839. if (p != a) {
  5840. printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n");
  5841. exit();
  5842. }
  5843. lastaddr = (char*) (BIG-1);
  5844. *lastaddr = 99;
  5845. 27e8: e5c32000 strb r2, [r3]
  5846. // can one de-allocate?
  5847. a = sbrk(0);
  5848. 27ec: eb00035e bl 356c <sbrk>
  5849. 27f0: e1a05000 mov r5, r0
  5850. c = sbrk(-4096);
  5851. 27f4: e59f02a4 ldr r0, [pc, #676] ; 2aa0 <sbrktest+0x378>
  5852. 27f8: eb00035b bl 356c <sbrk>
  5853. if(c == (char*)0xffffffff){
  5854. 27fc: e3700001 cmn r0, #1
  5855. 2800: 0a000092 beq 2a50 <sbrktest+0x328>
  5856. printf(stdout, "sbrk could not deallocate\n");
  5857. exit();
  5858. }
  5859. c = sbrk(0);
  5860. 2804: e3a00000 mov r0, #0
  5861. 2808: eb000357 bl 356c <sbrk>
  5862. if(c != a - 4096){
  5863. 280c: e2452a01 sub r2, r5, #4096 ; 0x1000
  5864. 2810: e1500002 cmp r0, r2
  5865. c = sbrk(-4096);
  5866. if(c == (char*)0xffffffff){
  5867. printf(stdout, "sbrk could not deallocate\n");
  5868. exit();
  5869. }
  5870. c = sbrk(0);
  5871. 2814: e1a03000 mov r3, r0
  5872. if(c != a - 4096){
  5873. 2818: 1a000087 bne 2a3c <sbrktest+0x314>
  5874. printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c);
  5875. exit();
  5876. }
  5877. // can one re-allocate that page?
  5878. a = sbrk(0);
  5879. 281c: e3a00000 mov r0, #0
  5880. 2820: eb000351 bl 356c <sbrk>
  5881. 2824: e1a07000 mov r7, r0
  5882. c = sbrk(4096);
  5883. 2828: e3a00a01 mov r0, #4096 ; 0x1000
  5884. 282c: eb00034e bl 356c <sbrk>
  5885. if(c != a || sbrk(0) != a + 4096){
  5886. 2830: e1500007 cmp r0, r7
  5887. exit();
  5888. }
  5889. // can one re-allocate that page?
  5890. a = sbrk(0);
  5891. c = sbrk(4096);
  5892. 2834: e1a05000 mov r5, r0
  5893. if(c != a || sbrk(0) != a + 4096){
  5894. 2838: 1a000079 bne 2a24 <sbrktest+0x2fc>
  5895. 283c: e3a00000 mov r0, #0
  5896. 2840: eb000349 bl 356c <sbrk>
  5897. 2844: e2853a01 add r3, r5, #4096 ; 0x1000
  5898. 2848: e1530000 cmp r3, r0
  5899. 284c: 1a000074 bne 2a24 <sbrktest+0x2fc>
  5900. printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c);
  5901. exit();
  5902. }
  5903. if(*lastaddr == 99){
  5904. 2850: e59f3244 ldr r3, [pc, #580] ; 2a9c <sbrktest+0x374>
  5905. 2854: e5d33000 ldrb r3, [r3]
  5906. 2858: e3530063 cmp r3, #99 ; 0x63
  5907. 285c: 0a00006c beq 2a14 <sbrktest+0x2ec>
  5908. // should be zero
  5909. printf(stdout, "sbrk de-allocation didn't really deallocate\n");
  5910. exit();
  5911. }
  5912. a = sbrk(0);
  5913. 2860: e3a00000 mov r0, #0
  5914. 2864: eb000340 bl 356c <sbrk>
  5915. 2868: e1a05000 mov r5, r0
  5916. c = sbrk(-(sbrk(0) - oldbrk));
  5917. 286c: e3a00000 mov r0, #0
  5918. 2870: eb00033d bl 356c <sbrk>
  5919. 2874: e0600006 rsb r0, r0, r6
  5920. 2878: eb00033b bl 356c <sbrk>
  5921. if(c != a){
  5922. 287c: e1500005 cmp r0, r5
  5923. printf(stdout, "sbrk de-allocation didn't really deallocate\n");
  5924. exit();
  5925. }
  5926. a = sbrk(0);
  5927. c = sbrk(-(sbrk(0) - oldbrk));
  5928. 2880: e1a03000 mov r3, r0
  5929. if(c != a){
  5930. 2884: 1a00005d bne 2a00 <sbrktest+0x2d8>
  5931. printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
  5932. exit();
  5933. }
  5934. // can we read the kernel's memory?
  5935. for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
  5936. 2888: e59f8214 ldr r8, [pc, #532] ; 2aa4 <sbrktest+0x37c>
  5937. exit();
  5938. }
  5939. a = sbrk(0);
  5940. c = sbrk(-(sbrk(0) - oldbrk));
  5941. if(c != a){
  5942. 288c: e3a07102 mov r7, #-2147483648 ; 0x80000000
  5943. exit();
  5944. }
  5945. // can we read the kernel's memory?
  5946. for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
  5947. ppid = getpid();
  5948. 2890: eb000328 bl 3538 <getpid>
  5949. 2894: e1a05000 mov r5, r0
  5950. pid = fork();
  5951. 2898: eb000249 bl 31c4 <fork>
  5952. if(pid < 0){
  5953. 289c: e3500000 cmp r0, #0
  5954. 28a0: ba000052 blt 29f0 <sbrktest+0x2c8>
  5955. printf(stdout, "fork failed\n");
  5956. exit();
  5957. }
  5958. if(pid == 0){
  5959. 28a4: 0a000049 beq 29d0 <sbrktest+0x2a8>
  5960. printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
  5961. exit();
  5962. }
  5963. // can we read the kernel's memory?
  5964. for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
  5965. 28a8: e2877cc3 add r7, r7, #49920 ; 0xc300
  5966. 28ac: e2877050 add r7, r7, #80 ; 0x50
  5967. if(pid == 0){
  5968. printf(stdout, "oops could read %x = %x\n", a, *a);
  5969. kill(ppid);
  5970. exit();
  5971. }
  5972. wait();
  5973. 28b0: eb00025d bl 322c <wait>
  5974. printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
  5975. exit();
  5976. }
  5977. // can we read the kernel's memory?
  5978. for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
  5979. 28b4: e1570008 cmp r7, r8
  5980. 28b8: 1afffff4 bne 2890 <sbrktest+0x168>
  5981. wait();
  5982. }
  5983. // if we run the system out of memory, does it clean up the last
  5984. // failed allocation?
  5985. if(pipe(fds) != 0){
  5986. 28bc: e24b0028 sub r0, fp, #40 ; 0x28
  5987. 28c0: eb000266 bl 3260 <pipe>
  5988. 28c4: e3500000 cmp r0, #0
  5989. printf(1, "pipe() failed\n");
  5990. exit();
  5991. 28c8: 024b5054 subeq r5, fp, #84 ; 0x54
  5992. printf(1, "fork test OK\n");
  5993. }
  5994. void
  5995. sbrktest(void)
  5996. 28cc: 024b802c subeq r8, fp, #44 ; 0x2c
  5997. 28d0: 01a07005 moveq r7, r5
  5998. wait();
  5999. }
  6000. // if we run the system out of memory, does it clean up the last
  6001. // failed allocation?
  6002. if(pipe(fds) != 0){
  6003. 28d4: 1a000039 bne 29c0 <sbrktest+0x298>
  6004. printf(1, "pipe() failed\n");
  6005. exit();
  6006. }
  6007. for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
  6008. if((pids[i] = fork()) == 0){
  6009. 28d8: eb000239 bl 31c4 <fork>
  6010. 28dc: e3500000 cmp r0, #0
  6011. 28e0: e5a70004 str r0, [r7, #4]!
  6012. 28e4: 0a000020 beq 296c <sbrktest+0x244>
  6013. sbrk(BIG - (uint)sbrk(0));
  6014. write(fds[1], "x", 1);
  6015. // sit around until killed
  6016. for(;;) sleep(1000);
  6017. }
  6018. if(pids[i] != -1)
  6019. 28e8: e3700001 cmn r0, #1
  6020. 28ec: 0a000003 beq 2900 <sbrktest+0x1d8>
  6021. read(fds[0], &scratch, 1);
  6022. 28f0: e51b0028 ldr r0, [fp, #-40] ; 0x28
  6023. 28f4: e24b101d sub r1, fp, #29
  6024. 28f8: e3a02001 mov r2, #1
  6025. 28fc: eb000264 bl 3294 <read>
  6026. if(pipe(fds) != 0){
  6027. printf(1, "pipe() failed\n");
  6028. exit();
  6029. }
  6030. for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
  6031. 2900: e1570008 cmp r7, r8
  6032. 2904: 1afffff3 bne 28d8 <sbrktest+0x1b0>
  6033. if(pids[i] != -1)
  6034. read(fds[0], &scratch, 1);
  6035. }
  6036. // if those failed allocations freed up the pages they did allocate,
  6037. // we'll be able to allocate here
  6038. c = sbrk(4096);
  6039. 2908: e3a00a01 mov r0, #4096 ; 0x1000
  6040. 290c: eb000316 bl 356c <sbrk>
  6041. 2910: e1a07000 mov r7, r0
  6042. for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
  6043. if(pids[i] == -1)
  6044. 2914: e5b50004 ldr r0, [r5, #4]!
  6045. 2918: e3700001 cmn r0, #1
  6046. 291c: 0a000001 beq 2928 <sbrktest+0x200>
  6047. continue;
  6048. kill(pids[i]);
  6049. 2920: eb000282 bl 3330 <kill>
  6050. wait();
  6051. 2924: eb000240 bl 322c <wait>
  6052. read(fds[0], &scratch, 1);
  6053. }
  6054. // if those failed allocations freed up the pages they did allocate,
  6055. // we'll be able to allocate here
  6056. c = sbrk(4096);
  6057. for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
  6058. 2928: e1580005 cmp r8, r5
  6059. 292c: 1afffff8 bne 2914 <sbrktest+0x1ec>
  6060. if(pids[i] == -1)
  6061. continue;
  6062. kill(pids[i]);
  6063. wait();
  6064. }
  6065. if(c == (char*)0xffffffff){
  6066. 2930: e3770001 cmn r7, #1
  6067. 2934: 0a00001d beq 29b0 <sbrktest+0x288>
  6068. printf(stdout, "failed sbrk leaked memory\n");
  6069. exit();
  6070. }
  6071. if(sbrk(0) > oldbrk)
  6072. 2938: e3a00000 mov r0, #0
  6073. 293c: eb00030a bl 356c <sbrk>
  6074. 2940: e1560000 cmp r6, r0
  6075. 2944: 2a000003 bcs 2958 <sbrktest+0x230>
  6076. sbrk(-(sbrk(0) - oldbrk));
  6077. 2948: e3a00000 mov r0, #0
  6078. 294c: eb000306 bl 356c <sbrk>
  6079. 2950: e0600006 rsb r0, r0, r6
  6080. 2954: eb000304 bl 356c <sbrk>
  6081. printf(stdout, "sbrk test OK\n");
  6082. 2958: e5940000 ldr r0, [r4]
  6083. 295c: e59f1144 ldr r1, [pc, #324] ; 2aa8 <sbrktest+0x380>
  6084. 2960: eb000377 bl 3744 <printf>
  6085. }
  6086. 2964: e24bd01c sub sp, fp, #28
  6087. 2968: e8bd8df0 pop {r4, r5, r6, r7, r8, sl, fp, pc}
  6088. }
  6089. for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
  6090. if((pids[i] = fork()) == 0){
  6091. // allocate a lot of memory
  6092. sbrk(BIG - (uint)sbrk(0));
  6093. 296c: eb0002fe bl 356c <sbrk>
  6094. 2970: e2600519 rsb r0, r0, #104857600 ; 0x6400000
  6095. 2974: eb0002fc bl 356c <sbrk>
  6096. write(fds[1], "x", 1);
  6097. 2978: e51b0024 ldr r0, [fp, #-36] ; 0x24
  6098. 297c: e59f1128 ldr r1, [pc, #296] ; 2aac <sbrktest+0x384>
  6099. 2980: e3a02001 mov r2, #1
  6100. 2984: eb00024f bl 32c8 <write>
  6101. // sit around until killed
  6102. for(;;) sleep(1000);
  6103. 2988: e3a00ffa mov r0, #1000 ; 0x3e8
  6104. 298c: eb000303 bl 35a0 <sleep>
  6105. 2990: eafffffc b 2988 <sbrktest+0x260>
  6106. a = sbrk(0);
  6107. int i;
  6108. for(i = 0; i < 5000; i++){
  6109. b = sbrk(1);
  6110. if(b != a){
  6111. printf(stdout, "sbrk test failed %d %x %x\n", i, a, b);
  6112. 2994: e5940000 ldr r0, [r4]
  6113. 2998: e59f1110 ldr r1, [pc, #272] ; 2ab0 <sbrktest+0x388>
  6114. 299c: e1a02007 mov r2, r7
  6115. 29a0: e1a03005 mov r3, r5
  6116. 29a4: e58dc000 str ip, [sp]
  6117. 29a8: eb000365 bl 3744 <printf>
  6118. exit();
  6119. 29ac: eb000211 bl 31f8 <exit>
  6120. continue;
  6121. kill(pids[i]);
  6122. wait();
  6123. }
  6124. if(c == (char*)0xffffffff){
  6125. printf(stdout, "failed sbrk leaked memory\n");
  6126. 29b0: e5940000 ldr r0, [r4]
  6127. 29b4: e59f10f8 ldr r1, [pc, #248] ; 2ab4 <sbrktest+0x38c>
  6128. 29b8: eb000361 bl 3744 <printf>
  6129. exit();
  6130. 29bc: eb00020d bl 31f8 <exit>
  6131. }
  6132. // if we run the system out of memory, does it clean up the last
  6133. // failed allocation?
  6134. if(pipe(fds) != 0){
  6135. printf(1, "pipe() failed\n");
  6136. 29c0: e3a00001 mov r0, #1
  6137. 29c4: e59f10ec ldr r1, [pc, #236] ; 2ab8 <sbrktest+0x390>
  6138. 29c8: eb00035d bl 3744 <printf>
  6139. exit();
  6140. 29cc: eb000209 bl 31f8 <exit>
  6141. if(pid < 0){
  6142. printf(stdout, "fork failed\n");
  6143. exit();
  6144. }
  6145. if(pid == 0){
  6146. printf(stdout, "oops could read %x = %x\n", a, *a);
  6147. 29d0: e1a02007 mov r2, r7
  6148. 29d4: e59f10e0 ldr r1, [pc, #224] ; 2abc <sbrktest+0x394>
  6149. 29d8: e5d73000 ldrb r3, [r7]
  6150. 29dc: e5940000 ldr r0, [r4]
  6151. 29e0: eb000357 bl 3744 <printf>
  6152. kill(ppid);
  6153. 29e4: e1a00005 mov r0, r5
  6154. 29e8: eb000250 bl 3330 <kill>
  6155. exit();
  6156. 29ec: eb000201 bl 31f8 <exit>
  6157. // can we read the kernel's memory?
  6158. for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
  6159. ppid = getpid();
  6160. pid = fork();
  6161. if(pid < 0){
  6162. printf(stdout, "fork failed\n");
  6163. 29f0: e5940000 ldr r0, [r4]
  6164. 29f4: e59f10c4 ldr r1, [pc, #196] ; 2ac0 <sbrktest+0x398>
  6165. 29f8: eb000351 bl 3744 <printf>
  6166. exit();
  6167. 29fc: eb0001fd bl 31f8 <exit>
  6168. }
  6169. a = sbrk(0);
  6170. c = sbrk(-(sbrk(0) - oldbrk));
  6171. if(c != a){
  6172. printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
  6173. 2a00: e5940000 ldr r0, [r4]
  6174. 2a04: e59f10b8 ldr r1, [pc, #184] ; 2ac4 <sbrktest+0x39c>
  6175. 2a08: e1a02005 mov r2, r5
  6176. 2a0c: eb00034c bl 3744 <printf>
  6177. exit();
  6178. 2a10: eb0001f8 bl 31f8 <exit>
  6179. printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c);
  6180. exit();
  6181. }
  6182. if(*lastaddr == 99){
  6183. // should be zero
  6184. printf(stdout, "sbrk de-allocation didn't really deallocate\n");
  6185. 2a14: e5940000 ldr r0, [r4]
  6186. 2a18: e59f10a8 ldr r1, [pc, #168] ; 2ac8 <sbrktest+0x3a0>
  6187. 2a1c: eb000348 bl 3744 <printf>
  6188. exit();
  6189. 2a20: eb0001f4 bl 31f8 <exit>
  6190. // can one re-allocate that page?
  6191. a = sbrk(0);
  6192. c = sbrk(4096);
  6193. if(c != a || sbrk(0) != a + 4096){
  6194. printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c);
  6195. 2a24: e5940000 ldr r0, [r4]
  6196. 2a28: e59f109c ldr r1, [pc, #156] ; 2acc <sbrktest+0x3a4>
  6197. 2a2c: e1a02007 mov r2, r7
  6198. 2a30: e1a03005 mov r3, r5
  6199. 2a34: eb000342 bl 3744 <printf>
  6200. exit();
  6201. 2a38: eb0001ee bl 31f8 <exit>
  6202. printf(stdout, "sbrk could not deallocate\n");
  6203. exit();
  6204. }
  6205. c = sbrk(0);
  6206. if(c != a - 4096){
  6207. printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c);
  6208. 2a3c: e5940000 ldr r0, [r4]
  6209. 2a40: e59f1088 ldr r1, [pc, #136] ; 2ad0 <sbrktest+0x3a8>
  6210. 2a44: e1a02005 mov r2, r5
  6211. 2a48: eb00033d bl 3744 <printf>
  6212. exit();
  6213. 2a4c: eb0001e9 bl 31f8 <exit>
  6214. // can one de-allocate?
  6215. a = sbrk(0);
  6216. c = sbrk(-4096);
  6217. if(c == (char*)0xffffffff){
  6218. printf(stdout, "sbrk could not deallocate\n");
  6219. 2a50: e5940000 ldr r0, [r4]
  6220. 2a54: e59f1078 ldr r1, [pc, #120] ; 2ad4 <sbrktest+0x3ac>
  6221. 2a58: eb000339 bl 3744 <printf>
  6222. exit();
  6223. 2a5c: eb0001e5 bl 31f8 <exit>
  6224. #define BIG (100*1024*1024)
  6225. a = sbrk(0);
  6226. amt = (BIG) - (uint)a;
  6227. p = sbrk(amt);
  6228. if (p != a) {
  6229. printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n");
  6230. 2a60: e5940000 ldr r0, [r4]
  6231. 2a64: e59f106c ldr r1, [pc, #108] ; 2ad8 <sbrktest+0x3b0>
  6232. 2a68: eb000335 bl 3744 <printf>
  6233. exit();
  6234. 2a6c: eb0001e1 bl 31f8 <exit>
  6235. exit();
  6236. }
  6237. c = sbrk(1);
  6238. c = sbrk(1);
  6239. if(c != a + 1){
  6240. printf(stdout, "sbrk test failed post-fork\n");
  6241. 2a70: e5940000 ldr r0, [r4]
  6242. 2a74: e59f1060 ldr r1, [pc, #96] ; 2adc <sbrktest+0x3b4>
  6243. 2a78: eb000331 bl 3744 <printf>
  6244. exit();
  6245. 2a7c: eb0001dd bl 31f8 <exit>
  6246. *b = 1;
  6247. a = b + 1;
  6248. }
  6249. pid = fork();
  6250. if(pid < 0){
  6251. printf(stdout, "sbrk test fork failed\n");
  6252. 2a80: e5940000 ldr r0, [r4]
  6253. 2a84: e59f1054 ldr r1, [pc, #84] ; 2ae0 <sbrktest+0x3b8>
  6254. 2a88: eb00032d bl 3744 <printf>
  6255. exit();
  6256. 2a8c: eb0001d9 bl 31f8 <exit>
  6257. 2a90: 00005244 .word 0x00005244
  6258. 2a94: 00004e04 .word 0x00004e04
  6259. 2a98: 00001388 .word 0x00001388
  6260. 2a9c: 063fffff .word 0x063fffff
  6261. 2aa0: fffff000 .word 0xfffff000
  6262. 2aa4: 801e8480 .word 0x801e8480
  6263. 2aa8: 00004fa8 .word 0x00004fa8
  6264. 2aac: 00004760 .word 0x00004760
  6265. 2ab0: 00004e10 .word 0x00004e10
  6266. 2ab4: 00004f8c .word 0x00004f8c
  6267. 2ab8: 00003d90 .word 0x00003d90
  6268. 2abc: 00004f70 .word 0x00004f70
  6269. 2ac0: 00005148 .word 0x00005148
  6270. 2ac4: 00004f4c .word 0x00004f4c
  6271. 2ac8: 00004f1c .word 0x00004f1c
  6272. 2acc: 00004ef4 .word 0x00004ef4
  6273. 2ad0: 00004ebc .word 0x00004ebc
  6274. 2ad4: 00004ea0 .word 0x00004ea0
  6275. 2ad8: 00004e60 .word 0x00004e60
  6276. 2adc: 00004e44 .word 0x00004e44
  6277. 2ae0: 00004e2c .word 0x00004e2c
  6278. 00002ae4 <validateint>:
  6279. printf(stdout, "sbrk test OK\n");
  6280. }
  6281. void
  6282. validateint(int *p)
  6283. {
  6284. 2ae4: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  6285. 2ae8: e28db000 add fp, sp, #0
  6286. sleep(*p);
  6287. 2aec: e5900000 ldr r0, [r0]
  6288. }
  6289. 2af0: e28bd000 add sp, fp, #0
  6290. 2af4: e8bd0800 pop {fp}
  6291. }
  6292. void
  6293. validateint(int *p)
  6294. {
  6295. sleep(*p);
  6296. 2af8: ea0002a8 b 35a0 <sleep>
  6297. 00002afc <validatetest>:
  6298. }
  6299. void
  6300. validatetest(void)
  6301. {
  6302. 2afc: e92d4878 push {r3, r4, r5, r6, fp, lr}
  6303. 2b00: e28db014 add fp, sp, #20
  6304. int hi, pid;
  6305. uint p;
  6306. printf(stdout, "validate test\n");
  6307. 2b04: e59f5080 ldr r5, [pc, #128] ; 2b8c <validatetest+0x90>
  6308. 2b08: e59f1080 ldr r1, [pc, #128] ; 2b90 <validatetest+0x94>
  6309. hi = 1100*1024;
  6310. for(p = 0; p <= (uint)hi; p += 4096){
  6311. 2b0c: e3a04000 mov r4, #0
  6312. validatetest(void)
  6313. {
  6314. int hi, pid;
  6315. uint p;
  6316. printf(stdout, "validate test\n");
  6317. 2b10: e5950000 ldr r0, [r5]
  6318. 2b14: eb00030a bl 3744 <printf>
  6319. hi = 1100*1024;
  6320. for(p = 0; p <= (uint)hi; p += 4096){
  6321. if((pid = fork()) == 0){
  6322. 2b18: eb0001a9 bl 31c4 <fork>
  6323. 2b1c: e2506000 subs r6, r0, #0
  6324. 2b20: 0a000012 beq 2b70 <validatetest+0x74>
  6325. // try to crash the kernel by passing in a badly placed integer
  6326. validateint((int*)p);
  6327. exit();
  6328. }
  6329. sleep(0);
  6330. 2b24: e3a00000 mov r0, #0
  6331. 2b28: eb00029c bl 35a0 <sleep>
  6332. sleep(0);
  6333. 2b2c: e3a00000 mov r0, #0
  6334. 2b30: eb00029a bl 35a0 <sleep>
  6335. kill(pid);
  6336. 2b34: e1a00006 mov r0, r6
  6337. 2b38: eb0001fc bl 3330 <kill>
  6338. wait();
  6339. 2b3c: eb0001ba bl 322c <wait>
  6340. // try to crash the kernel by passing in a bad string pointer
  6341. if(link("nosuchfile", (char*)p) != -1){
  6342. 2b40: e59f004c ldr r0, [pc, #76] ; 2b94 <validatetest+0x98>
  6343. 2b44: e1a01004 mov r1, r4
  6344. 2b48: eb000246 bl 3468 <link>
  6345. 2b4c: e3700001 cmn r0, #1
  6346. 2b50: 1a000009 bne 2b7c <validatetest+0x80>
  6347. uint p;
  6348. printf(stdout, "validate test\n");
  6349. hi = 1100*1024;
  6350. for(p = 0; p <= (uint)hi; p += 4096){
  6351. 2b54: e2844a01 add r4, r4, #4096 ; 0x1000
  6352. 2b58: e3540945 cmp r4, #1130496 ; 0x114000
  6353. 2b5c: 1affffed bne 2b18 <validatetest+0x1c>
  6354. printf(stdout, "link should not succeed\n");
  6355. exit();
  6356. }
  6357. }
  6358. printf(stdout, "validate ok\n");
  6359. 2b60: e5950000 ldr r0, [r5]
  6360. 2b64: e59f102c ldr r1, [pc, #44] ; 2b98 <validatetest+0x9c>
  6361. }
  6362. 2b68: e8bd4878 pop {r3, r4, r5, r6, fp, lr}
  6363. printf(stdout, "link should not succeed\n");
  6364. exit();
  6365. }
  6366. }
  6367. printf(stdout, "validate ok\n");
  6368. 2b6c: ea0002f4 b 3744 <printf>
  6369. hi = 1100*1024;
  6370. for(p = 0; p <= (uint)hi; p += 4096){
  6371. if((pid = fork()) == 0){
  6372. // try to crash the kernel by passing in a badly placed integer
  6373. validateint((int*)p);
  6374. 2b70: e1a00004 mov r0, r4
  6375. 2b74: ebffffda bl 2ae4 <validateint>
  6376. exit();
  6377. 2b78: eb00019e bl 31f8 <exit>
  6378. kill(pid);
  6379. wait();
  6380. // try to crash the kernel by passing in a bad string pointer
  6381. if(link("nosuchfile", (char*)p) != -1){
  6382. printf(stdout, "link should not succeed\n");
  6383. 2b7c: e5950000 ldr r0, [r5]
  6384. 2b80: e59f1014 ldr r1, [pc, #20] ; 2b9c <validatetest+0xa0>
  6385. 2b84: eb0002ee bl 3744 <printf>
  6386. exit();
  6387. 2b88: eb00019a bl 31f8 <exit>
  6388. 2b8c: 00005244 .word 0x00005244
  6389. 2b90: 00004fb8 .word 0x00004fb8
  6390. 2b94: 00004fc8 .word 0x00004fc8
  6391. 2b98: 00004ff0 .word 0x00004ff0
  6392. 2b9c: 00004fd4 .word 0x00004fd4
  6393. 00002ba0 <bsstest>:
  6394. // does unintialized data start out zero?
  6395. char uninit[10000];
  6396. void
  6397. bsstest(void)
  6398. {
  6399. 2ba0: e92d4818 push {r3, r4, fp, lr}
  6400. 2ba4: e28db00c add fp, sp, #12
  6401. int i;
  6402. printf(stdout, "bss test\n");
  6403. 2ba8: e59f4050 ldr r4, [pc, #80] ; 2c00 <bsstest+0x60>
  6404. 2bac: e59f1050 ldr r1, [pc, #80] ; 2c04 <bsstest+0x64>
  6405. 2bb0: e5940000 ldr r0, [r4]
  6406. 2bb4: eb0002e2 bl 3744 <printf>
  6407. for(i = 0; i < sizeof(uninit); i++){
  6408. if(uninit[i] != '\0'){
  6409. 2bb8: e59f3048 ldr r3, [pc, #72] ; 2c08 <bsstest+0x68>
  6410. 2bbc: e5d32000 ldrb r2, [r3]
  6411. 2bc0: e3520000 cmp r2, #0
  6412. 2bc4: 1a000009 bne 2bf0 <bsstest+0x50>
  6413. }
  6414. // does unintialized data start out zero?
  6415. char uninit[10000];
  6416. void
  6417. bsstest(void)
  6418. 2bc8: e59f103c ldr r1, [pc, #60] ; 2c0c <bsstest+0x6c>
  6419. {
  6420. int i;
  6421. printf(stdout, "bss test\n");
  6422. for(i = 0; i < sizeof(uninit); i++){
  6423. if(uninit[i] != '\0'){
  6424. 2bcc: e5f32001 ldrb r2, [r3, #1]!
  6425. 2bd0: e3520000 cmp r2, #0
  6426. 2bd4: 1a000005 bne 2bf0 <bsstest+0x50>
  6427. bsstest(void)
  6428. {
  6429. int i;
  6430. printf(stdout, "bss test\n");
  6431. for(i = 0; i < sizeof(uninit); i++){
  6432. 2bd8: e1530001 cmp r3, r1
  6433. 2bdc: 1afffffa bne 2bcc <bsstest+0x2c>
  6434. if(uninit[i] != '\0'){
  6435. printf(stdout, "bss test failed\n");
  6436. exit();
  6437. }
  6438. }
  6439. printf(stdout, "bss test ok\n");
  6440. 2be0: e5940000 ldr r0, [r4]
  6441. 2be4: e59f1024 ldr r1, [pc, #36] ; 2c10 <bsstest+0x70>
  6442. }
  6443. 2be8: e8bd4818 pop {r3, r4, fp, lr}
  6444. if(uninit[i] != '\0'){
  6445. printf(stdout, "bss test failed\n");
  6446. exit();
  6447. }
  6448. }
  6449. printf(stdout, "bss test ok\n");
  6450. 2bec: ea0002d4 b 3744 <printf>
  6451. int i;
  6452. printf(stdout, "bss test\n");
  6453. for(i = 0; i < sizeof(uninit); i++){
  6454. if(uninit[i] != '\0'){
  6455. printf(stdout, "bss test failed\n");
  6456. 2bf0: e5940000 ldr r0, [r4]
  6457. 2bf4: e59f1018 ldr r1, [pc, #24] ; 2c14 <bsstest+0x74>
  6458. 2bf8: eb0002d1 bl 3744 <printf>
  6459. exit();
  6460. 2bfc: eb00017d bl 31f8 <exit>
  6461. 2c00: 00005244 .word 0x00005244
  6462. 2c04: 00005000 .word 0x00005000
  6463. 2c08: 000052ec .word 0x000052ec
  6464. 2c0c: 000079fb .word 0x000079fb
  6465. 2c10: 00005020 .word 0x00005020
  6466. 2c14: 0000500c .word 0x0000500c
  6467. 00002c18 <bigargtest>:
  6468. // does exec return an error if the arguments
  6469. // are larger than a page? or does it write
  6470. // below the stack and wreck the instructions/data?
  6471. void
  6472. bigargtest(void)
  6473. {
  6474. 2c18: e92d4830 push {r4, r5, fp, lr}
  6475. 2c1c: e28db00c add fp, sp, #12
  6476. int pid, fd;
  6477. unlink("bigarg-ok");
  6478. 2c20: e59f00c0 ldr r0, [pc, #192] ; 2ce8 <bigargtest+0xd0>
  6479. 2c24: eb0001f5 bl 3400 <unlink>
  6480. pid = fork();
  6481. 2c28: eb000165 bl 31c4 <fork>
  6482. if(pid == 0){
  6483. 2c2c: e3500000 cmp r0, #0
  6484. 2c30: 0a00000a beq 2c60 <bigargtest+0x48>
  6485. exec("echo", args);
  6486. printf(stdout, "bigarg test ok\n");
  6487. fd = open("bigarg-ok", O_CREATE);
  6488. close(fd);
  6489. exit();
  6490. } else if(pid < 0){
  6491. 2c34: ba000026 blt 2cd4 <bigargtest+0xbc>
  6492. printf(stdout, "bigargtest: fork failed\n");
  6493. exit();
  6494. }
  6495. wait();
  6496. 2c38: eb00017b bl 322c <wait>
  6497. fd = open("bigarg-ok", 0);
  6498. 2c3c: e59f00a4 ldr r0, [pc, #164] ; 2ce8 <bigargtest+0xd0>
  6499. 2c40: e3a01000 mov r1, #0
  6500. 2c44: eb0001d3 bl 3398 <open>
  6501. if(fd < 0){
  6502. 2c48: e3500000 cmp r0, #0
  6503. 2c4c: ba00001b blt 2cc0 <bigargtest+0xa8>
  6504. printf(stdout, "bigarg test failed!\n");
  6505. exit();
  6506. }
  6507. close(fd);
  6508. 2c50: eb0001a9 bl 32fc <close>
  6509. unlink("bigarg-ok");
  6510. 2c54: e59f008c ldr r0, [pc, #140] ; 2ce8 <bigargtest+0xd0>
  6511. }
  6512. 2c58: e8bd4830 pop {r4, r5, fp, lr}
  6513. if(fd < 0){
  6514. printf(stdout, "bigarg test failed!\n");
  6515. exit();
  6516. }
  6517. close(fd);
  6518. unlink("bigarg-ok");
  6519. 2c5c: ea0001e7 b 3400 <unlink>
  6520. {
  6521. int pid, fd;
  6522. unlink("bigarg-ok");
  6523. pid = fork();
  6524. if(pid == 0){
  6525. 2c60: e59f3084 ldr r3, [pc, #132] ; 2cec <bigargtest+0xd4>
  6526. 2c64: e59f1084 ldr r1, [pc, #132] ; 2cf0 <bigargtest+0xd8>
  6527. // does exec return an error if the arguments
  6528. // are larger than a page? or does it write
  6529. // below the stack and wreck the instructions/data?
  6530. void
  6531. bigargtest(void)
  6532. 2c68: e283207c add r2, r3, #124 ; 0x7c
  6533. pid = fork();
  6534. if(pid == 0){
  6535. static char *args[MAXARG];
  6536. int i;
  6537. for(i = 0; i < MAXARG-1; i++)
  6538. args[i] = "bigargs test: failed\n ";
  6539. 2c6c: e5a31004 str r1, [r3, #4]!
  6540. unlink("bigarg-ok");
  6541. pid = fork();
  6542. if(pid == 0){
  6543. static char *args[MAXARG];
  6544. int i;
  6545. for(i = 0; i < MAXARG-1; i++)
  6546. 2c70: e1530002 cmp r3, r2
  6547. 2c74: 1afffffc bne 2c6c <bigargtest+0x54>
  6548. args[i] = "bigargs test: failed\n ";
  6549. args[MAXARG-1] = 0;
  6550. printf(stdout, "bigarg test\n");
  6551. 2c78: e59f4074 ldr r4, [pc, #116] ; 2cf4 <bigargtest+0xdc>
  6552. if(pid == 0){
  6553. static char *args[MAXARG];
  6554. int i;
  6555. for(i = 0; i < MAXARG-1; i++)
  6556. args[i] = "bigargs test: failed\n ";
  6557. args[MAXARG-1] = 0;
  6558. 2c7c: e59f5074 ldr r5, [pc, #116] ; 2cf8 <bigargtest+0xe0>
  6559. 2c80: e3a03000 mov r3, #0
  6560. printf(stdout, "bigarg test\n");
  6561. 2c84: e59f1070 ldr r1, [pc, #112] ; 2cfc <bigargtest+0xe4>
  6562. 2c88: e5940000 ldr r0, [r4]
  6563. if(pid == 0){
  6564. static char *args[MAXARG];
  6565. int i;
  6566. for(i = 0; i < MAXARG-1; i++)
  6567. args[i] = "bigargs test: failed\n ";
  6568. args[MAXARG-1] = 0;
  6569. 2c8c: e585307c str r3, [r5, #124] ; 0x7c
  6570. printf(stdout, "bigarg test\n");
  6571. 2c90: eb0002ab bl 3744 <printf>
  6572. exec("echo", args);
  6573. 2c94: e1a01005 mov r1, r5
  6574. 2c98: e59f0060 ldr r0, [pc, #96] ; 2d00 <bigargtest+0xe8>
  6575. 2c9c: eb0001b0 bl 3364 <exec>
  6576. printf(stdout, "bigarg test ok\n");
  6577. 2ca0: e5940000 ldr r0, [r4]
  6578. 2ca4: e59f1058 ldr r1, [pc, #88] ; 2d04 <bigargtest+0xec>
  6579. 2ca8: eb0002a5 bl 3744 <printf>
  6580. fd = open("bigarg-ok", O_CREATE);
  6581. 2cac: e3a01c02 mov r1, #512 ; 0x200
  6582. 2cb0: e59f0030 ldr r0, [pc, #48] ; 2ce8 <bigargtest+0xd0>
  6583. 2cb4: eb0001b7 bl 3398 <open>
  6584. close(fd);
  6585. 2cb8: eb00018f bl 32fc <close>
  6586. exit();
  6587. 2cbc: eb00014d bl 31f8 <exit>
  6588. exit();
  6589. }
  6590. wait();
  6591. fd = open("bigarg-ok", 0);
  6592. if(fd < 0){
  6593. printf(stdout, "bigarg test failed!\n");
  6594. 2cc0: e59f302c ldr r3, [pc, #44] ; 2cf4 <bigargtest+0xdc>
  6595. 2cc4: e59f103c ldr r1, [pc, #60] ; 2d08 <bigargtest+0xf0>
  6596. 2cc8: e5930000 ldr r0, [r3]
  6597. 2ccc: eb00029c bl 3744 <printf>
  6598. exit();
  6599. 2cd0: eb000148 bl 31f8 <exit>
  6600. printf(stdout, "bigarg test ok\n");
  6601. fd = open("bigarg-ok", O_CREATE);
  6602. close(fd);
  6603. exit();
  6604. } else if(pid < 0){
  6605. printf(stdout, "bigargtest: fork failed\n");
  6606. 2cd4: e59f3018 ldr r3, [pc, #24] ; 2cf4 <bigargtest+0xdc>
  6607. 2cd8: e59f102c ldr r1, [pc, #44] ; 2d0c <bigargtest+0xf4>
  6608. 2cdc: e5930000 ldr r0, [r3]
  6609. 2ce0: eb000297 bl 3744 <printf>
  6610. exit();
  6611. 2ce4: eb000143 bl 31f8 <exit>
  6612. 2ce8: 00005030 .word 0x00005030
  6613. 2cec: 0000525c .word 0x0000525c
  6614. 2cf0: 0000503c .word 0x0000503c
  6615. 2cf4: 00005244 .word 0x00005244
  6616. 2cf8: 00005260 .word 0x00005260
  6617. 2cfc: 0000511c .word 0x0000511c
  6618. 2d00: 00003a38 .word 0x00003a38
  6619. 2d04: 0000512c .word 0x0000512c
  6620. 2d08: 00005158 .word 0x00005158
  6621. 2d0c: 0000513c .word 0x0000513c
  6622. 00002d10 <fsfull>:
  6623. // what happens when the file system runs out of blocks?
  6624. // answer: balloc panics, so this test is not useful.
  6625. void
  6626. fsfull()
  6627. {
  6628. 2d10: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  6629. 2d14: e28db020 add fp, sp, #32
  6630. 2d18: e24dd044 sub sp, sp, #68 ; 0x44
  6631. int nfiles;
  6632. int fsblocks = 0;
  6633. printf(1, "fsfull test\n");
  6634. 2d1c: e3a00001 mov r0, #1
  6635. 2d20: e59f11cc ldr r1, [pc, #460] ; 2ef4 <fsfull+0x1e4>
  6636. 2d24: eb000286 bl 3744 <printf>
  6637. for(nfiles = 0; ; nfiles++){
  6638. char name[64];
  6639. name[0] = 'f';
  6640. name[1] = '0' + nfiles / 1000;
  6641. 2d28: e59f91c8 ldr r9, [pc, #456] ; 2ef8 <fsfull+0x1e8>
  6642. break;
  6643. }
  6644. int total = 0;
  6645. while(1){
  6646. int cc = write(fd, buf, 512);
  6647. if(cc < 512)
  6648. 2d2c: e59f51c8 ldr r5, [pc, #456] ; 2efc <fsfull+0x1ec>
  6649. int nfiles;
  6650. int fsblocks = 0;
  6651. printf(1, "fsfull test\n");
  6652. for(nfiles = 0; ; nfiles++){
  6653. 2d30: e3a04000 mov r4, #0
  6654. char name[64];
  6655. name[0] = 'f';
  6656. name[1] = '0' + nfiles / 1000;
  6657. name[2] = '0' + (nfiles % 1000) / 100;
  6658. 2d34: e59f81c4 ldr r8, [pc, #452] ; 2f00 <fsfull+0x1f0>
  6659. printf(1, "fsfull test\n");
  6660. for(nfiles = 0; ; nfiles++){
  6661. char name[64];
  6662. name[0] = 'f';
  6663. name[1] = '0' + nfiles / 1000;
  6664. 2d38: e0cc1499 smull r1, ip, r9, r4
  6665. name[2] = '0' + (nfiles % 1000) / 100;
  6666. name[3] = '0' + (nfiles % 100) / 10;
  6667. 2d3c: e0c23498 smull r3, r2, r8, r4
  6668. 2d40: e59fa1bc ldr sl, [pc, #444] ; 2f04 <fsfull+0x1f4>
  6669. printf(1, "fsfull test\n");
  6670. for(nfiles = 0; ; nfiles++){
  6671. char name[64];
  6672. name[0] = 'f';
  6673. name[1] = '0' + nfiles / 1000;
  6674. 2d44: e1a06fc4 asr r6, r4, #31
  6675. 2d48: e066c34c rsb ip, r6, ip, asr #6
  6676. name[2] = '0' + (nfiles % 1000) / 100;
  6677. name[3] = '0' + (nfiles % 100) / 10;
  6678. 2d4c: e3a03064 mov r3, #100 ; 0x64
  6679. 2d50: e06622c2 rsb r2, r6, r2, asr #5
  6680. for(nfiles = 0; ; nfiles++){
  6681. char name[64];
  6682. name[0] = 'f';
  6683. name[1] = '0' + nfiles / 1000;
  6684. name[2] = '0' + (nfiles % 1000) / 100;
  6685. 2d54: e3a00ffa mov r0, #1000 ; 0x3e8
  6686. name[3] = '0' + (nfiles % 100) / 10;
  6687. 2d58: e0020293 mul r2, r3, r2
  6688. for(nfiles = 0; ; nfiles++){
  6689. char name[64];
  6690. name[0] = 'f';
  6691. name[1] = '0' + nfiles / 1000;
  6692. name[2] = '0' + (nfiles % 1000) / 100;
  6693. 2d5c: e0000c90 mul r0, r0, ip
  6694. name[3] = '0' + (nfiles % 100) / 10;
  6695. name[4] = '0' + (nfiles % 10);
  6696. 2d60: e0c3e49a smull lr, r3, sl, r4
  6697. name[5] = '\0';
  6698. printf(1, "writing %s\n", name);
  6699. 2d64: e59f119c ldr r1, [pc, #412] ; 2f08 <fsfull+0x1f8>
  6700. for(nfiles = 0; ; nfiles++){
  6701. char name[64];
  6702. name[0] = 'f';
  6703. name[1] = '0' + nfiles / 1000;
  6704. name[2] = '0' + (nfiles % 1000) / 100;
  6705. 2d68: e0600004 rsb r0, r0, r4
  6706. name[3] = '0' + (nfiles % 100) / 10;
  6707. 2d6c: e0622004 rsb r2, r2, r4
  6708. for(nfiles = 0; ; nfiles++){
  6709. char name[64];
  6710. name[0] = 'f';
  6711. name[1] = '0' + nfiles / 1000;
  6712. name[2] = '0' + (nfiles % 1000) / 100;
  6713. 2d70: e0c8e098 smull lr, r8, r8, r0
  6714. name[3] = '0' + (nfiles % 100) / 10;
  6715. 2d74: e0cae29a smull lr, sl, sl, r2
  6716. name[4] = '0' + (nfiles % 10);
  6717. 2d78: e0663143 rsb r3, r6, r3, asr #2
  6718. for(nfiles = 0; ; nfiles++){
  6719. char name[64];
  6720. name[0] = 'f';
  6721. name[1] = '0' + nfiles / 1000;
  6722. name[2] = '0' + (nfiles % 1000) / 100;
  6723. 2d7c: e1a00fc0 asr r0, r0, #31
  6724. name[3] = '0' + (nfiles % 100) / 10;
  6725. 2d80: e1a02fc2 asr r2, r2, #31
  6726. name[4] = '0' + (nfiles % 10);
  6727. 2d84: e0833103 add r3, r3, r3, lsl #2
  6728. for(nfiles = 0; ; nfiles++){
  6729. char name[64];
  6730. name[0] = 'f';
  6731. name[1] = '0' + nfiles / 1000;
  6732. name[2] = '0' + (nfiles % 1000) / 100;
  6733. 2d88: e06082c8 rsb r8, r0, r8, asr #5
  6734. name[3] = '0' + (nfiles % 100) / 10;
  6735. 2d8c: e062a14a rsb sl, r2, sl, asr #2
  6736. name[4] = '0' + (nfiles % 10);
  6737. 2d90: e0443083 sub r3, r4, r3, lsl #1
  6738. printf(1, "fsfull test\n");
  6739. for(nfiles = 0; ; nfiles++){
  6740. char name[64];
  6741. name[0] = 'f';
  6742. name[1] = '0' + nfiles / 1000;
  6743. 2d94: e28cc030 add ip, ip, #48 ; 0x30
  6744. name[2] = '0' + (nfiles % 1000) / 100;
  6745. name[3] = '0' + (nfiles % 100) / 10;
  6746. name[4] = '0' + (nfiles % 10);
  6747. 2d98: e2833030 add r3, r3, #48 ; 0x30
  6748. printf(1, "fsfull test\n");
  6749. for(nfiles = 0; ; nfiles++){
  6750. char name[64];
  6751. name[0] = 'f';
  6752. 2d9c: e3a0e066 mov lr, #102 ; 0x66
  6753. name[1] = '0' + nfiles / 1000;
  6754. name[2] = '0' + (nfiles % 1000) / 100;
  6755. 2da0: e2888030 add r8, r8, #48 ; 0x30
  6756. name[3] = '0' + (nfiles % 100) / 10;
  6757. name[4] = '0' + (nfiles % 10);
  6758. name[5] = '\0';
  6759. printf(1, "writing %s\n", name);
  6760. 2da4: e24b2064 sub r2, fp, #100 ; 0x64
  6761. 2da8: e3a00001 mov r0, #1
  6762. for(nfiles = 0; ; nfiles++){
  6763. char name[64];
  6764. name[0] = 'f';
  6765. name[1] = '0' + nfiles / 1000;
  6766. name[2] = '0' + (nfiles % 1000) / 100;
  6767. name[3] = '0' + (nfiles % 100) / 10;
  6768. 2dac: e28aa030 add sl, sl, #48 ; 0x30
  6769. name[4] = '0' + (nfiles % 10);
  6770. name[5] = '\0';
  6771. 2db0: e3a07000 mov r7, #0
  6772. printf(1, "fsfull test\n");
  6773. for(nfiles = 0; ; nfiles++){
  6774. char name[64];
  6775. name[0] = 'f';
  6776. 2db4: e54be064 strb lr, [fp, #-100] ; 0x64
  6777. name[1] = '0' + nfiles / 1000;
  6778. 2db8: e54bc063 strb ip, [fp, #-99] ; 0x63
  6779. name[2] = '0' + (nfiles % 1000) / 100;
  6780. 2dbc: e54b8062 strb r8, [fp, #-98] ; 0x62
  6781. name[3] = '0' + (nfiles % 100) / 10;
  6782. name[4] = '0' + (nfiles % 10);
  6783. 2dc0: e54b3060 strb r3, [fp, #-96] ; 0x60
  6784. for(nfiles = 0; ; nfiles++){
  6785. char name[64];
  6786. name[0] = 'f';
  6787. name[1] = '0' + nfiles / 1000;
  6788. name[2] = '0' + (nfiles % 1000) / 100;
  6789. name[3] = '0' + (nfiles % 100) / 10;
  6790. 2dc4: e54ba061 strb sl, [fp, #-97] ; 0x61
  6791. name[4] = '0' + (nfiles % 10);
  6792. name[5] = '\0';
  6793. 2dc8: e54b705f strb r7, [fp, #-95] ; 0x5f
  6794. printf(1, "writing %s\n", name);
  6795. 2dcc: eb00025c bl 3744 <printf>
  6796. int fd = open(name, O_CREATE|O_RDWR);
  6797. 2dd0: e24b0064 sub r0, fp, #100 ; 0x64
  6798. 2dd4: e59f1130 ldr r1, [pc, #304] ; 2f0c <fsfull+0x1fc>
  6799. 2dd8: eb00016e bl 3398 <open>
  6800. if(fd < 0){
  6801. 2ddc: e2508000 subs r8, r0, #0
  6802. 2de0: aa000001 bge 2dec <fsfull+0xdc>
  6803. 2de4: ea000010 b 2e2c <fsfull+0x11c>
  6804. int total = 0;
  6805. while(1){
  6806. int cc = write(fd, buf, 512);
  6807. if(cc < 512)
  6808. break;
  6809. total += cc;
  6810. 2de8: e0877000 add r7, r7, r0
  6811. printf(1, "open %s failed\n", name);
  6812. break;
  6813. }
  6814. int total = 0;
  6815. while(1){
  6816. int cc = write(fd, buf, 512);
  6817. 2dec: e1a00008 mov r0, r8
  6818. 2df0: e59f1118 ldr r1, [pc, #280] ; 2f10 <fsfull+0x200>
  6819. 2df4: e3a02c02 mov r2, #512 ; 0x200
  6820. 2df8: eb000132 bl 32c8 <write>
  6821. if(cc < 512)
  6822. 2dfc: e1500005 cmp r0, r5
  6823. 2e00: cafffff8 bgt 2de8 <fsfull+0xd8>
  6824. break;
  6825. total += cc;
  6826. fsblocks++;
  6827. }
  6828. printf(1, "wrote %d bytes\n", total);
  6829. 2e04: e59f1108 ldr r1, [pc, #264] ; 2f14 <fsfull+0x204>
  6830. 2e08: e1a02007 mov r2, r7
  6831. 2e0c: e3a00001 mov r0, #1
  6832. 2e10: eb00024b bl 3744 <printf>
  6833. close(fd);
  6834. 2e14: e1a00008 mov r0, r8
  6835. 2e18: eb000137 bl 32fc <close>
  6836. if(total == 0)
  6837. 2e1c: e3570000 cmp r7, #0
  6838. 2e20: 0a000005 beq 2e3c <fsfull+0x12c>
  6839. int nfiles;
  6840. int fsblocks = 0;
  6841. printf(1, "fsfull test\n");
  6842. for(nfiles = 0; ; nfiles++){
  6843. 2e24: e2844001 add r4, r4, #1
  6844. }
  6845. printf(1, "wrote %d bytes\n", total);
  6846. close(fd);
  6847. if(total == 0)
  6848. break;
  6849. }
  6850. 2e28: eaffffc1 b 2d34 <fsfull+0x24>
  6851. name[4] = '0' + (nfiles % 10);
  6852. name[5] = '\0';
  6853. printf(1, "writing %s\n", name);
  6854. int fd = open(name, O_CREATE|O_RDWR);
  6855. if(fd < 0){
  6856. printf(1, "open %s failed\n", name);
  6857. 2e2c: e3a00001 mov r0, #1
  6858. 2e30: e59f10e0 ldr r1, [pc, #224] ; 2f18 <fsfull+0x208>
  6859. 2e34: e24b2064 sub r2, fp, #100 ; 0x64
  6860. 2e38: eb000241 bl 3744 <printf>
  6861. }
  6862. while(nfiles >= 0){
  6863. char name[64];
  6864. name[0] = 'f';
  6865. name[1] = '0' + nfiles / 1000;
  6866. 2e3c: e59f80b4 ldr r8, [pc, #180] ; 2ef8 <fsfull+0x1e8>
  6867. name[2] = '0' + (nfiles % 1000) / 100;
  6868. 2e40: e59f70b8 ldr r7, [pc, #184] ; 2f00 <fsfull+0x1f0>
  6869. name[3] = '0' + (nfiles % 100) / 10;
  6870. 2e44: e59f50b8 ldr r5, [pc, #184] ; 2f04 <fsfull+0x1f4>
  6871. }
  6872. while(nfiles >= 0){
  6873. char name[64];
  6874. name[0] = 'f';
  6875. name[1] = '0' + nfiles / 1000;
  6876. 2e48: e0cc1498 smull r1, ip, r8, r4
  6877. name[2] = '0' + (nfiles % 1000) / 100;
  6878. name[3] = '0' + (nfiles % 100) / 10;
  6879. 2e4c: e0c32497 smull r2, r3, r7, r4
  6880. name[4] = '0' + (nfiles % 10);
  6881. 2e50: e0cea495 smull sl, lr, r5, r4
  6882. }
  6883. while(nfiles >= 0){
  6884. char name[64];
  6885. name[0] = 'f';
  6886. name[1] = '0' + nfiles / 1000;
  6887. 2e54: e066c34c rsb ip, r6, ip, asr #6
  6888. name[2] = '0' + (nfiles % 1000) / 100;
  6889. name[3] = '0' + (nfiles % 100) / 10;
  6890. 2e58: e3a02064 mov r2, #100 ; 0x64
  6891. 2e5c: e06632c3 rsb r3, r6, r3, asr #5
  6892. while(nfiles >= 0){
  6893. char name[64];
  6894. name[0] = 'f';
  6895. name[1] = '0' + nfiles / 1000;
  6896. name[2] = '0' + (nfiles % 1000) / 100;
  6897. 2e60: e3a00ffa mov r0, #1000 ; 0x3e8
  6898. name[3] = '0' + (nfiles % 100) / 10;
  6899. 2e64: e0030392 mul r3, r2, r3
  6900. while(nfiles >= 0){
  6901. char name[64];
  6902. name[0] = 'f';
  6903. name[1] = '0' + nfiles / 1000;
  6904. name[2] = '0' + (nfiles % 1000) / 100;
  6905. 2e68: e0000c90 mul r0, r0, ip
  6906. name[3] = '0' + (nfiles % 100) / 10;
  6907. 2e6c: e0633004 rsb r3, r3, r4
  6908. while(nfiles >= 0){
  6909. char name[64];
  6910. name[0] = 'f';
  6911. name[1] = '0' + nfiles / 1000;
  6912. name[2] = '0' + (nfiles % 1000) / 100;
  6913. 2e70: e0600004 rsb r0, r0, r4
  6914. name[3] = '0' + (nfiles % 100) / 10;
  6915. name[4] = '0' + (nfiles % 10);
  6916. 2e74: e066614e rsb r6, r6, lr, asr #2
  6917. while(nfiles >= 0){
  6918. char name[64];
  6919. name[0] = 'f';
  6920. name[1] = '0' + nfiles / 1000;
  6921. name[2] = '0' + (nfiles % 1000) / 100;
  6922. 2e78: e0c12097 smull r2, r1, r7, r0
  6923. name[3] = '0' + (nfiles % 100) / 10;
  6924. 2e7c: e0c2a395 smull sl, r2, r5, r3
  6925. name[4] = '0' + (nfiles % 10);
  6926. 2e80: e0866106 add r6, r6, r6, lsl #2
  6927. 2e84: e0446086 sub r6, r4, r6, lsl #1
  6928. while(nfiles >= 0){
  6929. char name[64];
  6930. name[0] = 'f';
  6931. name[1] = '0' + nfiles / 1000;
  6932. name[2] = '0' + (nfiles % 1000) / 100;
  6933. 2e88: e1a00fc0 asr r0, r0, #31
  6934. name[3] = '0' + (nfiles % 100) / 10;
  6935. 2e8c: e1a03fc3 asr r3, r3, #31
  6936. while(nfiles >= 0){
  6937. char name[64];
  6938. name[0] = 'f';
  6939. name[1] = '0' + nfiles / 1000;
  6940. name[2] = '0' + (nfiles % 1000) / 100;
  6941. 2e90: e06012c1 rsb r1, r0, r1, asr #5
  6942. name[3] = '0' + (nfiles % 100) / 10;
  6943. 2e94: e0632142 rsb r2, r3, r2, asr #2
  6944. name[4] = '0' + (nfiles % 10);
  6945. 2e98: e2863030 add r3, r6, #48 ; 0x30
  6946. }
  6947. while(nfiles >= 0){
  6948. char name[64];
  6949. name[0] = 'f';
  6950. name[1] = '0' + nfiles / 1000;
  6951. 2e9c: e28cc030 add ip, ip, #48 ; 0x30
  6952. name[2] = '0' + (nfiles % 1000) / 100;
  6953. 2ea0: e2811030 add r1, r1, #48 ; 0x30
  6954. name[3] = '0' + (nfiles % 100) / 10;
  6955. 2ea4: e2822030 add r2, r2, #48 ; 0x30
  6956. name[4] = '0' + (nfiles % 10);
  6957. name[5] = '\0';
  6958. unlink(name);
  6959. nfiles--;
  6960. 2ea8: e2444001 sub r4, r4, #1
  6961. break;
  6962. }
  6963. while(nfiles >= 0){
  6964. char name[64];
  6965. name[0] = 'f';
  6966. 2eac: e3a0e066 mov lr, #102 ; 0x66
  6967. name[1] = '0' + nfiles / 1000;
  6968. name[2] = '0' + (nfiles % 1000) / 100;
  6969. name[3] = '0' + (nfiles % 100) / 10;
  6970. name[4] = '0' + (nfiles % 10);
  6971. 2eb0: e54b3060 strb r3, [fp, #-96] ; 0x60
  6972. name[5] = '\0';
  6973. unlink(name);
  6974. 2eb4: e24b0064 sub r0, fp, #100 ; 0x64
  6975. name[0] = 'f';
  6976. name[1] = '0' + nfiles / 1000;
  6977. name[2] = '0' + (nfiles % 1000) / 100;
  6978. name[3] = '0' + (nfiles % 100) / 10;
  6979. name[4] = '0' + (nfiles % 10);
  6980. name[5] = '\0';
  6981. 2eb8: e3a03000 mov r3, #0
  6982. break;
  6983. }
  6984. while(nfiles >= 0){
  6985. char name[64];
  6986. name[0] = 'f';
  6987. 2ebc: e54be064 strb lr, [fp, #-100] ; 0x64
  6988. name[1] = '0' + nfiles / 1000;
  6989. 2ec0: e54bc063 strb ip, [fp, #-99] ; 0x63
  6990. name[2] = '0' + (nfiles % 1000) / 100;
  6991. 2ec4: e54b1062 strb r1, [fp, #-98] ; 0x62
  6992. name[3] = '0' + (nfiles % 100) / 10;
  6993. 2ec8: e54b2061 strb r2, [fp, #-97] ; 0x61
  6994. name[4] = '0' + (nfiles % 10);
  6995. name[5] = '\0';
  6996. 2ecc: e54b305f strb r3, [fp, #-95] ; 0x5f
  6997. unlink(name);
  6998. 2ed0: eb00014a bl 3400 <unlink>
  6999. close(fd);
  7000. if(total == 0)
  7001. break;
  7002. }
  7003. while(nfiles >= 0){
  7004. 2ed4: e3740001 cmn r4, #1
  7005. 2ed8: e1a06fc4 asr r6, r4, #31
  7006. 2edc: 1affffd9 bne 2e48 <fsfull+0x138>
  7007. name[5] = '\0';
  7008. unlink(name);
  7009. nfiles--;
  7010. }
  7011. printf(1, "fsfull test finished\n");
  7012. 2ee0: e3a00001 mov r0, #1
  7013. 2ee4: e59f1030 ldr r1, [pc, #48] ; 2f1c <fsfull+0x20c>
  7014. 2ee8: eb000215 bl 3744 <printf>
  7015. }
  7016. 2eec: e24bd020 sub sp, fp, #32
  7017. 2ef0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  7018. 2ef4: 00005170 .word 0x00005170
  7019. 2ef8: 10624dd3 .word 0x10624dd3
  7020. 2efc: 000001ff .word 0x000001ff
  7021. 2f00: 51eb851f .word 0x51eb851f
  7022. 2f04: 66666667 .word 0x66666667
  7023. 2f08: 00005180 .word 0x00005180
  7024. 2f0c: 00000202 .word 0x00000202
  7025. 2f10: 000079fc .word 0x000079fc
  7026. 2f14: 0000519c .word 0x0000519c
  7027. 2f18: 0000518c .word 0x0000518c
  7028. 2f1c: 000051ac .word 0x000051ac
  7029. 00002f20 <rand>:
  7030. unsigned long randstate = 1;
  7031. unsigned int
  7032. rand()
  7033. {
  7034. randstate = randstate * 1664525 + 1013904223;
  7035. 2f20: e59f3024 ldr r3, [pc, #36] ; 2f4c <rand+0x2c>
  7036. }
  7037. unsigned long randstate = 1;
  7038. unsigned int
  7039. rand()
  7040. {
  7041. 2f24: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7042. 2f28: e28db000 add fp, sp, #0
  7043. randstate = randstate * 1664525 + 1013904223;
  7044. 2f2c: e5931018 ldr r1, [r3, #24]
  7045. 2f30: e59f0018 ldr r0, [pc, #24] ; 2f50 <rand+0x30>
  7046. 2f34: e59f2018 ldr r2, [pc, #24] ; 2f54 <rand+0x34>
  7047. 2f38: e0202190 mla r0, r0, r1, r2
  7048. 2f3c: e5830018 str r0, [r3, #24]
  7049. return randstate;
  7050. }
  7051. 2f40: e28bd000 add sp, fp, #0
  7052. 2f44: e8bd0800 pop {fp}
  7053. 2f48: e12fff1e bx lr
  7054. 2f4c: 00005244 .word 0x00005244
  7055. 2f50: 0019660d .word 0x0019660d
  7056. 2f54: 3c6ef35f .word 0x3c6ef35f
  7057. 00002f58 <strcpy>:
  7058. #include "user.h"
  7059. #include "arm.h"
  7060. char*
  7061. strcpy(char *s, char *t)
  7062. {
  7063. 2f58: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7064. char *os;
  7065. os = s;
  7066. while((*s++ = *t++) != 0)
  7067. 2f5c: e1a02000 mov r2, r0
  7068. #include "user.h"
  7069. #include "arm.h"
  7070. char*
  7071. strcpy(char *s, char *t)
  7072. {
  7073. 2f60: e28db000 add fp, sp, #0
  7074. char *os;
  7075. os = s;
  7076. while((*s++ = *t++) != 0)
  7077. 2f64: e4d13001 ldrb r3, [r1], #1
  7078. 2f68: e3530000 cmp r3, #0
  7079. 2f6c: e4c23001 strb r3, [r2], #1
  7080. 2f70: 1afffffb bne 2f64 <strcpy+0xc>
  7081. ;
  7082. return os;
  7083. }
  7084. 2f74: e28bd000 add sp, fp, #0
  7085. 2f78: e8bd0800 pop {fp}
  7086. 2f7c: e12fff1e bx lr
  7087. 00002f80 <strcmp>:
  7088. int
  7089. strcmp(const char *p, const char *q)
  7090. {
  7091. 2f80: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7092. 2f84: e28db000 add fp, sp, #0
  7093. while(*p && *p == *q)
  7094. 2f88: e5d03000 ldrb r3, [r0]
  7095. 2f8c: e5d12000 ldrb r2, [r1]
  7096. 2f90: e3530000 cmp r3, #0
  7097. 2f94: 1a000004 bne 2fac <strcmp+0x2c>
  7098. 2f98: ea000005 b 2fb4 <strcmp+0x34>
  7099. 2f9c: e5f03001 ldrb r3, [r0, #1]!
  7100. 2fa0: e3530000 cmp r3, #0
  7101. 2fa4: 0a000006 beq 2fc4 <strcmp+0x44>
  7102. 2fa8: e5f12001 ldrb r2, [r1, #1]!
  7103. 2fac: e1530002 cmp r3, r2
  7104. 2fb0: 0afffff9 beq 2f9c <strcmp+0x1c>
  7105. p++, q++;
  7106. return (uchar)*p - (uchar)*q;
  7107. }
  7108. 2fb4: e0620003 rsb r0, r2, r3
  7109. 2fb8: e28bd000 add sp, fp, #0
  7110. 2fbc: e8bd0800 pop {fp}
  7111. 2fc0: e12fff1e bx lr
  7112. }
  7113. int
  7114. strcmp(const char *p, const char *q)
  7115. {
  7116. while(*p && *p == *q)
  7117. 2fc4: e5d12001 ldrb r2, [r1, #1]
  7118. 2fc8: eafffff9 b 2fb4 <strcmp+0x34>
  7119. 00002fcc <strlen>:
  7120. return (uchar)*p - (uchar)*q;
  7121. }
  7122. uint
  7123. strlen(char *s)
  7124. {
  7125. 2fcc: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7126. 2fd0: e28db000 add fp, sp, #0
  7127. int n;
  7128. for(n = 0; s[n]; n++)
  7129. 2fd4: e5d03000 ldrb r3, [r0]
  7130. 2fd8: e3530000 cmp r3, #0
  7131. 2fdc: 01a00003 moveq r0, r3
  7132. 2fe0: 0a000006 beq 3000 <strlen+0x34>
  7133. 2fe4: e1a02000 mov r2, r0
  7134. 2fe8: e3a03000 mov r3, #0
  7135. 2fec: e5f21001 ldrb r1, [r2, #1]!
  7136. 2ff0: e2833001 add r3, r3, #1
  7137. 2ff4: e1a00003 mov r0, r3
  7138. 2ff8: e3510000 cmp r1, #0
  7139. 2ffc: 1afffffa bne 2fec <strlen+0x20>
  7140. ;
  7141. return n;
  7142. }
  7143. 3000: e28bd000 add sp, fp, #0
  7144. 3004: e8bd0800 pop {fp}
  7145. 3008: e12fff1e bx lr
  7146. 0000300c <memset>:
  7147. memset(void *dst, int c, uint n)
  7148. {
  7149. char *p=dst;
  7150. u32 rc=n;
  7151. while (rc-- > 0) *p++ = c;
  7152. 300c: e3520000 cmp r2, #0
  7153. return n;
  7154. }
  7155. void*
  7156. memset(void *dst, int c, uint n)
  7157. {
  7158. 3010: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7159. 3014: e28db000 add fp, sp, #0
  7160. char *p=dst;
  7161. u32 rc=n;
  7162. while (rc-- > 0) *p++ = c;
  7163. 3018: 0a000006 beq 3038 <memset+0x2c>
  7164. 301c: e6ef1071 uxtb r1, r1
  7165. 3020: e1a03002 mov r3, r2
  7166. }
  7167. void*
  7168. memset(void *dst, int c, uint n)
  7169. {
  7170. char *p=dst;
  7171. 3024: e1a0c000 mov ip, r0
  7172. u32 rc=n;
  7173. while (rc-- > 0) *p++ = c;
  7174. 3028: e2533001 subs r3, r3, #1
  7175. 302c: e4cc1001 strb r1, [ip], #1
  7176. 3030: 1afffffc bne 3028 <memset+0x1c>
  7177. 3034: e0800002 add r0, r0, r2
  7178. return (void *)p;
  7179. }
  7180. 3038: e28bd000 add sp, fp, #0
  7181. 303c: e8bd0800 pop {fp}
  7182. 3040: e12fff1e bx lr
  7183. 00003044 <strchr>:
  7184. char*
  7185. strchr(const char *s, char c)
  7186. {
  7187. 3044: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7188. 3048: e28db000 add fp, sp, #0
  7189. for(; *s; s++)
  7190. 304c: e5d03000 ldrb r3, [r0]
  7191. 3050: e3530000 cmp r3, #0
  7192. 3054: 1a000004 bne 306c <strchr+0x28>
  7193. 3058: ea000008 b 3080 <strchr+0x3c>
  7194. 305c: e5d03001 ldrb r3, [r0, #1]
  7195. 3060: e2800001 add r0, r0, #1
  7196. 3064: e3530000 cmp r3, #0
  7197. 3068: 0a000004 beq 3080 <strchr+0x3c>
  7198. if(*s == c)
  7199. 306c: e1530001 cmp r3, r1
  7200. 3070: 1afffff9 bne 305c <strchr+0x18>
  7201. return (char*)s;
  7202. return 0;
  7203. }
  7204. 3074: e28bd000 add sp, fp, #0
  7205. 3078: e8bd0800 pop {fp}
  7206. 307c: e12fff1e bx lr
  7207. strchr(const char *s, char c)
  7208. {
  7209. for(; *s; s++)
  7210. if(*s == c)
  7211. return (char*)s;
  7212. return 0;
  7213. 3080: e1a00003 mov r0, r3
  7214. 3084: eafffffa b 3074 <strchr+0x30>
  7215. 00003088 <gets>:
  7216. }
  7217. char*
  7218. gets(char *buf, int max)
  7219. {
  7220. 3088: e92d49f0 push {r4, r5, r6, r7, r8, fp, lr}
  7221. 308c: e28db018 add fp, sp, #24
  7222. 3090: e24dd00c sub sp, sp, #12
  7223. 3094: e1a08000 mov r8, r0
  7224. 3098: e1a07001 mov r7, r1
  7225. int i, cc;
  7226. char c;
  7227. for(i=0; i+1 < max; ){
  7228. 309c: e1a06000 mov r6, r0
  7229. 30a0: e3a05000 mov r5, #0
  7230. 30a4: ea000008 b 30cc <gets+0x44>
  7231. cc = read(0, &c, 1);
  7232. 30a8: eb000079 bl 3294 <read>
  7233. if(cc < 1)
  7234. 30ac: e3500000 cmp r0, #0
  7235. 30b0: da00000b ble 30e4 <gets+0x5c>
  7236. break;
  7237. buf[i++] = c;
  7238. 30b4: e55b301d ldrb r3, [fp, #-29]
  7239. if(c == '\n' || c == '\r')
  7240. 30b8: e1a05004 mov r5, r4
  7241. 30bc: e353000a cmp r3, #10
  7242. 30c0: 1353000d cmpne r3, #13
  7243. for(i=0; i+1 < max; ){
  7244. cc = read(0, &c, 1);
  7245. if(cc < 1)
  7246. break;
  7247. buf[i++] = c;
  7248. 30c4: e4c63001 strb r3, [r6], #1
  7249. if(c == '\n' || c == '\r')
  7250. 30c8: 0a00000a beq 30f8 <gets+0x70>
  7251. {
  7252. int i, cc;
  7253. char c;
  7254. for(i=0; i+1 < max; ){
  7255. cc = read(0, &c, 1);
  7256. 30cc: e3a02001 mov r2, #1
  7257. gets(char *buf, int max)
  7258. {
  7259. int i, cc;
  7260. char c;
  7261. for(i=0; i+1 < max; ){
  7262. 30d0: e0854002 add r4, r5, r2
  7263. 30d4: e1540007 cmp r4, r7
  7264. cc = read(0, &c, 1);
  7265. 30d8: e3a00000 mov r0, #0
  7266. 30dc: e24b101d sub r1, fp, #29
  7267. gets(char *buf, int max)
  7268. {
  7269. int i, cc;
  7270. char c;
  7271. for(i=0; i+1 < max; ){
  7272. 30e0: bafffff0 blt 30a8 <gets+0x20>
  7273. break;
  7274. buf[i++] = c;
  7275. if(c == '\n' || c == '\r')
  7276. break;
  7277. }
  7278. buf[i] = '\0';
  7279. 30e4: e3a03000 mov r3, #0
  7280. 30e8: e7c83005 strb r3, [r8, r5]
  7281. return buf;
  7282. }
  7283. 30ec: e1a00008 mov r0, r8
  7284. 30f0: e24bd018 sub sp, fp, #24
  7285. 30f4: e8bd89f0 pop {r4, r5, r6, r7, r8, fp, pc}
  7286. gets(char *buf, int max)
  7287. {
  7288. int i, cc;
  7289. char c;
  7290. for(i=0; i+1 < max; ){
  7291. 30f8: e1a05004 mov r5, r4
  7292. 30fc: eafffff8 b 30e4 <gets+0x5c>
  7293. 00003100 <stat>:
  7294. return buf;
  7295. }
  7296. int
  7297. stat(char *n, struct stat *st)
  7298. {
  7299. 3100: e92d4830 push {r4, r5, fp, lr}
  7300. 3104: e1a05001 mov r5, r1
  7301. 3108: e28db00c add fp, sp, #12
  7302. int fd;
  7303. int r;
  7304. fd = open(n, O_RDONLY);
  7305. 310c: e3a01000 mov r1, #0
  7306. 3110: eb0000a0 bl 3398 <open>
  7307. if(fd < 0)
  7308. 3114: e2504000 subs r4, r0, #0
  7309. return -1;
  7310. 3118: b3e05000 mvnlt r5, #0
  7311. {
  7312. int fd;
  7313. int r;
  7314. fd = open(n, O_RDONLY);
  7315. if(fd < 0)
  7316. 311c: ba000004 blt 3134 <stat+0x34>
  7317. return -1;
  7318. r = fstat(fd, st);
  7319. 3120: e1a01005 mov r1, r5
  7320. 3124: eb0000c2 bl 3434 <fstat>
  7321. 3128: e1a05000 mov r5, r0
  7322. close(fd);
  7323. 312c: e1a00004 mov r0, r4
  7324. 3130: eb000071 bl 32fc <close>
  7325. return r;
  7326. }
  7327. 3134: e1a00005 mov r0, r5
  7328. 3138: e8bd8830 pop {r4, r5, fp, pc}
  7329. 0000313c <atoi>:
  7330. int
  7331. atoi(const char *s)
  7332. {
  7333. 313c: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7334. 3140: e28db000 add fp, sp, #0
  7335. int n;
  7336. n = 0;
  7337. while('0' <= *s && *s <= '9')
  7338. 3144: e5d03000 ldrb r3, [r0]
  7339. 3148: e2432030 sub r2, r3, #48 ; 0x30
  7340. 314c: e6ef2072 uxtb r2, r2
  7341. 3150: e3520009 cmp r2, #9
  7342. int
  7343. atoi(const char *s)
  7344. {
  7345. int n;
  7346. n = 0;
  7347. 3154: 83a00000 movhi r0, #0
  7348. while('0' <= *s && *s <= '9')
  7349. 3158: 8a000009 bhi 3184 <atoi+0x48>
  7350. 315c: e1a02000 mov r2, r0
  7351. int
  7352. atoi(const char *s)
  7353. {
  7354. int n;
  7355. n = 0;
  7356. 3160: e3a00000 mov r0, #0
  7357. while('0' <= *s && *s <= '9')
  7358. n = n*10 + *s++ - '0';
  7359. 3164: e0800100 add r0, r0, r0, lsl #2
  7360. 3168: e0830080 add r0, r3, r0, lsl #1
  7361. atoi(const char *s)
  7362. {
  7363. int n;
  7364. n = 0;
  7365. while('0' <= *s && *s <= '9')
  7366. 316c: e5f23001 ldrb r3, [r2, #1]!
  7367. n = n*10 + *s++ - '0';
  7368. 3170: e2400030 sub r0, r0, #48 ; 0x30
  7369. atoi(const char *s)
  7370. {
  7371. int n;
  7372. n = 0;
  7373. while('0' <= *s && *s <= '9')
  7374. 3174: e2431030 sub r1, r3, #48 ; 0x30
  7375. 3178: e6ef1071 uxtb r1, r1
  7376. 317c: e3510009 cmp r1, #9
  7377. 3180: 9afffff7 bls 3164 <atoi+0x28>
  7378. n = n*10 + *s++ - '0';
  7379. return n;
  7380. }
  7381. 3184: e28bd000 add sp, fp, #0
  7382. 3188: e8bd0800 pop {fp}
  7383. 318c: e12fff1e bx lr
  7384. 00003190 <memmove>:
  7385. {
  7386. char *dst, *src;
  7387. dst = vdst;
  7388. src = vsrc;
  7389. while(n-- > 0)
  7390. 3190: e3520000 cmp r2, #0
  7391. return n;
  7392. }
  7393. void*
  7394. memmove(void *vdst, void *vsrc, int n)
  7395. {
  7396. 3194: e52db004 push {fp} ; (str fp, [sp, #-4]!)
  7397. 3198: e28db000 add fp, sp, #0
  7398. char *dst, *src;
  7399. dst = vdst;
  7400. src = vsrc;
  7401. while(n-- > 0)
  7402. 319c: da000005 ble 31b8 <memmove+0x28>
  7403. n = n*10 + *s++ - '0';
  7404. return n;
  7405. }
  7406. void*
  7407. memmove(void *vdst, void *vsrc, int n)
  7408. 31a0: e0802002 add r2, r0, r2
  7409. {
  7410. char *dst, *src;
  7411. dst = vdst;
  7412. 31a4: e1a03000 mov r3, r0
  7413. src = vsrc;
  7414. while(n-- > 0)
  7415. *dst++ = *src++;
  7416. 31a8: e4d1c001 ldrb ip, [r1], #1
  7417. 31ac: e4c3c001 strb ip, [r3], #1
  7418. {
  7419. char *dst, *src;
  7420. dst = vdst;
  7421. src = vsrc;
  7422. while(n-- > 0)
  7423. 31b0: e1530002 cmp r3, r2
  7424. 31b4: 1afffffb bne 31a8 <memmove+0x18>
  7425. *dst++ = *src++;
  7426. return vdst;
  7427. }
  7428. 31b8: e28bd000 add sp, fp, #0
  7429. 31bc: e8bd0800 pop {fp}
  7430. 31c0: e12fff1e bx lr
  7431. 000031c4 <fork>:
  7432. 31c4: e92d4000 push {lr}
  7433. 31c8: e92d0008 push {r3}
  7434. 31cc: e92d0004 push {r2}
  7435. 31d0: e92d0002 push {r1}
  7436. 31d4: e92d0001 push {r0}
  7437. 31d8: e3a00001 mov r0, #1
  7438. 31dc: ef000040 svc 0x00000040
  7439. 31e0: e8bd0002 pop {r1}
  7440. 31e4: e8bd0002 pop {r1}
  7441. 31e8: e8bd0004 pop {r2}
  7442. 31ec: e8bd0008 pop {r3}
  7443. 31f0: e8bd4000 pop {lr}
  7444. 31f4: e12fff1e bx lr
  7445. 000031f8 <exit>:
  7446. 31f8: e92d4000 push {lr}
  7447. 31fc: e92d0008 push {r3}
  7448. 3200: e92d0004 push {r2}
  7449. 3204: e92d0002 push {r1}
  7450. 3208: e92d0001 push {r0}
  7451. 320c: e3a00002 mov r0, #2
  7452. 3210: ef000040 svc 0x00000040
  7453. 3214: e8bd0002 pop {r1}
  7454. 3218: e8bd0002 pop {r1}
  7455. 321c: e8bd0004 pop {r2}
  7456. 3220: e8bd0008 pop {r3}
  7457. 3224: e8bd4000 pop {lr}
  7458. 3228: e12fff1e bx lr
  7459. 0000322c <wait>:
  7460. 322c: e92d4000 push {lr}
  7461. 3230: e92d0008 push {r3}
  7462. 3234: e92d0004 push {r2}
  7463. 3238: e92d0002 push {r1}
  7464. 323c: e92d0001 push {r0}
  7465. 3240: e3a00003 mov r0, #3
  7466. 3244: ef000040 svc 0x00000040
  7467. 3248: e8bd0002 pop {r1}
  7468. 324c: e8bd0002 pop {r1}
  7469. 3250: e8bd0004 pop {r2}
  7470. 3254: e8bd0008 pop {r3}
  7471. 3258: e8bd4000 pop {lr}
  7472. 325c: e12fff1e bx lr
  7473. 00003260 <pipe>:
  7474. 3260: e92d4000 push {lr}
  7475. 3264: e92d0008 push {r3}
  7476. 3268: e92d0004 push {r2}
  7477. 326c: e92d0002 push {r1}
  7478. 3270: e92d0001 push {r0}
  7479. 3274: e3a00004 mov r0, #4
  7480. 3278: ef000040 svc 0x00000040
  7481. 327c: e8bd0002 pop {r1}
  7482. 3280: e8bd0002 pop {r1}
  7483. 3284: e8bd0004 pop {r2}
  7484. 3288: e8bd0008 pop {r3}
  7485. 328c: e8bd4000 pop {lr}
  7486. 3290: e12fff1e bx lr
  7487. 00003294 <read>:
  7488. 3294: e92d4000 push {lr}
  7489. 3298: e92d0008 push {r3}
  7490. 329c: e92d0004 push {r2}
  7491. 32a0: e92d0002 push {r1}
  7492. 32a4: e92d0001 push {r0}
  7493. 32a8: e3a00005 mov r0, #5
  7494. 32ac: ef000040 svc 0x00000040
  7495. 32b0: e8bd0002 pop {r1}
  7496. 32b4: e8bd0002 pop {r1}
  7497. 32b8: e8bd0004 pop {r2}
  7498. 32bc: e8bd0008 pop {r3}
  7499. 32c0: e8bd4000 pop {lr}
  7500. 32c4: e12fff1e bx lr
  7501. 000032c8 <write>:
  7502. 32c8: e92d4000 push {lr}
  7503. 32cc: e92d0008 push {r3}
  7504. 32d0: e92d0004 push {r2}
  7505. 32d4: e92d0002 push {r1}
  7506. 32d8: e92d0001 push {r0}
  7507. 32dc: e3a00010 mov r0, #16
  7508. 32e0: ef000040 svc 0x00000040
  7509. 32e4: e8bd0002 pop {r1}
  7510. 32e8: e8bd0002 pop {r1}
  7511. 32ec: e8bd0004 pop {r2}
  7512. 32f0: e8bd0008 pop {r3}
  7513. 32f4: e8bd4000 pop {lr}
  7514. 32f8: e12fff1e bx lr
  7515. 000032fc <close>:
  7516. 32fc: e92d4000 push {lr}
  7517. 3300: e92d0008 push {r3}
  7518. 3304: e92d0004 push {r2}
  7519. 3308: e92d0002 push {r1}
  7520. 330c: e92d0001 push {r0}
  7521. 3310: e3a00015 mov r0, #21
  7522. 3314: ef000040 svc 0x00000040
  7523. 3318: e8bd0002 pop {r1}
  7524. 331c: e8bd0002 pop {r1}
  7525. 3320: e8bd0004 pop {r2}
  7526. 3324: e8bd0008 pop {r3}
  7527. 3328: e8bd4000 pop {lr}
  7528. 332c: e12fff1e bx lr
  7529. 00003330 <kill>:
  7530. 3330: e92d4000 push {lr}
  7531. 3334: e92d0008 push {r3}
  7532. 3338: e92d0004 push {r2}
  7533. 333c: e92d0002 push {r1}
  7534. 3340: e92d0001 push {r0}
  7535. 3344: e3a00006 mov r0, #6
  7536. 3348: ef000040 svc 0x00000040
  7537. 334c: e8bd0002 pop {r1}
  7538. 3350: e8bd0002 pop {r1}
  7539. 3354: e8bd0004 pop {r2}
  7540. 3358: e8bd0008 pop {r3}
  7541. 335c: e8bd4000 pop {lr}
  7542. 3360: e12fff1e bx lr
  7543. 00003364 <exec>:
  7544. 3364: e92d4000 push {lr}
  7545. 3368: e92d0008 push {r3}
  7546. 336c: e92d0004 push {r2}
  7547. 3370: e92d0002 push {r1}
  7548. 3374: e92d0001 push {r0}
  7549. 3378: e3a00007 mov r0, #7
  7550. 337c: ef000040 svc 0x00000040
  7551. 3380: e8bd0002 pop {r1}
  7552. 3384: e8bd0002 pop {r1}
  7553. 3388: e8bd0004 pop {r2}
  7554. 338c: e8bd0008 pop {r3}
  7555. 3390: e8bd4000 pop {lr}
  7556. 3394: e12fff1e bx lr
  7557. 00003398 <open>:
  7558. 3398: e92d4000 push {lr}
  7559. 339c: e92d0008 push {r3}
  7560. 33a0: e92d0004 push {r2}
  7561. 33a4: e92d0002 push {r1}
  7562. 33a8: e92d0001 push {r0}
  7563. 33ac: e3a0000f mov r0, #15
  7564. 33b0: ef000040 svc 0x00000040
  7565. 33b4: e8bd0002 pop {r1}
  7566. 33b8: e8bd0002 pop {r1}
  7567. 33bc: e8bd0004 pop {r2}
  7568. 33c0: e8bd0008 pop {r3}
  7569. 33c4: e8bd4000 pop {lr}
  7570. 33c8: e12fff1e bx lr
  7571. 000033cc <mknod>:
  7572. 33cc: e92d4000 push {lr}
  7573. 33d0: e92d0008 push {r3}
  7574. 33d4: e92d0004 push {r2}
  7575. 33d8: e92d0002 push {r1}
  7576. 33dc: e92d0001 push {r0}
  7577. 33e0: e3a00011 mov r0, #17
  7578. 33e4: ef000040 svc 0x00000040
  7579. 33e8: e8bd0002 pop {r1}
  7580. 33ec: e8bd0002 pop {r1}
  7581. 33f0: e8bd0004 pop {r2}
  7582. 33f4: e8bd0008 pop {r3}
  7583. 33f8: e8bd4000 pop {lr}
  7584. 33fc: e12fff1e bx lr
  7585. 00003400 <unlink>:
  7586. 3400: e92d4000 push {lr}
  7587. 3404: e92d0008 push {r3}
  7588. 3408: e92d0004 push {r2}
  7589. 340c: e92d0002 push {r1}
  7590. 3410: e92d0001 push {r0}
  7591. 3414: e3a00012 mov r0, #18
  7592. 3418: ef000040 svc 0x00000040
  7593. 341c: e8bd0002 pop {r1}
  7594. 3420: e8bd0002 pop {r1}
  7595. 3424: e8bd0004 pop {r2}
  7596. 3428: e8bd0008 pop {r3}
  7597. 342c: e8bd4000 pop {lr}
  7598. 3430: e12fff1e bx lr
  7599. 00003434 <fstat>:
  7600. 3434: e92d4000 push {lr}
  7601. 3438: e92d0008 push {r3}
  7602. 343c: e92d0004 push {r2}
  7603. 3440: e92d0002 push {r1}
  7604. 3444: e92d0001 push {r0}
  7605. 3448: e3a00008 mov r0, #8
  7606. 344c: ef000040 svc 0x00000040
  7607. 3450: e8bd0002 pop {r1}
  7608. 3454: e8bd0002 pop {r1}
  7609. 3458: e8bd0004 pop {r2}
  7610. 345c: e8bd0008 pop {r3}
  7611. 3460: e8bd4000 pop {lr}
  7612. 3464: e12fff1e bx lr
  7613. 00003468 <link>:
  7614. 3468: e92d4000 push {lr}
  7615. 346c: e92d0008 push {r3}
  7616. 3470: e92d0004 push {r2}
  7617. 3474: e92d0002 push {r1}
  7618. 3478: e92d0001 push {r0}
  7619. 347c: e3a00013 mov r0, #19
  7620. 3480: ef000040 svc 0x00000040
  7621. 3484: e8bd0002 pop {r1}
  7622. 3488: e8bd0002 pop {r1}
  7623. 348c: e8bd0004 pop {r2}
  7624. 3490: e8bd0008 pop {r3}
  7625. 3494: e8bd4000 pop {lr}
  7626. 3498: e12fff1e bx lr
  7627. 0000349c <mkdir>:
  7628. 349c: e92d4000 push {lr}
  7629. 34a0: e92d0008 push {r3}
  7630. 34a4: e92d0004 push {r2}
  7631. 34a8: e92d0002 push {r1}
  7632. 34ac: e92d0001 push {r0}
  7633. 34b0: e3a00014 mov r0, #20
  7634. 34b4: ef000040 svc 0x00000040
  7635. 34b8: e8bd0002 pop {r1}
  7636. 34bc: e8bd0002 pop {r1}
  7637. 34c0: e8bd0004 pop {r2}
  7638. 34c4: e8bd0008 pop {r3}
  7639. 34c8: e8bd4000 pop {lr}
  7640. 34cc: e12fff1e bx lr
  7641. 000034d0 <chdir>:
  7642. 34d0: e92d4000 push {lr}
  7643. 34d4: e92d0008 push {r3}
  7644. 34d8: e92d0004 push {r2}
  7645. 34dc: e92d0002 push {r1}
  7646. 34e0: e92d0001 push {r0}
  7647. 34e4: e3a00009 mov r0, #9
  7648. 34e8: ef000040 svc 0x00000040
  7649. 34ec: e8bd0002 pop {r1}
  7650. 34f0: e8bd0002 pop {r1}
  7651. 34f4: e8bd0004 pop {r2}
  7652. 34f8: e8bd0008 pop {r3}
  7653. 34fc: e8bd4000 pop {lr}
  7654. 3500: e12fff1e bx lr
  7655. 00003504 <dup>:
  7656. 3504: e92d4000 push {lr}
  7657. 3508: e92d0008 push {r3}
  7658. 350c: e92d0004 push {r2}
  7659. 3510: e92d0002 push {r1}
  7660. 3514: e92d0001 push {r0}
  7661. 3518: e3a0000a mov r0, #10
  7662. 351c: ef000040 svc 0x00000040
  7663. 3520: e8bd0002 pop {r1}
  7664. 3524: e8bd0002 pop {r1}
  7665. 3528: e8bd0004 pop {r2}
  7666. 352c: e8bd0008 pop {r3}
  7667. 3530: e8bd4000 pop {lr}
  7668. 3534: e12fff1e bx lr
  7669. 00003538 <getpid>:
  7670. 3538: e92d4000 push {lr}
  7671. 353c: e92d0008 push {r3}
  7672. 3540: e92d0004 push {r2}
  7673. 3544: e92d0002 push {r1}
  7674. 3548: e92d0001 push {r0}
  7675. 354c: e3a0000b mov r0, #11
  7676. 3550: ef000040 svc 0x00000040
  7677. 3554: e8bd0002 pop {r1}
  7678. 3558: e8bd0002 pop {r1}
  7679. 355c: e8bd0004 pop {r2}
  7680. 3560: e8bd0008 pop {r3}
  7681. 3564: e8bd4000 pop {lr}
  7682. 3568: e12fff1e bx lr
  7683. 0000356c <sbrk>:
  7684. 356c: e92d4000 push {lr}
  7685. 3570: e92d0008 push {r3}
  7686. 3574: e92d0004 push {r2}
  7687. 3578: e92d0002 push {r1}
  7688. 357c: e92d0001 push {r0}
  7689. 3580: e3a0000c mov r0, #12
  7690. 3584: ef000040 svc 0x00000040
  7691. 3588: e8bd0002 pop {r1}
  7692. 358c: e8bd0002 pop {r1}
  7693. 3590: e8bd0004 pop {r2}
  7694. 3594: e8bd0008 pop {r3}
  7695. 3598: e8bd4000 pop {lr}
  7696. 359c: e12fff1e bx lr
  7697. 000035a0 <sleep>:
  7698. 35a0: e92d4000 push {lr}
  7699. 35a4: e92d0008 push {r3}
  7700. 35a8: e92d0004 push {r2}
  7701. 35ac: e92d0002 push {r1}
  7702. 35b0: e92d0001 push {r0}
  7703. 35b4: e3a0000d mov r0, #13
  7704. 35b8: ef000040 svc 0x00000040
  7705. 35bc: e8bd0002 pop {r1}
  7706. 35c0: e8bd0002 pop {r1}
  7707. 35c4: e8bd0004 pop {r2}
  7708. 35c8: e8bd0008 pop {r3}
  7709. 35cc: e8bd4000 pop {lr}
  7710. 35d0: e12fff1e bx lr
  7711. 000035d4 <uptime>:
  7712. 35d4: e92d4000 push {lr}
  7713. 35d8: e92d0008 push {r3}
  7714. 35dc: e92d0004 push {r2}
  7715. 35e0: e92d0002 push {r1}
  7716. 35e4: e92d0001 push {r0}
  7717. 35e8: e3a0000e mov r0, #14
  7718. 35ec: ef000040 svc 0x00000040
  7719. 35f0: e8bd0002 pop {r1}
  7720. 35f4: e8bd0002 pop {r1}
  7721. 35f8: e8bd0004 pop {r2}
  7722. 35fc: e8bd0008 pop {r3}
  7723. 3600: e8bd4000 pop {lr}
  7724. 3604: e12fff1e bx lr
  7725. 00003608 <putc>:
  7726. #include "stat.h"
  7727. #include "user.h"
  7728. static void
  7729. putc(int fd, char c)
  7730. {
  7731. 3608: e92d4800 push {fp, lr}
  7732. 360c: e28db004 add fp, sp, #4
  7733. 3610: e24b3004 sub r3, fp, #4
  7734. 3614: e24dd008 sub sp, sp, #8
  7735. write(fd, &c, 1);
  7736. 3618: e3a02001 mov r2, #1
  7737. #include "stat.h"
  7738. #include "user.h"
  7739. static void
  7740. putc(int fd, char c)
  7741. {
  7742. 361c: e5631001 strb r1, [r3, #-1]!
  7743. write(fd, &c, 1);
  7744. 3620: e1a01003 mov r1, r3
  7745. 3624: ebffff27 bl 32c8 <write>
  7746. }
  7747. 3628: e24bd004 sub sp, fp, #4
  7748. 362c: e8bd8800 pop {fp, pc}
  7749. 00003630 <printint>:
  7750. return q;
  7751. }
  7752. static void
  7753. printint(int fd, int xx, int base, int sgn)
  7754. {
  7755. 3630: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  7756. 3634: e1a04000 mov r4, r0
  7757. char buf[16];
  7758. int i, neg;
  7759. uint x, y, b;
  7760. neg = 0;
  7761. if(sgn && xx < 0){
  7762. 3638: e1a00fa1 lsr r0, r1, #31
  7763. 363c: e3530000 cmp r3, #0
  7764. 3640: 03a03000 moveq r3, #0
  7765. 3644: 12003001 andne r3, r0, #1
  7766. return q;
  7767. }
  7768. static void
  7769. printint(int fd, int xx, int base, int sgn)
  7770. {
  7771. 3648: e28db020 add fp, sp, #32
  7772. char buf[16];
  7773. int i, neg;
  7774. uint x, y, b;
  7775. neg = 0;
  7776. if(sgn && xx < 0){
  7777. 364c: e3530000 cmp r3, #0
  7778. return q;
  7779. }
  7780. static void
  7781. printint(int fd, int xx, int base, int sgn)
  7782. {
  7783. 3650: e24dd014 sub sp, sp, #20
  7784. 3654: e59f909c ldr r9, [pc, #156] ; 36f8 <printint+0xc8>
  7785. uint x, y, b;
  7786. neg = 0;
  7787. if(sgn && xx < 0){
  7788. neg = 1;
  7789. x = -xx;
  7790. 3658: 12611000 rsbne r1, r1, #0
  7791. int i, neg;
  7792. uint x, y, b;
  7793. neg = 0;
  7794. if(sgn && xx < 0){
  7795. neg = 1;
  7796. 365c: 13a03001 movne r3, #1
  7797. } else {
  7798. x = xx;
  7799. }
  7800. b = base;
  7801. i = 0;
  7802. 3660: e3a0a000 mov sl, #0
  7803. 3664: e24b6034 sub r6, fp, #52 ; 0x34
  7804. for(i=31;i>=0;i--){
  7805. r = r << 1;
  7806. r = r | ((n >> i) & 1);
  7807. if(r >= d) {
  7808. r = r - d;
  7809. q = q | (1 << i);
  7810. 3668: e3a08001 mov r8, #1
  7811. write(fd, &c, 1);
  7812. }
  7813. u32 div(u32 n, u32 d) // long division
  7814. {
  7815. u32 q=0, r=0;
  7816. 366c: e3a07000 mov r7, #0
  7817. int i;
  7818. for(i=31;i>=0;i--){
  7819. 3670: e3a0001f mov r0, #31
  7820. write(fd, &c, 1);
  7821. }
  7822. u32 div(u32 n, u32 d) // long division
  7823. {
  7824. u32 q=0, r=0;
  7825. 3674: e1a0c007 mov ip, r7
  7826. int i;
  7827. for(i=31;i>=0;i--){
  7828. r = r << 1;
  7829. r = r | ((n >> i) & 1);
  7830. 3678: e1a0e031 lsr lr, r1, r0
  7831. 367c: e20ee001 and lr, lr, #1
  7832. 3680: e18ec08c orr ip, lr, ip, lsl #1
  7833. if(r >= d) {
  7834. 3684: e152000c cmp r2, ip
  7835. r = r - d;
  7836. q = q | (1 << i);
  7837. 3688: 91877018 orrls r7, r7, r8, lsl r0
  7838. for(i=31;i>=0;i--){
  7839. r = r << 1;
  7840. r = r | ((n >> i) & 1);
  7841. if(r >= d) {
  7842. r = r - d;
  7843. 368c: 9062c00c rsbls ip, r2, ip
  7844. u32 div(u32 n, u32 d) // long division
  7845. {
  7846. u32 q=0, r=0;
  7847. int i;
  7848. for(i=31;i>=0;i--){
  7849. 3690: e2500001 subs r0, r0, #1
  7850. 3694: 2afffff7 bcs 3678 <printint+0x48>
  7851. b = base;
  7852. i = 0;
  7853. do{
  7854. y = div(x, b);
  7855. buf[i++] = digits[x - y * b];
  7856. 3698: e0000792 mul r0, r2, r7
  7857. }while((x = y) != 0);
  7858. 369c: e3570000 cmp r7, #0
  7859. b = base;
  7860. i = 0;
  7861. do{
  7862. y = div(x, b);
  7863. buf[i++] = digits[x - y * b];
  7864. 36a0: e0601001 rsb r1, r0, r1
  7865. 36a4: e28a5001 add r5, sl, #1
  7866. 36a8: e7d91001 ldrb r1, [r9, r1]
  7867. 36ac: e7c6100a strb r1, [r6, sl]
  7868. }while((x = y) != 0);
  7869. 36b0: 11a01007 movne r1, r7
  7870. b = base;
  7871. i = 0;
  7872. do{
  7873. y = div(x, b);
  7874. buf[i++] = digits[x - y * b];
  7875. 36b4: 11a0a005 movne sl, r5
  7876. 36b8: 1affffeb bne 366c <printint+0x3c>
  7877. }while((x = y) != 0);
  7878. if(neg)
  7879. 36bc: e3530000 cmp r3, #0
  7880. buf[i++] = '-';
  7881. 36c0: 124b2024 subne r2, fp, #36 ; 0x24
  7882. 36c4: 10823005 addne r3, r2, r5
  7883. 36c8: 128a5002 addne r5, sl, #2
  7884. while(--i >= 0)
  7885. 36cc: e2455001 sub r5, r5, #1
  7886. do{
  7887. y = div(x, b);
  7888. buf[i++] = digits[x - y * b];
  7889. }while((x = y) != 0);
  7890. if(neg)
  7891. buf[i++] = '-';
  7892. 36d0: 13a0202d movne r2, #45 ; 0x2d
  7893. 36d4: 15432010 strbne r2, [r3, #-16]
  7894. while(--i >= 0)
  7895. putc(fd, buf[i]);
  7896. 36d8: e7d61005 ldrb r1, [r6, r5]
  7897. 36dc: e1a00004 mov r0, r4
  7898. buf[i++] = digits[x - y * b];
  7899. }while((x = y) != 0);
  7900. if(neg)
  7901. buf[i++] = '-';
  7902. while(--i >= 0)
  7903. 36e0: e2455001 sub r5, r5, #1
  7904. putc(fd, buf[i]);
  7905. 36e4: ebffffc7 bl 3608 <putc>
  7906. buf[i++] = digits[x - y * b];
  7907. }while((x = y) != 0);
  7908. if(neg)
  7909. buf[i++] = '-';
  7910. while(--i >= 0)
  7911. 36e8: e3750001 cmn r5, #1
  7912. 36ec: 1afffff9 bne 36d8 <printint+0xa8>
  7913. putc(fd, buf[i]);
  7914. }
  7915. 36f0: e24bd020 sub sp, fp, #32
  7916. 36f4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  7917. 36f8: 00005228 .word 0x00005228
  7918. 000036fc <div>:
  7919. write(fd, &c, 1);
  7920. }
  7921. u32 div(u32 n, u32 d) // long division
  7922. {
  7923. u32 q=0, r=0;
  7924. 36fc: e3a03000 mov r3, #0
  7925. {
  7926. write(fd, &c, 1);
  7927. }
  7928. u32 div(u32 n, u32 d) // long division
  7929. {
  7930. 3700: e92d0830 push {r4, r5, fp}
  7931. 3704: e1a02000 mov r2, r0
  7932. 3708: e28db008 add fp, sp, #8
  7933. u32 q=0, r=0;
  7934. int i;
  7935. for(i=31;i>=0;i--){
  7936. 370c: e3a0c01f mov ip, #31
  7937. write(fd, &c, 1);
  7938. }
  7939. u32 div(u32 n, u32 d) // long division
  7940. {
  7941. u32 q=0, r=0;
  7942. 3710: e1a00003 mov r0, r3
  7943. for(i=31;i>=0;i--){
  7944. r = r << 1;
  7945. r = r | ((n >> i) & 1);
  7946. if(r >= d) {
  7947. r = r - d;
  7948. q = q | (1 << i);
  7949. 3714: e3a05001 mov r5, #1
  7950. u32 q=0, r=0;
  7951. int i;
  7952. for(i=31;i>=0;i--){
  7953. r = r << 1;
  7954. r = r | ((n >> i) & 1);
  7955. 3718: e1a04c32 lsr r4, r2, ip
  7956. 371c: e2044001 and r4, r4, #1
  7957. 3720: e1843083 orr r3, r4, r3, lsl #1
  7958. if(r >= d) {
  7959. 3724: e1530001 cmp r3, r1
  7960. r = r - d;
  7961. q = q | (1 << i);
  7962. 3728: 21800c15 orrcs r0, r0, r5, lsl ip
  7963. for(i=31;i>=0;i--){
  7964. r = r << 1;
  7965. r = r | ((n >> i) & 1);
  7966. if(r >= d) {
  7967. r = r - d;
  7968. 372c: 20613003 rsbcs r3, r1, r3
  7969. u32 div(u32 n, u32 d) // long division
  7970. {
  7971. u32 q=0, r=0;
  7972. int i;
  7973. for(i=31;i>=0;i--){
  7974. 3730: e25cc001 subs ip, ip, #1
  7975. 3734: 2afffff7 bcs 3718 <div+0x1c>
  7976. r = r - d;
  7977. q = q | (1 << i);
  7978. }
  7979. }
  7980. return q;
  7981. }
  7982. 3738: e24bd008 sub sp, fp, #8
  7983. 373c: e8bd0830 pop {r4, r5, fp}
  7984. 3740: e12fff1e bx lr
  7985. 00003744 <printf>:
  7986. }
  7987. // Print to the given fd. Only understands %d, %x, %p, %s.
  7988. void
  7989. printf(int fd, char *fmt, ...)
  7990. {
  7991. 3744: e92d000e push {r1, r2, r3}
  7992. 3748: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  7993. 374c: e28db020 add fp, sp, #32
  7994. 3750: e1a05000 mov r5, r0
  7995. int c, i, state;
  7996. uint *ap;
  7997. state = 0;
  7998. ap = (uint*)(void*)&fmt + 1;
  7999. for(i = 0; fmt[i]; i++){
  8000. 3754: e59b4004 ldr r4, [fp, #4]
  8001. 3758: e5d48000 ldrb r8, [r4]
  8002. 375c: e3580000 cmp r8, #0
  8003. 3760: 0a000027 beq 3804 <printf+0xc0>
  8004. ap++;
  8005. } else if(c == 's'){
  8006. s = (char*)*ap;
  8007. ap++;
  8008. if(s == 0)
  8009. s = "(null)";
  8010. 3764: e59f712c ldr r7, [pc, #300] ; 3898 <printf+0x154>
  8011. char *s;
  8012. int c, i, state;
  8013. uint *ap;
  8014. state = 0;
  8015. ap = (uint*)(void*)&fmt + 1;
  8016. 3768: e28b6008 add r6, fp, #8
  8017. {
  8018. char *s;
  8019. int c, i, state;
  8020. uint *ap;
  8021. state = 0;
  8022. 376c: e3a0a000 mov sl, #0
  8023. 3770: ea000008 b 3798 <printf+0x54>
  8024. ap = (uint*)(void*)&fmt + 1;
  8025. for(i = 0; fmt[i]; i++){
  8026. c = fmt[i] & 0xff;
  8027. if(state == 0){
  8028. if(c == '%'){
  8029. 3774: e3580025 cmp r8, #37 ; 0x25
  8030. state = '%';
  8031. 3778: 01a0a008 moveq sl, r8
  8032. state = 0;
  8033. ap = (uint*)(void*)&fmt + 1;
  8034. for(i = 0; fmt[i]; i++){
  8035. c = fmt[i] & 0xff;
  8036. if(state == 0){
  8037. if(c == '%'){
  8038. 377c: 0a000002 beq 378c <printf+0x48>
  8039. state = '%';
  8040. } else {
  8041. putc(fd, c);
  8042. 3780: e1a00005 mov r0, r5
  8043. 3784: e1a01008 mov r1, r8
  8044. 3788: ebffff9e bl 3608 <putc>
  8045. int c, i, state;
  8046. uint *ap;
  8047. state = 0;
  8048. ap = (uint*)(void*)&fmt + 1;
  8049. for(i = 0; fmt[i]; i++){
  8050. 378c: e5f48001 ldrb r8, [r4, #1]!
  8051. 3790: e3580000 cmp r8, #0
  8052. 3794: 0a00001a beq 3804 <printf+0xc0>
  8053. c = fmt[i] & 0xff;
  8054. if(state == 0){
  8055. 3798: e35a0000 cmp sl, #0
  8056. 379c: 0afffff4 beq 3774 <printf+0x30>
  8057. if(c == '%'){
  8058. state = '%';
  8059. } else {
  8060. putc(fd, c);
  8061. }
  8062. } else if(state == '%'){
  8063. 37a0: e35a0025 cmp sl, #37 ; 0x25
  8064. 37a4: 1afffff8 bne 378c <printf+0x48>
  8065. if(c == 'd'){
  8066. 37a8: e3580064 cmp r8, #100 ; 0x64
  8067. 37ac: 0a00002c beq 3864 <printf+0x120>
  8068. printint(fd, *ap, 10, 1);
  8069. ap++;
  8070. } else if(c == 'x' || c == 'p'){
  8071. 37b0: e3580078 cmp r8, #120 ; 0x78
  8072. 37b4: 13580070 cmpne r8, #112 ; 0x70
  8073. 37b8: 13a09000 movne r9, #0
  8074. 37bc: 03a09001 moveq r9, #1
  8075. 37c0: 0a000013 beq 3814 <printf+0xd0>
  8076. printint(fd, *ap, 16, 0);
  8077. ap++;
  8078. } else if(c == 's'){
  8079. 37c4: e3580073 cmp r8, #115 ; 0x73
  8080. 37c8: 0a000018 beq 3830 <printf+0xec>
  8081. s = "(null)";
  8082. while(*s != 0){
  8083. putc(fd, *s);
  8084. s++;
  8085. }
  8086. } else if(c == 'c'){
  8087. 37cc: e3580063 cmp r8, #99 ; 0x63
  8088. 37d0: 0a00002a beq 3880 <printf+0x13c>
  8089. putc(fd, *ap);
  8090. ap++;
  8091. } else if(c == '%'){
  8092. 37d4: e3580025 cmp r8, #37 ; 0x25
  8093. putc(fd, c);
  8094. 37d8: e1a0100a mov r1, sl
  8095. 37dc: e1a00005 mov r0, r5
  8096. s++;
  8097. }
  8098. } else if(c == 'c'){
  8099. putc(fd, *ap);
  8100. ap++;
  8101. } else if(c == '%'){
  8102. 37e0: 0a000002 beq 37f0 <printf+0xac>
  8103. putc(fd, c);
  8104. } else {
  8105. // Unknown % sequence. Print it to draw attention.
  8106. putc(fd, '%');
  8107. 37e4: ebffff87 bl 3608 <putc>
  8108. putc(fd, c);
  8109. 37e8: e1a00005 mov r0, r5
  8110. 37ec: e1a01008 mov r1, r8
  8111. 37f0: ebffff84 bl 3608 <putc>
  8112. int c, i, state;
  8113. uint *ap;
  8114. state = 0;
  8115. ap = (uint*)(void*)&fmt + 1;
  8116. for(i = 0; fmt[i]; i++){
  8117. 37f4: e5f48001 ldrb r8, [r4, #1]!
  8118. } else {
  8119. // Unknown % sequence. Print it to draw attention.
  8120. putc(fd, '%');
  8121. putc(fd, c);
  8122. }
  8123. state = 0;
  8124. 37f8: e1a0a009 mov sl, r9
  8125. int c, i, state;
  8126. uint *ap;
  8127. state = 0;
  8128. ap = (uint*)(void*)&fmt + 1;
  8129. for(i = 0; fmt[i]; i++){
  8130. 37fc: e3580000 cmp r8, #0
  8131. 3800: 1affffe4 bne 3798 <printf+0x54>
  8132. putc(fd, c);
  8133. }
  8134. state = 0;
  8135. }
  8136. }
  8137. }
  8138. 3804: e24bd020 sub sp, fp, #32
  8139. 3808: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  8140. 380c: e28dd00c add sp, sp, #12
  8141. 3810: e12fff1e bx lr
  8142. } else if(state == '%'){
  8143. if(c == 'd'){
  8144. printint(fd, *ap, 10, 1);
  8145. ap++;
  8146. } else if(c == 'x' || c == 'p'){
  8147. printint(fd, *ap, 16, 0);
  8148. 3814: e1a00005 mov r0, r5
  8149. 3818: e4961004 ldr r1, [r6], #4
  8150. 381c: e3a02010 mov r2, #16
  8151. 3820: e3a03000 mov r3, #0
  8152. 3824: ebffff81 bl 3630 <printint>
  8153. } else {
  8154. // Unknown % sequence. Print it to draw attention.
  8155. putc(fd, '%');
  8156. putc(fd, c);
  8157. }
  8158. state = 0;
  8159. 3828: e3a0a000 mov sl, #0
  8160. 382c: eaffffd6 b 378c <printf+0x48>
  8161. ap++;
  8162. } else if(c == 'x' || c == 'p'){
  8163. printint(fd, *ap, 16, 0);
  8164. ap++;
  8165. } else if(c == 's'){
  8166. s = (char*)*ap;
  8167. 3830: e4968004 ldr r8, [r6], #4
  8168. ap++;
  8169. if(s == 0)
  8170. s = "(null)";
  8171. 3834: e3580000 cmp r8, #0
  8172. 3838: 01a08007 moveq r8, r7
  8173. while(*s != 0){
  8174. 383c: e5d81000 ldrb r1, [r8]
  8175. 3840: e3510000 cmp r1, #0
  8176. 3844: 0a000004 beq 385c <printf+0x118>
  8177. putc(fd, *s);
  8178. 3848: e1a00005 mov r0, r5
  8179. 384c: ebffff6d bl 3608 <putc>
  8180. } else if(c == 's'){
  8181. s = (char*)*ap;
  8182. ap++;
  8183. if(s == 0)
  8184. s = "(null)";
  8185. while(*s != 0){
  8186. 3850: e5f81001 ldrb r1, [r8, #1]!
  8187. 3854: e3510000 cmp r1, #0
  8188. 3858: 1afffffa bne 3848 <printf+0x104>
  8189. } else {
  8190. // Unknown % sequence. Print it to draw attention.
  8191. putc(fd, '%');
  8192. putc(fd, c);
  8193. }
  8194. state = 0;
  8195. 385c: e1a0a001 mov sl, r1
  8196. 3860: eaffffc9 b 378c <printf+0x48>
  8197. } else {
  8198. putc(fd, c);
  8199. }
  8200. } else if(state == '%'){
  8201. if(c == 'd'){
  8202. printint(fd, *ap, 10, 1);
  8203. 3864: e1a00005 mov r0, r5
  8204. 3868: e4961004 ldr r1, [r6], #4
  8205. 386c: e3a0200a mov r2, #10
  8206. 3870: e3a03001 mov r3, #1
  8207. 3874: ebffff6d bl 3630 <printint>
  8208. } else {
  8209. // Unknown % sequence. Print it to draw attention.
  8210. putc(fd, '%');
  8211. putc(fd, c);
  8212. }
  8213. state = 0;
  8214. 3878: e3a0a000 mov sl, #0
  8215. 387c: eaffffc2 b 378c <printf+0x48>
  8216. while(*s != 0){
  8217. putc(fd, *s);
  8218. s++;
  8219. }
  8220. } else if(c == 'c'){
  8221. putc(fd, *ap);
  8222. 3880: e4961004 ldr r1, [r6], #4
  8223. 3884: e1a00005 mov r0, r5
  8224. } else {
  8225. // Unknown % sequence. Print it to draw attention.
  8226. putc(fd, '%');
  8227. putc(fd, c);
  8228. }
  8229. state = 0;
  8230. 3888: e1a0a009 mov sl, r9
  8231. while(*s != 0){
  8232. putc(fd, *s);
  8233. s++;
  8234. }
  8235. } else if(c == 'c'){
  8236. putc(fd, *ap);
  8237. 388c: e6ef1071 uxtb r1, r1
  8238. 3890: ebffff5c bl 3608 <putc>
  8239. 3894: eaffffbc b 378c <printf+0x48>
  8240. 3898: 0000523c .word 0x0000523c
  8241. 0000389c <free>:
  8242. free(void *ap)
  8243. {
  8244. Header *bp, *p;
  8245. bp = (Header*)ap - 1;
  8246. for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8247. 389c: e59f3098 ldr r3, [pc, #152] ; 393c <free+0xa0>
  8248. static Header base;
  8249. static Header *freep;
  8250. void
  8251. free(void *ap)
  8252. {
  8253. 38a0: e92d0830 push {r4, r5, fp}
  8254. Header *bp, *p;
  8255. bp = (Header*)ap - 1;
  8256. 38a4: e240c008 sub ip, r0, #8
  8257. for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8258. 38a8: e5932000 ldr r2, [r3]
  8259. static Header base;
  8260. static Header *freep;
  8261. void
  8262. free(void *ap)
  8263. {
  8264. 38ac: e28db008 add fp, sp, #8
  8265. Header *bp, *p;
  8266. bp = (Header*)ap - 1;
  8267. for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8268. 38b0: e152000c cmp r2, ip
  8269. 38b4: e5921000 ldr r1, [r2]
  8270. 38b8: 2a000001 bcs 38c4 <free+0x28>
  8271. 38bc: e15c0001 cmp ip, r1
  8272. 38c0: 3a000007 bcc 38e4 <free+0x48>
  8273. if(p >= p->s.ptr && (bp > p || bp < p->s.ptr))
  8274. 38c4: e1520001 cmp r2, r1
  8275. 38c8: 3a000003 bcc 38dc <free+0x40>
  8276. 38cc: e152000c cmp r2, ip
  8277. 38d0: 3a000003 bcc 38e4 <free+0x48>
  8278. 38d4: e15c0001 cmp ip, r1
  8279. 38d8: 3a000001 bcc 38e4 <free+0x48>
  8280. static Header base;
  8281. static Header *freep;
  8282. void
  8283. free(void *ap)
  8284. {
  8285. 38dc: e1a02001 mov r2, r1
  8286. 38e0: eafffff2 b 38b0 <free+0x14>
  8287. bp = (Header*)ap - 1;
  8288. for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8289. if(p >= p->s.ptr && (bp > p || bp < p->s.ptr))
  8290. break;
  8291. if(bp + bp->s.size == p->s.ptr){
  8292. 38e4: e5104004 ldr r4, [r0, #-4]
  8293. if(p + p->s.size == bp){
  8294. p->s.size += bp->s.size;
  8295. p->s.ptr = bp->s.ptr;
  8296. } else
  8297. p->s.ptr = bp;
  8298. freep = p;
  8299. 38e8: e5832000 str r2, [r3]
  8300. bp = (Header*)ap - 1;
  8301. for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8302. if(p >= p->s.ptr && (bp > p || bp < p->s.ptr))
  8303. break;
  8304. if(bp + bp->s.size == p->s.ptr){
  8305. 38ec: e08c5184 add r5, ip, r4, lsl #3
  8306. 38f0: e1550001 cmp r5, r1
  8307. bp->s.size += p->s.ptr->s.size;
  8308. 38f4: 05911004 ldreq r1, [r1, #4]
  8309. 38f8: 00814004 addeq r4, r1, r4
  8310. 38fc: 05004004 streq r4, [r0, #-4]
  8311. bp->s.ptr = p->s.ptr->s.ptr;
  8312. 3900: 05921000 ldreq r1, [r2]
  8313. 3904: 05911000 ldreq r1, [r1]
  8314. } else
  8315. bp->s.ptr = p->s.ptr;
  8316. 3908: e5001008 str r1, [r0, #-8]
  8317. if(p + p->s.size == bp){
  8318. 390c: e5921004 ldr r1, [r2, #4]
  8319. 3910: e0824181 add r4, r2, r1, lsl #3
  8320. 3914: e15c0004 cmp ip, r4
  8321. p->s.size += bp->s.size;
  8322. p->s.ptr = bp->s.ptr;
  8323. } else
  8324. p->s.ptr = bp;
  8325. 3918: 1582c000 strne ip, [r2]
  8326. bp->s.size += p->s.ptr->s.size;
  8327. bp->s.ptr = p->s.ptr->s.ptr;
  8328. } else
  8329. bp->s.ptr = p->s.ptr;
  8330. if(p + p->s.size == bp){
  8331. p->s.size += bp->s.size;
  8332. 391c: 0510c004 ldreq ip, [r0, #-4]
  8333. 3920: 008c1001 addeq r1, ip, r1
  8334. 3924: 05821004 streq r1, [r2, #4]
  8335. p->s.ptr = bp->s.ptr;
  8336. 3928: 05101008 ldreq r1, [r0, #-8]
  8337. 392c: 05821000 streq r1, [r2]
  8338. } else
  8339. p->s.ptr = bp;
  8340. freep = p;
  8341. }
  8342. 3930: e24bd008 sub sp, fp, #8
  8343. 3934: e8bd0830 pop {r4, r5, fp}
  8344. 3938: e12fff1e bx lr
  8345. 393c: 000052e0 .word 0x000052e0
  8346. 00003940 <malloc>:
  8347. return freep;
  8348. }
  8349. void*
  8350. malloc(uint nbytes)
  8351. {
  8352. 3940: e92d49f8 push {r3, r4, r5, r6, r7, r8, fp, lr}
  8353. Header *p, *prevp;
  8354. uint nunits;
  8355. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8356. 3944: e2804007 add r4, r0, #7
  8357. if((prevp = freep) == 0){
  8358. 3948: e59f50d4 ldr r5, [pc, #212] ; 3a24 <malloc+0xe4>
  8359. malloc(uint nbytes)
  8360. {
  8361. Header *p, *prevp;
  8362. uint nunits;
  8363. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8364. 394c: e1a041a4 lsr r4, r4, #3
  8365. return freep;
  8366. }
  8367. void*
  8368. malloc(uint nbytes)
  8369. {
  8370. 3950: e28db01c add fp, sp, #28
  8371. Header *p, *prevp;
  8372. uint nunits;
  8373. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8374. if((prevp = freep) == 0){
  8375. 3954: e5953000 ldr r3, [r5]
  8376. malloc(uint nbytes)
  8377. {
  8378. Header *p, *prevp;
  8379. uint nunits;
  8380. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8381. 3958: e2844001 add r4, r4, #1
  8382. if((prevp = freep) == 0){
  8383. 395c: e3530000 cmp r3, #0
  8384. 3960: 0a00002b beq 3a14 <malloc+0xd4>
  8385. 3964: e5930000 ldr r0, [r3]
  8386. 3968: e5902004 ldr r2, [r0, #4]
  8387. base.s.ptr = freep = prevp = &base;
  8388. base.s.size = 0;
  8389. }
  8390. for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
  8391. if(p->s.size >= nunits){
  8392. 396c: e1520004 cmp r2, r4
  8393. 3970: 2a00001b bcs 39e4 <malloc+0xa4>
  8394. morecore(uint nu)
  8395. {
  8396. char *p;
  8397. Header *hp;
  8398. if(nu < 4096)
  8399. 3974: e59f80ac ldr r8, [pc, #172] ; 3a28 <malloc+0xe8>
  8400. p->s.size -= nunits;
  8401. p += p->s.size;
  8402. p->s.size = nunits;
  8403. }
  8404. freep = prevp;
  8405. return (void*)(p + 1);
  8406. 3978: e1a07184 lsl r7, r4, #3
  8407. 397c: ea000003 b 3990 <malloc+0x50>
  8408. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8409. if((prevp = freep) == 0){
  8410. base.s.ptr = freep = prevp = &base;
  8411. base.s.size = 0;
  8412. }
  8413. for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
  8414. 3980: e5930000 ldr r0, [r3]
  8415. if(p->s.size >= nunits){
  8416. 3984: e5902004 ldr r2, [r0, #4]
  8417. 3988: e1540002 cmp r4, r2
  8418. 398c: 9a000014 bls 39e4 <malloc+0xa4>
  8419. p->s.size = nunits;
  8420. }
  8421. freep = prevp;
  8422. return (void*)(p + 1);
  8423. }
  8424. if(p == freep)
  8425. 3990: e5952000 ldr r2, [r5]
  8426. 3994: e1a03000 mov r3, r0
  8427. 3998: e1500002 cmp r0, r2
  8428. 399c: 1afffff7 bne 3980 <malloc+0x40>
  8429. morecore(uint nu)
  8430. {
  8431. char *p;
  8432. Header *hp;
  8433. if(nu < 4096)
  8434. 39a0: e1540008 cmp r4, r8
  8435. nu = 4096;
  8436. p = sbrk(nu * sizeof(Header));
  8437. 39a4: 81a00007 movhi r0, r7
  8438. 39a8: 93a00902 movls r0, #32768 ; 0x8000
  8439. morecore(uint nu)
  8440. {
  8441. char *p;
  8442. Header *hp;
  8443. if(nu < 4096)
  8444. 39ac: 81a06004 movhi r6, r4
  8445. 39b0: 93a06a01 movls r6, #4096 ; 0x1000
  8446. nu = 4096;
  8447. p = sbrk(nu * sizeof(Header));
  8448. 39b4: ebfffeec bl 356c <sbrk>
  8449. 39b8: e1a03000 mov r3, r0
  8450. if(p == (char*)-1)
  8451. 39bc: e3730001 cmn r3, #1
  8452. return 0;
  8453. hp = (Header*)p;
  8454. hp->s.size = nu;
  8455. free((void*)(hp + 1));
  8456. 39c0: e2800008 add r0, r0, #8
  8457. Header *hp;
  8458. if(nu < 4096)
  8459. nu = 4096;
  8460. p = sbrk(nu * sizeof(Header));
  8461. if(p == (char*)-1)
  8462. 39c4: 0a000010 beq 3a0c <malloc+0xcc>
  8463. return 0;
  8464. hp = (Header*)p;
  8465. hp->s.size = nu;
  8466. 39c8: e5836004 str r6, [r3, #4]
  8467. free((void*)(hp + 1));
  8468. 39cc: ebffffb2 bl 389c <free>
  8469. return freep;
  8470. 39d0: e5953000 ldr r3, [r5]
  8471. }
  8472. freep = prevp;
  8473. return (void*)(p + 1);
  8474. }
  8475. if(p == freep)
  8476. if((p = morecore(nunits)) == 0)
  8477. 39d4: e3530000 cmp r3, #0
  8478. 39d8: 1affffe8 bne 3980 <malloc+0x40>
  8479. return 0;
  8480. 39dc: e1a00003 mov r0, r3
  8481. }
  8482. }
  8483. 39e0: e8bd89f8 pop {r3, r4, r5, r6, r7, r8, fp, pc}
  8484. base.s.ptr = freep = prevp = &base;
  8485. base.s.size = 0;
  8486. }
  8487. for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
  8488. if(p->s.size >= nunits){
  8489. if(p->s.size == nunits)
  8490. 39e4: e1540002 cmp r4, r2
  8491. prevp->s.ptr = p->s.ptr;
  8492. else {
  8493. p->s.size -= nunits;
  8494. 39e8: 10642002 rsbne r2, r4, r2
  8495. 39ec: 15802004 strne r2, [r0, #4]
  8496. base.s.size = 0;
  8497. }
  8498. for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
  8499. if(p->s.size >= nunits){
  8500. if(p->s.size == nunits)
  8501. prevp->s.ptr = p->s.ptr;
  8502. 39f0: 05902000 ldreq r2, [r0]
  8503. else {
  8504. p->s.size -= nunits;
  8505. p += p->s.size;
  8506. 39f4: 10800182 addne r0, r0, r2, lsl #3
  8507. base.s.size = 0;
  8508. }
  8509. for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
  8510. if(p->s.size >= nunits){
  8511. if(p->s.size == nunits)
  8512. prevp->s.ptr = p->s.ptr;
  8513. 39f8: 05832000 streq r2, [r3]
  8514. else {
  8515. p->s.size -= nunits;
  8516. p += p->s.size;
  8517. p->s.size = nunits;
  8518. 39fc: 15804004 strne r4, [r0, #4]
  8519. }
  8520. freep = prevp;
  8521. 3a00: e5853000 str r3, [r5]
  8522. return (void*)(p + 1);
  8523. 3a04: e2800008 add r0, r0, #8
  8524. 3a08: e8bd89f8 pop {r3, r4, r5, r6, r7, r8, fp, pc}
  8525. }
  8526. if(p == freep)
  8527. if((p = morecore(nunits)) == 0)
  8528. return 0;
  8529. 3a0c: e3a00000 mov r0, #0
  8530. 3a10: e8bd89f8 pop {r3, r4, r5, r6, r7, r8, fp, pc}
  8531. Header *p, *prevp;
  8532. uint nunits;
  8533. nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
  8534. if((prevp = freep) == 0){
  8535. base.s.ptr = freep = prevp = &base;
  8536. 3a14: e2850004 add r0, r5, #4
  8537. 3a18: e5850000 str r0, [r5]
  8538. base.s.size = 0;
  8539. 3a1c: e9850009 stmib r5, {r0, r3}
  8540. 3a20: eaffffd3 b 3974 <malloc+0x34>
  8541. 3a24: 000052e0 .word 0x000052e0
  8542. 3a28: 00000fff .word 0x00000fff