ωدfq8 SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK J r SSK J r \ R(d\R"S5eSrSr"SS5r"S S \5r"S S \5r"S S5r"SS\\R*5r"SS\\R*5r"SS\\R*5r"SS\\R*5r"SS\R*5r\S:Xa\R8"5 gg)N)support)findfileztest module requires subprocesscP[RR[USS95$)N dtracedata)subdir)ospathabspathr)filenames 7/opt/alt/python313/lib64/python3.13/test/test_dtrace.pyr r s 77??8H\B CCc[R"SSU5nUR5Vs/sH5nU(dM URS5(aM$UR S5PM7 nnUR SS9 UVs/sHoSPM nnSR U5$s snfs snf![[4a [S RU55ef=f) a=Normalize DTrace output for comparison. DTrace keeps a per-CPU buffer, and when showing the fired probes, buffers are concatenated. So if the operating system moves our thread around, the straight result can be "non-causal". So we add timestamps to the probe firing, sort by that field, then strip it from the outputz\[[0-9]+ refs\]# c[US5$)Nr)int)rows r (normalize_trace_output..&s CAKr )key z%tracer produced unparsable output: {}) resub splitlines startswithsplitsortjoin IndexError ValueErrorAssertionErrorformat)outputrresults r normalize_trace_outputr'sVV&F 3F  ((* * >>#. CIIdO*   / 0$*+FSa&F+yy   ,  #  4 ; ;F C   s3B) BBB(B)>B$ B) B))+CcN\rSrSrSrSr/rS SjrS SjrS Sjr S Sjr Sr Sr g) TraceBackend/Nc :[UR[XR-5[US-5US95n[ [XR-S-55nUR 5R 5nSSS5 XS4$!,(df  WU4$=f)Nz.py) script_file python_fileoptimize_pythonz .expected)r' trace_pythonr EXTENSIONopenreadrstrip)selfnamer. actual_outputfexpected_outputs r run_caseTraceBackend.run_case4s.t/@/@~~ 56u -+0A0-. '$/+=> ?1ffhoo/O@ //@ ? //s B  BcBURU/-nU(aUSU/- nU$)Nz-c)COMMAND)r4r, subcommandcommands r generate_trace_command#TraceBackend.generate_trace_command?s),,+.  j) )Gr cURX5n[R"U[R[RSS9R 5upEU$)NTstdoutstderruniversal_newlines)r? subprocessPopenPIPESTDOUT communicate)r4r,r=r>rC_s r traceTraceBackend.traceEsM--kF$$W,6OO,6,=,=8<>?Jkm  r c/nU(aURS/U-5 SR[R/U-U/-5nUR X5$)Nz-O )extendr sys executablerL)r4r,r-r. python_flagsr=s r r/TraceBackend.trace_pythonMsO     8 9XXs~~.= MN zz+22r c@UR[SUR-55nUR5nUS:wa3[R"SRURSU55eg![[ [ 4an[U5nSnAN_SnAff=f)N assert_usablezprobe: successz{}(1) failed: {}r) rLr r0stripFileNotFoundErrorNotADirectoryErrorPermissionErrorstrunittestSkipTestr$r<)r4r%fnfes r rVTraceBackend.assert_usableTs ZZ$..(H IJF\\^F % %##"))$,,q/6B  &"#5G YF s7A33B BBN) __name__ __module__ __qualname____firstlineno__r0r< COMMAND_ARGSr9r?rLr/rV__static_attributes__r`r r r)r)/s*IGL 0 3 r r)c \rSrSrSr/SQrSrg) DTraceBackend`z.d)dtracez-qz-sr`Nrbrcrdrer0r<rgr`r r riri`s I$Gr ric \rSrSrSrSS/rSrg)SystemTapBackendez.stpstapz-gr`Nrlr`r r rnrnesItnGr rncN\rSrSrSrSrSr\S5rSr Sr Sr Sr S r S rg) TraceTestsjNrc8URR5 gra)backendrVr4s r setUpClassTraceTests.setUpClassrs ""$r cpURRXRS9up#URX#5 g)N)r.)rur9r. assertEqual)r4r5r6r8s r r9TraceTests.run_casevs5)-)>)> "6"6*?*8&  8r c&URS5 g)N call_stackr9rvs r test_function_entry_return%TraceTests.test_function_entry_return{s l#r c4^^[/SQ5n[[S55nUR5mSSS5 UU4SjnU"S5HnUR UR 5 M TR [5U5 g!,(df  NZ=f)z9Ensure our call stack test hits all function call opcodes) CALL_FUNCTIONCALL_FUNCTION_EXCALL_FUNCTION_KWz call_stack.pyNc>[TSSTRS9nURHLn[U[R 5(dM$UR U:XdM6[R"U5s $ /$)Nzexec)sourcer modeoptimize) compiler. co_consts isinstancetypesCodeTypeco_namedisget_instructions)funcnamecodec code_stringr4s r get_function_instructionsFTraceTests.test_verify_call_opcodes..get_function_instructionssb+$. &$($8$8:D ^^a00QYY(5J//22$Ir start)setr1r r2discardopnamerz)r4opcodesr7r instructionrs` @r test_verify_call_opcodes#TraceTests.test_verify_call_opcodes~stOP '/* +q&&(K, 5W=K OOK.. /> (%, +s B  Bc&URS5 g)Ngcr~rvs r test_gcTraceTests.test_gcs dr c&URS5 g)Nliner~rvs r test_lineTraceTests.test_lines fr r`)rbrcrdremaxDiffrur. classmethodrwr9rrrrrgr`r r rrrrjs>GGO%%9 $)2r rrc&\rSrSr\"5rSrSrg)DTraceNormalTestsrr`Nrbrcrdrerirur.rgr`r r rroGOr rc&\rSrSr\"5rSrSrg)DTraceOptimizedTestsr`Nrr`r r rrrr rc&\rSrSr\"5rSrSrg)SystemTapNormalTestsrr`Nrbrcrdrernrur.rgr`r r rr GOr rc&\rSrSr\"5rSrSrg)SystemTapOptimizedTestsrr`Nrr`r r rrrr rcd\rSrSr\S5r\S5rSrSr \ RS5r Sr g) CheckDtraceProbesc[R"S5(a:UR5up[R(a[ SUSU35 gg[ R"S5e)N WITH_DTRACEzreadelf version: .z9CPython must be configured with the --with-dtrace option.) sysconfigget_config_varget_readelf_versionrverboseprintr\r])clsreadelf_major_versionreadelf_minor_versions r rwCheckDtraceProbes.setUpClasss_  # #M 2 2;>;R;R;T 8 !)*?)@BWAXYZ##$_` `r c nSS/n[R"U[R[RSS9nU UR5up#SSS5 UR(a3[ SSR U5<SURSW<S W<35e[R"S W5nUc[R"S U35e[URS 55[URS554$!,(df  N=f![a [R"S 5ef=f)Nreadelfz --versionTrBzCommand rOz failed with exit code z : stdout=z stderr=z!Couldn't find readelf on the pathz!^(?:GNU) readelf.*?\b(\d+)\.(\d+)z!Unable to parse readelf version: rr)rFrGrHrJ returncode Exceptionr OSErrorr\r]rsearchrgroup)cmdprocversionrDmatchs r r%CheckDtraceProbes.get_readelf_versions! Ik*C##!!#' D "&"2"2"4sxx}/0&&*oo%67%[ < >H =##&Gy$QR R5;;q>"C A$777% I##$GH H Is#9DDA D D D!D4cSS[R/n[R"U[R[R SS9R 5up#U$)Nrz-nTrB)rQrRrFrGrHrIrJ)r4r>rCrKs r get_readelf_output$CheckDtraceProbes.get_readelf_outputsMdCNN3$$ ??$$#  +-   r cUR5n/SQnUH,nURUS9 URX15 SSS5 M. g!,(df  M@=f)N)zName: import__find__load__donezName: import__find__load__startz Name: auditzName: gc__startzName: gc__done probe_namersubTestassertIn)r4readelf_outputavailable_probe_namesrs r test_check_probes#CheckDtraceProbes.test_check_probessM002! 0J4 j954044 A A cUR5n/SQnUH,nURUS9 URX15 SSS5 M. g!,(df  M@=f)N)zName: function__entryzName: function__returnz Name: linerr)r4rmissing_probe_namesrs r test_missing_probes%CheckDtraceProbes.test_missing_probessM002  .J4 j954.44rr`N)rbrcrdrerrw staticmethodrrrr\expectedFailurerrgr`r r rrsNaa88: : : :r r__main__)ros.pathrrrFrQrrr\testr test.supportrhas_subprocess_supportr]r r'r)rirnrrTestCaserrrrrrbmainr`r r rs    !%%   = >>D 2..b%L% | 11h H$5$5 :x'8'8 :x'8'8 j(*;*;O:))O:d z MMOr