From owner-freebsd-alpha Mon Mar 5 22:29:20 2001 Delivered-To: freebsd-alpha@freebsd.org Received: from feral.com (feral.com [192.67.166.1]) by hub.freebsd.org (Postfix) with ESMTP id 4B93937B71A for ; Mon, 5 Mar 2001 22:29:16 -0800 (PST) (envelope-from mjacob@feral.com) Received: from beppo (beppo [192.67.166.79]) by feral.com (8.9.3/8.9.3) with ESMTP id WAA06499; Mon, 5 Mar 2001 22:29:10 -0800 Date: Mon, 5 Mar 2001 22:29:08 -0800 (PST) From: Matthew Jacob Reply-To: mjacob@feral.com To: User Raymond Cc: freebsd-alpha@FreeBSD.ORG Subject: Re: Strange results from compiled alpha code In-Reply-To: <200103060301.NAA24010@gw.one.com.au> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-alpha@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Oh, god.... not MUMPS? Aieee! Run! Run! Run!!! The Medical Database from Hell...But if it is indeed mumps, it darn well is supposed to work on Alphas 'coz I believe that Adac Labs switched from Alpha/Vaxen to Alpha/Alpha quite a while back. Generally, this is not really the best forum for this issue as this is not specifically a list for help in porting applications to Alpha. In your specific case you need to really spend more time with the assembly output. In particular if this in general also has problems with Linux/Alpha, it'll have problems here, and we probably can't spend a lot of time helping you in this case. You haven't given enough info, but you, or somebody, is assuming that a char array is mapping sensibly to to the structure you're trying to pun it with. You don't really know how the alpha compiler is possibly padding the short below. On Tue, 6 Mar 2001, User Raymond wrote: > Subj: Strange results from compiled alpha code > To: freebsd-alpha@FreeBSD.org > From: raymond@one.com.au > > This refers to FreeBSD 4.2-RELEASE alpha running on an AS200. > > Sorry for the size of this post - I have attempted to create a small > demonstration program but can't seem to. > > ...anyway, consider the following piece of c source code: > > > typedef struct CSTRING // our string type > { short len; // length of it > u_char buf[32768]; // and the content > } cstring; // end counted string > > extern u_char *mumpspc; // mumps prog pointer > > mumpspc = mumpspc + > ((cstring *)mumpspc)->len + > sizeof(short) + 1; // point past the string > > and the following gdb output: > > 975 mumpspc = mumpspc + > (gdb) p mumpspc > $1 = (u_char *) 0x120096c7f "\002" > (gdb) p mumpspc + ((cstring *)mumpspc)->len + sizeof(short) + 1 > $2 = (u_char *) 0x120096c84 "<\001" > (gdb) set mumpspc = mumpspc + ((cstring *)mumpspc)->len + sizeof(short) + 1 > (gdb) p mumpspc > $3 = (u_char *) 0x120096c84 "<\001" > (gdb) set mumpspc = 0x120096c7f > (gdb) p mumpspc > $4 = (u_char *) 0x120096c7f "\002" > (gdb) s > 978 break; > (gdb) p mumpspc > $5 = (u_char *) 0x12009a982 "" > (gdb) set mumpspc = 0x120096c7f > (gdb) p mumpspc[0] > $6 = 2 '\002' > (gdb) p mumpspc[1] > $7 = 0 '\000' > (gdb) p mumpspc[2] > $8 = 52 '4' > (gdb) p mumpspc[3] > $9 = 50 '2' > (gdb) p mumpspc[4] > $10 = 0 '\000' > (gdb) p mumpspc[5] > $11 = 60 '<' > > > It appears that the "set" is ok when interpreted by gdb but the compiled > code gives the wrong answer - it seems to ignore the '\000' at mumpspc[1]. > > This code works OK on the x86 architecture (FreeBSD and linux); doesn't > work with linux alpha either and (yes) I know it's horrible code. > > but - any ideas? > > Ray Newman > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-alpha" in the body of the message > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message