jhensley@isis.cs.du.edu (John 'Hawg' Hensley) (05/09/91)
I'm having some trouble with 'passwd', which I was hoping someone more familiar with Towers could help with. I haven't worked with them much at all, and (as will shortly be obvious) my kernel and system-type programming experience is fairly limited. It always exits saying 'bad system call'. If I run it through adb or sdb, though, it works through two of these calls and then works OK. The password gets changed and everything's hunky-dory. The bad system call error is: Bad system call (12) (sig 12) syscall: address 0x2986 and it's the same both times when run through sdb. In the Programmer's Reference error 12 is ENOMEM, which could have three causes: 1) the maximum system space (MAXMEM) is too small for the process. For 'passwd'? Don't think so, but checking MAXMEM with a short C program (just prints the value of MAXMEM from /usr/include/param.h) gives a size of 7168. Of course, I dunno what 7168 denotes, but it seems small. The user stack is 0xE00000, if that helps or has anything to do with it. Seems awfully large to me. 2) the program uses too many segmentation registers? I really have no clue (even less than on the other possibilities :) about this one, but stepping through it with adb shows a couple of places with d1-3 and a1-3 all having something done with 'em (someone who knows assembly help me!); could these be 'too many' segmentation registers? 3) not enough swap space. I don't think so, as I went through the calculation of swap space needed from the Performance Tutorial Manual and the swap partition was perfect. But hey, I've been wrong before... If anyone has any ideas why such a simple, necessary program isn't working, or even better, knows what I should do about it, please clue me in! John