runtime·printf("runtime: function symbol table header: 0x%x 0x%x\n",*(uint32*)pclntab,*(uint32*)(pclntab+4));
runtime·throw("invalid function symbol table\n");
}
ftab=(Ftab*)(functab+1);
nftab=*(uintptr*)(pclntab+8);
nftab=functab[0];
ftab=(Ftab*)(pclntab+8+sizeof(void*));
for(i=0;i<nftab;i++){
for(i=0;i<nftab;i++){
// NOTE: ftab[nftab].entry is legal; it is the address beyond the final function.
// NOTE: ftab[nftab].entry is legal; it is the address beyond the final function.
if(ftab[i].entry>ftab[i+1].entry){
if(ftab[i].entry>ftab[i+1].entry){
runtime·printf("function symbol table not sorted by program counter: %p %S > %p %S",ftab[i].entry,*ftab[i].func->name,ftab[i+1].entry,i+1==nftab?end:*ftab[i+1].func->name);
f1=(Func*)(pclntab+ftab[i].funcoff);
f2=(Func*)(pclntab+ftab[i+1].funcoff);
runtime·printf("function symbol table not sorted by program counter: %p %s > %p %s",ftab[i].entry,runtime·funcname(f1),ftab[i+1].entry,i+1==nftab?"end":runtime·funcname(f2));