From owner-freebsd-alpha Mon Mar 5 18:47:25 2001 Delivered-To: freebsd-alpha@freebsd.org Received: from gw.one.com.au (gw.one.com.au [203.18.85.1]) by hub.freebsd.org (Postfix) with ESMTP id 3914437B718 for ; Mon, 5 Mar 2001 18:47:20 -0800 (PST) (envelope-from raymond@one.com.au) Received: from one.com.au (pmo.local [10.18.85.2]) by gw.one.com.au (8.9.2/8.9.2) with SMTP id NAA24010 for freebsd-alpha@FreeBSD.org; Tue, 6 Mar 2001 13:01:32 +1000 (EST) (envelope-from raymond@one.com.au) Date: Tue, 6 Mar 2001 13:01:32 +1000 (EST) From: User Raymond Message-Id: <200103060301.NAA24010@gw.one.com.au> Subject: Strange results from compiled alpha code To: freebsd-alpha@FreeBSD.org Sender: owner-freebsd-alpha@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org 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