2002 2003 2004 2005 <2006> 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 | Index | 2002 2003 2004 2005 <2006> 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | osiSockDiscoverBroadcastAddresses(): pointer not word-aligned? |
From: | Ralph Lange <[email protected]> |
To: | Jeff Hill <[email protected]>, EPICS Core Talk <[email protected]>, Eric Norum <[email protected]> |
Cc: | Ralf Hartmann <[email protected]> |
Date: | Tue, 22 Aug 2006 16:41:52 +0200 |
Hi Jeff, hi Eric,a colleage of mine is trying to get EPICS running on RTEMS running on an ARM v4t.
The system crashes with a alignment fault in in BSD network stack function in_control() which gets a struct ifreq pointer. This pointer is created in osiSockDiscoverBroadcastAddresses(), where you create an array of such structures by calloc()ing 100 times the size of an struct ifreq (line 87). Then you step through the array. When you call socket_ioctl() to get the broadcast address (line 177), that call causes the crash down in the BSD stack, because at that point the pointer pifreq is not word-aligned.
We think that somehow within the array the single struct ifreq entries are not word-aligned - which sounds not very likely looking at the ifreq definition, or that your stepping algorithm in ifreqNext() (line 38 ff.) returns a wrong address which is odd.
Any ideas?What was the reason for using the ifreqNext() function instead of just stepping with sizeof (struct ifreq)?
Clueless, Ralph & Ralf