This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Network programming for eCos under linux
- To: "Trenton D. Adams" <tadams at theone dot dnsalias dot com>
- Subject: Re: [ECOS] Network programming for eCos under linux
- From: Jonathan Larmour <jlarmour at redhat dot com>
- Date: Wed, 08 Aug 2001 16:13:57 +0100
- Cc: 'Grant Edwards' <grante at visi dot com>,'Andrew Lunn' <andrew dot lunn at ascom dot ch>,'eCos discussion' <ecos-discuss at sources dot redhat dot com>
- Organization: Red Hat UK Ltd.
- References: <000a01c1201b$a6452640$090110ac@TRENT>
"Trenton D. Adams" wrote:
>
> > >
> > > AFAICT, that should work on an ARM. If it doesn't, it is a
> > > compiler bug.
> >
> > Agreed. It would be different if you were accessing a more strictly
> > aligned
> > type through a less strictly aligned type, e.g. casting a char * to
> a
> > short
> > * and dereferencing; as Grant says...
> >
>
> So, you're not supposed to use a "char buffer[1024];" for a generic
> buffer then? If not, how should one create a generic buffer?
>
> So, the following gcc parameter would only warn when there is a problem
> with that particular architecture that you're compiling for?
> -Wcast-align
Yes, but it would also warn even if you have taken care to ensure it is
aligned.
> The one below would make it an error to cast from a char * to an int *?
> -mstrict-align
Yes.
> So, how would one go about making a buffer word aligned or DWORD aligned
> just to be safe?
something along the lines of:
char buffer[1024];
#define ALIGNMENT 8
#define ALIGNUP(_x_) (((char *)(_x_) + ALIGN-1) & ~(ALIGN-1))
int *foo = ALIGNUP(buffer);
You could also use __alignof(int) to give the alignment but that's
obviously a GNU C-ism.
> > > > Maybe i don't have the casts correct.
> > >
> > > There are other casts that are not going to work on ARM
> > > architecture (accessing words on non-word boundaries, for
> > > example). That's not a compiler error, it's just another way
> > > to shoot yourself in the foot with C.
> >
> > Although it's worth mentioning that not all architectures disallow
> > unaligned accesses which is why people think they can get away with
> it
> > :).
> >
>
> This goes back to the -Wcast-align. If -Wall is on, that means all
> warnings right?
Not all. Look at "info gcc" or "man gcc" to list the warnings that are and
aren't included e.g. -Wcast-align is not included. "man gcc" sez:
The remaining `-W...' options are not implied by `-Wall' because
they warn about
constructions that we consider reasonable to use, on occasion, in
clean programs.
Jifl
--
Red Hat, Rustat House, Clifton Road, Cambridge, UK. Tel: +44 (1223) 271062
Maybe this world is another planet's Hell -Aldous Huxley || Opinions==mine