Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Mar 2001 13:01:32 +1000 (EST)
From:      User Raymond <raymond@one.com.au>
To:        freebsd-alpha@FreeBSD.org
Subject:   Strange results from compiled alpha code
Message-ID:  <200103060301.NAA24010@gw.one.com.au>

next in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103060301.NAA24010>