From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cagney To: Jim Blandy Cc: Michael Snyder , gdb-patches@sources.redhat.com Subject: Re: [RFC/RFA] gdb extension for Harvard architectures Date: Tue, 02 Oct 2001 14:13:00 -0000 Message-id: <3BBA2DC9.5060500@cygnus.com> References: <3BB4D843.A92818B9@cygnus.com> <3BB512A9.6050801@cygnus.com> <3BB5195F.6050603@cygnus.com> X-SW-Source: 2001-10/msg00036.html > Andrew Cagney writes: > >> Would it be better if the cast operator, by default, preserved the >> address space of the pointer being cast? > > > That would get a bit hairy. If I've got a value of the type: > > (@code int * @code * @code * @code) > > --- that is, "a pointer in code space to a pointer in code space to a > pointer in code space to an int in code space" --- and cast it to > > (int **) > > (note that I've dropped a layer of pointers here), how far down do we > go? Does that become a `@code int * @code * @code'? Or just a `int > * @code *'? It's a bit weird. You don't. > I kind of think that casts should just work the normal way. People > working on machines with separate address spaces have to think a > little harder --- I don't think we can really conceal that. Remember we're talking about poerations that potentially cast a code pointer to a data or I/O pointer so this can't be described as normal. It is definitly way outside the bounds of the C language spec. Any way, consider the intent of someone entering a sequence like: (gdb) x/w foo 0x0 (gdb) x/i foo nop (gdb) print/x *(int*)foo 0xdeadbeef vs (gdb) print/x *(int*)foo 0x0 and where should this go: (gdb) set *(int*)foo = 0xdeadbeef This mysterious address switching strikes me as wierd. Andrew