> Date: Sun, 3 Nov 2019 18:03:19 +0100 > From: Martin Pieuchot <[email protected]> > > For profiling purposes, it would be useful to know where assembly > symbols end. > > Diff below adds many END() for libkern and locore.s on sparc64. > > ok?
ok kettenis@ > Index: arch/sparc64/sparc64/locore.s > =================================================================== > RCS file: /cvs/src/sys/arch/sparc64/sparc64/locore.s,v > retrieving revision 1.186 > diff -u -p -r1.186 locore.s > --- arch/sparc64/sparc64/locore.s 16 May 2017 20:53:42 -0000 1.186 > +++ arch/sparc64/sparc64/locore.s 3 Nov 2019 16:59:20 -0000 > @@ -4047,6 +4047,7 @@ NENTRY(sun4u_ipi_tlb_page_demap) > wrpr %g1, %pstate > ba,a ret_from_intr_vector > nop > +END(sun4u_ipi_tlb_page_demap) > > NENTRY(sun4u_ipi_tlb_context_demap) > rdpr %pstate, %g1 > @@ -4077,6 +4078,7 @@ NENTRY(sun4u_ipi_tlb_context_demap) > wrpr %g1, %pstate > ba,a ret_from_intr_vector > nop > +END(sun4u_ipi_tlb_context_demap) > > #ifdef SUN4V > NENTRY(sun4v_ipi_tlb_page_demap) > @@ -4092,9 +4094,11 @@ NENTRY(sun4v_ipi_tlb_page_demap) > mov %g4, %o2 > > retry > +END(sun4v_ipi_tlb_page_demap) > > NENTRY(sun4v_ipi_tlb_context_demap) > NOTREACHED > +END(sun4v_ipi_tlb_context_demap) > #endif > > NENTRY(ipi_save_fpstate) > @@ -4136,6 +4140,7 @@ NENTRY(ipi_save_fpstate) > btst FPRS_DU, %g4 ! Upper FPU clean? > bz,pt %icc, 2f ! Then skip it > nop > +END(ipi_save_fpstate) > > membar #Sync > stda %f32, [%g3] ASI_BLK_S > @@ -4152,6 +4157,7 @@ NENTRY(ipi_save_fpstate) > 3: > ba ret_from_intr_vector > nop > +END(ipi_save_fpstate) > > NENTRY(ipi_drop_fpstate) > rdpr %pstate, %g1 > @@ -4167,15 +4173,17 @@ NENTRY(ipi_drop_fpstate) > 1: > ba ret_from_intr_vector > nop > +END(ipi_drop_fpstate) > > NENTRY(ipi_softint) > ba ret_from_intr_vector > wr %g3, 0, SET_SOFTINT > +END(ipi_softint) > > NENTRY(ipi_db) > ba slowtrap > wrpr %g0, T_BREAKPOINT, %tt > - > +END(ipi_db) > #endif > > /* > @@ -4921,6 +4929,7 @@ ENTRY(sun4u_set_tsbs) > > retl > nop > +END(sun4u_set_tsbs) > > > #ifdef MULTIPROCESSOR > @@ -4938,6 +4947,7 @@ ENTRY(cpu_mp_startup) > > ba,a,pt %xcc, cpu_initialize > nop > +END(cpu_mp_startup) > #endif > > /* > @@ -4980,6 +4990,7 @@ _C_LABEL(openfirmware): > wrpr %i2, 0, %pil > ret > restore %o0, %g0, %o0 > +END(openfirmware) > > /* > * tlb_flush_pte(vaddr_t va, int ctx) > @@ -5061,6 +5072,7 @@ _C_LABEL(sp_tlb_flush_pte): > #endif > retl > nop > +END(sp_tlb_flush_pte) > > /* > * tlb_flush_ctx(int ctx) > @@ -5129,6 +5141,7 @@ _C_LABEL(sp_tlb_flush_ctx): > #endif > retl > nop > +END(sp_tlb_flush_ctx) > > /* > * dcache_flush_page(paddr_t pa) > @@ -5176,6 +5189,7 @@ dlflush2: > flush %o5 > retl > membar #Sync > +END(us_dcache_flush_page) > > .align 8 > .globl _C_LABEL(us3_dcache_flush_page) > @@ -5198,11 +5212,13 @@ _C_LABEL(us3_dcache_flush_page): > 1: > retl > nop > +END(us3_dcache_flush_page) > > .globl no_dcache_flush_page > ENTRY(no_dcache_flush_page) > retl > nop > +END(no_dcache_flush_page) > > /* > * cache_flush_virt(va, len) > @@ -5238,6 +5254,7 @@ dlflush3: > membar #Sync > retl > nop > +END(cache_flush_virt) > > /* > * cache_flush_phys(paddr_t, psize_t, int); > @@ -5295,6 +5312,7 @@ dlflush4: > membar #Sync > retl > nop > +END(cache_flush_phys) > > /* > * XXXXX Still needs lotsa cleanup after sendsig is complete and offsets are > known > @@ -5772,6 +5790,7 @@ Lcopyin_done: > wr %g0, ASI_PRIMARY_NOFAULT, %asi ! Restore ASI > retl > clr %o0 ! return 0 > +END(copyin) > > /* > * copyout(src, dst, len) > @@ -5967,6 +5986,7 @@ Lcopyout_done: > membar #StoreStore|#StoreLoad > retl ! New instr > clr %o0 ! return 0 > +END(copyout) > > ENTRY(copyin32) > andcc %o0, 0x3, %g0 > @@ -5982,6 +6002,7 @@ ENTRY(copyin32) > stx %g0, [%o3 + PCB_ONFAULT] > retl > clr %o0 > +END(copyin32) > > ! Copyin or copyout fault. Clear cpcb->pcb_onfault and return EFAULT. > ! Note that although we were in bcopy, there is no state to clean up; > @@ -6112,6 +6133,7 @@ Lsw_havectx: > wrpr %g0, PSTATE_INTR, %pstate > ret > restore > +END(cpu_switchto) > > /* > * Snapshot the current process so that stack frames are up to date. > @@ -6131,6 +6153,7 @@ ENTRY(snapshot) > flushw > ret > restore > +END(snapshot) > > /* > * cpu_set_kpc() and cpu_fork() arrange for proc_trampoline() to run > @@ -6180,6 +6203,7 @@ ENTRY(proc_trampoline) > CHKPT %o3,%o4,0x35 > ba,a,pt %icc, return_from_trap > nop > +END(proc_trampoline) > > #ifdef DDB > > @@ -6242,6 +6266,7 @@ ENTRY(probeget) > stx %g0, [%o2 + PCB_ONFAULT] > retl ! made it, clear onfault and return > membar #StoreStore|#StoreLoad > +END(probeget) > > /* > * Fault handler for probeget > @@ -6254,7 +6279,7 @@ _C_LABEL(Lfsprobe): > membar #StoreStore|#StoreLoad > retl ! and return error indicator > mov -1, %o0 > - > +END(Lfsprobe) > #endif /* DDB */ > > /* > @@ -6289,6 +6314,8 @@ dlflush5: > flush %o3 > retl > nop > + END(pmap_zero_phys) > + > /* > * pmap_copy_page(src, dst) > * > @@ -6309,6 +6336,7 @@ ENTRY(pmap_copy_phys) > inc 8, %o1 > retl > nop > +END(pmap_copy_phys) > > /* > * extern int64_t pseg_get(struct pmap* %o0, vaddr_t addr %o1); > @@ -6357,6 +6385,7 @@ ENTRY(pseg_get) > 1: > retl > clr %o0 > +END(pseg_get) > > /* > * extern int pseg_set(struct pmap* %o0, vaddr_t addr %o1, int64_t tte %o2, > @@ -6443,6 +6472,7 @@ ENTRY(pseg_set) > 1: > retl > mov 1, %o0 > +END(pseg_set) > > > /* > @@ -6802,6 +6832,7 @@ Lbcopy_finish: > Lbcopy_complete: > ret > restore %i0, %g0, %o0 > +END(memcpy) > > /* > * bzero(addr, len) > @@ -6879,6 +6910,7 @@ Lbzero_cleanup: > Lbzero_done: > retl > mov %o4, %o0 ! Restore pointer for memset (ugh) > +END(memset) > > /* > * kcopy() is exactly like bcopy except that it set pcb_onfault such that > @@ -7083,6 +7115,7 @@ Lkcerr: > retl ! and return error indicator > mov EFAULT, %o0 > NOTREACHED > +END(kcopy) > > /* > * bcopy(src, dest, size - overlaps detected and copied in reverse > @@ -7259,6 +7292,7 @@ Lback_mopb: > retl ! dst[-1] = b; > mov %o5, %o0 > NOTREACHED > +END(memmove) > > /* > * clearfpstate() > @@ -7271,6 +7305,7 @@ ENTRY(clearfpstate) > or %o1, PSTATE_PEF, %o1 > retl > wrpr %o1, 0, %pstate > +END(clearfpstate) > > /* > * savefpstate(struct fpstate *f) > @@ -7317,6 +7352,7 @@ ENTRY(savefpstate) > membar #Sync ! Finish operation so we can > retl > wr %g0, FPRS_FEF, %fprs ! Mark FPU clean > +END(savefpstate) > > /* > * Load FPU state. > @@ -7343,6 +7379,7 @@ ENTRY(loadfpstate) > membar #Sync ! Make sure loads are complete > retl > wr %g0, FPRS_FEF, %fprs ! Clear dirty bits > +END(loadfpstate) > > /* XXX belongs elsewhere (ctlreg.h?) */ > #define AFSR_CECC_ERROR 0x100000 /* AFSR Correctable ECC > err */ > @@ -7396,6 +7433,7 @@ ENTRY(cecc_catch) > CLRTT > retry > NOTREACHED > +END(cecc_catch) > > /* > * send_softint(cpu, level, intrhand) > @@ -7434,6 +7472,7 @@ ENTRY(send_softint) > 1: > retl > wrpr %g1, 0, %pstate ! restore interrupts > +END(send_softint) > > /* > * Flush user windows to memory. > @@ -7454,6 +7493,7 @@ ENTRY(write_user_windows) > 3: > retl > nop > +END(write_user_windows) > > /* > * Clear the Nonpriviliged Trap (NPT( bit of %tick such that it can be > @@ -7482,6 +7522,7 @@ ENTRY(tick_enable) > > retl > wrpr %o0, 0, %pstate ! restore interrupts > +END(tick_enable) > > /* > * On Blackbird (UltraSPARC-II) CPUs, writes to %tick_cmpr may fail. > @@ -7507,6 +7548,7 @@ ENTRY(tickcmpr_set) > 2: > retl > nop > +END(tickcmpr_set) > > ENTRY(sys_tickcmpr_set) > ba 1f > @@ -7527,6 +7569,7 @@ ENTRY(sys_tickcmpr_set) > 2: > retl > nop > +END(sys_tickcmpr_set) > > /* > * Support for the STICK logic found on the integrated PCI host bridge > @@ -7554,6 +7597,7 @@ ENTRY(stick) > srlx %o1, 1, %o1 > retl > or %o2, %o1, %o0 > +END(stick) > > ENTRY(stickcmpr_set) > setx STICK_CMP_HIGH, %o1, %o3 > @@ -7579,6 +7623,7 @@ ENTRY(stickcmpr_set) > 2: > retl > nop > +END(stickcmpr_set) > > #define MICROPERSEC (1000000) > .data > @@ -7630,6 +7675,7 @@ ENTRY(delay) ! %o0 = n > > retl > nop > +END(delay) > > ENTRY(setjmp) > save %sp, -CC64FSZ, %sp ! Need a frame to return to. > @@ -7638,6 +7684,7 @@ ENTRY(setjmp) > stx %i7, [%i0+8] ! 64-bit return pc > ret > restore %g0, 0, %o0 > +END(setjmp) > > ENTRY(longjmp) > save %sp, -CC64FSZ, %sp ! prepare to restore to (old) frame > @@ -7679,6 +7726,7 @@ ENTRY(longjmp) > 2: > retl > nop > + END(savetstate) > > /* > * Debug stuff. Resore trap registers from buffer. > @@ -7732,6 +7780,7 @@ ENTRY(longjmp) > flush %o2 > retl > nop > + END(restoretstate) > > #endif /* DDB */ /* DDB */ > > Index: lib/libkern/arch/sparc64/ffs.S > =================================================================== > RCS file: /cvs/src/sys/lib/libkern/arch/sparc64/ffs.S,v > retrieving revision 1.4 > diff -u -p -r1.4 ffs.S > --- lib/libkern/arch/sparc64/ffs.S 25 Nov 2007 18:25:36 -0000 1.4 > +++ lib/libkern/arch/sparc64/ffs.S 3 Nov 2019 16:59:20 -0000 > @@ -87,6 +87,7 @@ ENTRY(ffs) > ldsb [%o2 + %o0], %o0 > retl > add %o0, 24, %o0 > +END(ffs) > > .globl _C_LABEL(__ffstab) > _C_LABEL(__ffstab): > Index: lib/libkern/arch/sparc64/htonl.S > =================================================================== > RCS file: /cvs/src/sys/lib/libkern/arch/sparc64/htonl.S,v > retrieving revision 1.4 > diff -u -p -r1.4 htonl.S > --- lib/libkern/arch/sparc64/htonl.S 25 Nov 2007 18:25:36 -0000 1.4 > +++ lib/libkern/arch/sparc64/htonl.S 3 Nov 2019 16:59:20 -0000 > @@ -43,3 +43,4 @@ > ENTRY(htonl) > retl > sra %o0, 0, %o0 ! sign extend > +END(htonl) > Index: lib/libkern/arch/sparc64/htons.S > =================================================================== > RCS file: /cvs/src/sys/lib/libkern/arch/sparc64/htons.S,v > retrieving revision 1.4 > diff -u -p -r1.4 htons.S > --- lib/libkern/arch/sparc64/htons.S 25 Nov 2007 18:25:36 -0000 1.4 > +++ lib/libkern/arch/sparc64/htons.S 3 Nov 2019 16:59:20 -0000 > @@ -42,3 +42,4 @@ ENTRY(htons) > sethi %hi(0xffff0000), %o1 > retl > andn %o0, %o1, %o0 > +END(htons) > Index: lib/libkern/arch/sparc64/strlen.S > =================================================================== > RCS file: /cvs/src/sys/lib/libkern/arch/sparc64/strlen.S,v > retrieving revision 1.5 > diff -u -p -r1.5 strlen.S > --- lib/libkern/arch/sparc64/strlen.S 19 Dec 2014 22:30:47 -0000 1.5 > +++ lib/libkern/arch/sparc64/strlen.S 3 Nov 2019 16:59:20 -0000 > @@ -46,3 +46,4 @@ ENTRY(strlen) > inc %o0 ! always increment pointer > retl > sub %o0, %o1, %o0 ! return length (ptr - (origptr+1)) > +END(strlen) > >
