[Ace-users] Re: Endianess problem on scale pxa270 processor (gumstix board)

sebastien333 at gmail.com sebastien333 at gmail.com
Wed Sep 19 17:45:56 CDT 2007


The bit is set to 0x01(little-endian) for client requests coming from
both the Linux PC and the gumstix board
and going to the server on the gumstix.

Problem is that if the client PC send an unsigned long long parameter
value of 103 000 000 000 (0x00000017FB474600) the server on the
gumstix will read a value of 18 106 517 792 680 312 855
(0xFB47460000000017)

The value was marshalled like this (0x004647FB17000000).
And that's how I expected it to be the correct format.

I suspect I'm missing some directive in config.h (ACE_LACKS_OF
WHATEVER,etc)

Unless I missed a bug report from 1,5,10 regarding byte swapping or
something ?



On Sep 19, 4:45 am, "Johnny Willemsen" <jwillem... at remedy.nl> wrote:
> Hi,
>
> Thanks for using the PRF form. I don't think you are seeing a problem, the
> data is always marshaled in the endianess of the host TAO runs on, there is
> a bit in the header indicating which endianess has been used. If you print
> the values in the application code, is the value then the same? We have a
> few gumstick boards here at our office, we already did build ACE and TAO for
> it, we can assist with the gumstix board as part of our commercial services
> as described onwww.theaceorb.nl.
>
> Regards,
>
> Johnny Willemsen
> Remedy IT
> Postbus 101
> 2650 AC  Berkel en Rodenrijs
> The Netherlandswww.theaceorb.nl/www.remedy.nl
>
> *** Integrated compile and test statistics seehttp://scoreboard.theaceorb.nl***
> *** Commercial service and support for ACE/TAO/CIAO             ***
> *** Seehttp://www.theaceorb.nl/en/support.html                ***
>
> <sebastien... at gmail.com> wrote in message
>
> <news:1190129033.494706.23960 at v23g2000prn.googlegroups.com>...
>
>
>
> >     TAO VERSION: 1.5.10
> >     ACE VERSION: 5.5.10
>
> >     HOST MACHINE and OPERATING SYSTEM:
> >        Fedora core 3 on x86 PC
>
> >     TARGET MACHINE and OPERATING SYSTEM, if different from HOST:
> >     COMPILER NAME AND VERSION (AND PATCHLEVEL):
>
> >        gumstix verdex board running linux 2.6.21 , gcc 4.1.1
>
> >     THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-
> >     specific file, simply state which one]:
>
> > #ifndef ACE_CONFIG_LINUX_H
> > #define ACE_CONFIG_LINUX_H
> > #include /**/ "ace/pre.h"
>
> > #define ACE_PLATFORM_CONFIG config-linux.h
>
> > #include "ace/config-linux-common.h"
>
> > #define ACE_HAS_SVR4_DYNAMIC_LINKING
> > #define ACE_HAS_AUTOMATIC_INIT_FINI
> > #define ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE
>
> > #if !defined (ACE_MT_SAFE)
> > #define ACE_MT_SAFE 1                           // JCEJ
> > 12/22/96        #1
> > #endif
>
> > #if ACE_MT_SAFE
> > // Yes, we do have threads.
> > #define ACE_HAS_THREADS
> > // And they're even POSIX pthreads (LinuxThreads implementation)
> > #define ACE_HAS_PTHREADS
> > // ... and the final standard even!
> > #define ACE_HAS_PTHREADS_STD
>
> > // On linux this is part of pthreads
> > #  if (defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199309L)
> > #    if !defined (ACE_HAS_CLOCK_GETTIME)
> > #      if !defined(__PGI)
> > #        define ACE_HAS_CLOCK_GETTIME
> > #      endif /* __PGI */4
> > #      define ACE_HAS_CLOCK_SETTIME
> > #    endif  /* !ACE_HAS_CLOCK_GETTIME */
> > #  endif  /* _POSIX_C_SOURCE >= 199309L */
>
> > #if !defined (ACE_HAS_PTHREADS_UNIX98_EXT)
> > #  define ACE_LACKS_RWLOCK_T
> > #else
> > #  define ACE_HAS_RECURSIVE_MUTEXES
> > #endif  /* !ACE_HAS_PTHREADS_UNIX98_EXT */
>
> > #define ACE_HAS_THREAD_SPECIFIC_STORAGE     // jcej 12/22/96
> > #2
>
> > #define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS    // JCEJ 1/7-8/96
>
> > #if defined(__GLIBC__)
> > // Platform supports reentrant functions (i.e., all the POSIX *_r
> > // functions).
> > #define ACE_HAS_REENTRANT_FUNCTIONS
>
> > #if (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)
> >    // Older versions of glibc lacked reentrant netdb functions
> > #  define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS
>
> >    // glibc < 2.1 lacks pthread_attr_setstacksize()
> > #  define ACE_LACKS_THREAD_STACK_SIZE
> > #endif /* (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)
> > */
>
> > // uses ctime_r & asctime_r with only two parameters vs. three
> > #define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
> > #endif
>
> > #else
> > // AIO support pulls in the rt library, which pulls in the pthread
> > // library.  Disable AIO in single-threaded builds.
> > # undef ACE_HAS_AIO_CALLS
> > #endif  /* ACE_MT_SAFE */
>
> > //#define ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1
> > #define ACE_HAS_CPU_SET_T
> > #define ACE_LACKS_STROPTS_H
> > #if defined (ACE_HAS_STRBUF_T)
> > #undef ACE_HAS_STRBUF_T
> > #endif
> > #if defined (ACE_HAS_PTHREAD_SETSTACK)
> > #undef ACE_HAS_PTHREAD_SETSTACK
> > #endif
> > #define ACE_LACKS_PTHREAD_SETSTACK
> > #if defined (ACE_HAS_AIO_CALLS)
> > #undef ACE_HAS_AIO_CALLS
> > #endif
> > #if defined (ACE_HAS_GETIFADDRS)
> > #undef ACE_HAS_GETIFADDRS
> > #endif
> > #define ACE_LACKS_STRRECVFD
> > #if defined (ACE_LACKS_GETLOADAVG)
> > #undef ACE_HAS_GETLOADAVG
> > #endif
> > #define ACE_LACKS_GETLOADAVG
>
> > #include /**/ "ace/post.h"
>
> > #endif /* ACE_CONFIG_LINUX_H */
>
> >     THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you
> >     use a link to a platform-specific file, simply state which one
> >     (unless this isn't used in this case, e.g., with Microsoft Visual
> >     C++)]:
>
> > ACE_PLATFORM_CONFIG ?= config-linux-gumstix.h
>
> > exceptions ?= 1
> > debug ?= 1
> > optimize ?= 1
> > threads ?= 1
>
> > GUMSTIX_BUILDROOT   = /gumstix-dev/trunk
> > BUILD_ARM           = $(wildcard $(GUMSTIX_BUILDROOT)/build_arm*)
> > CROSS_COMPILE       = $(patsubst %g++, %, $(wildcard $(BUILD_ARM)/
> > staging_dir/bin/arm-linux-uclibc*-g++))
>
> > ifeq ($(strip $(CROSS_COMPILE)),)
> > $(error Unable to detect C++ Cross Compiler)
> > endif
>
> > TARGET_ARCH= -fPIC -Os -march=armv5te -mtune=xscale -Wa,-mcpu=xscale
> > CC  = $(CROSS_COMPILE)gcc
> > CXX = $(CROSS_COMPILE)g++
>
> > CPPFLAGS +=  -fPIC -Os -march=armv5te -mtune=xscale -Wa,-mcpu=xscale
>
> > no_hidden_visibility=1
>
> > HOST_ROOT=/tmp/seb/ACE_wrappers
> > TAO_IDL := $(HOST_ROOT)/bin/tao_idl
> > TAO_IDLFLAGS += -g $(HOST_ROOT)/bin/gperf
> > TAO_IDL_DEP := $(HOST_ROOT)/bin/tao_idl$(EXEEXT)
> > ###################################
>
> > PLATFORM_XT_CPPFLAGS=
> > PLATFORM_XT_LIBS=-lXt
> > PLATFORM_XT_LDFLAGS=
>
> > PLATFORM_FL_CPPFLAGS=
> > PLATFORM_FL_LIBS=-lfltk -lfltk_forms -lfltk_gl
> > PLATFORM_FL_LDFLAGS=
>
> > PLATFORM_X11_CPPFLAGS=-I/usr/X11R6/include
> > PLATFORM_X11_LIBS=-lX11
> > PLATFORM_X11_LDFLAGS=-L/usr/X11R6/lib
>
> > PLATFORM_GL_CPPFLAGS=-I/usr/X11R6/include
> > PLATFORM_GL_LIBS    =-lGL
> > PLATFORM_GL_LDFLAGS =-L/usr/X11R6/lib
>
> > PLATFORM_GTK_CPPFLAGS=$(shell gtk-config --cflags)
> > PLATFORM_GTK_LIBS    =$(shell gtk-config --libs)
> > PLATFORM_GTK_LDFLAGS =
>
> > PLATFORM_FOX_CPPFLAGS=
> > PLATFORM_FOX_LIBS=-lFOX
> > PLATFORM_FOX_LDFLAGS=
>
> > # NOTE: we only support wxWindows over GTK
> > PLATFORM_WX_CPPFLAGS= $(shell wx-config --cxxflags) $
> > (PLATFORM_GTK_CPPFLAGS)
> > PLATFORM_WX_LIBS    = $(shell wx-config --libs)     $
> > (PLATFORM_GTK_LIBS)
> > PLATFORM_WX_LDFLAGS = $(shell wx-config --ldflags)  $
> > (PLATFORM_GTK_LDFLAGS)
>
> > PLATFORM_BOOST_CPPFLAGS ?=
> > PLATFORM_BOOST_LDLAGS ?=
> > PLATFORM_BOOST_UTF_LIBS ?= -lboost_unit_test_framework
>
> > PLATFORM_TCL_CPPFLAGS=
> > PLATFORM_TCL_LIBS=-ltcl
> > PLATFORM_TCL_LDFLAGS=
>
> > PLATFORM_TK_CPPFLAGS=-I$(shell . /usr/lib/tkConfig.sh && echo -n $
> > $TK_INC_DIR $$TK_DEFS)
> > PLATFORM_TK_LIBS=$(shell . /usr/lib/tkConfig.sh && echo -n $
> > $TK_LIB_FLAG)
> > PLATFORM_TK_LDFLAGS=
>
> > PLATFORM_AIO_SUPPORT := \
> >        $(shell test "`ls -L /usr/lib/librt.so* /lib/librt.so*`" &&
> > echo -DACE_HAS_AIO_CALLS)
>
> > ssl ?= 0
> > ifeq ($(ssl),1)
> >   # Some Linux OpenSSL installations compile in Kerberos support.  Add
> >   # the Kerberos include path to preprocessor include path.
> >   #
> >   # We should probably also add the Kerberos libraries to
> >   # PLATFORM_SSL_LIBS but we can't be sure if they are needed without
> >   # a more sophisticated check.  This will only be a problem when
> >   # statically linking the OpenSSL library.  The majority of
> >   # installations use shared OpenSSL libraries so we should be okay,
> >   # at least until we migrate to Autoconf.
> >   PLATFORM_SSL_CPPFLAGS += -I/usr/kerberos/include
> > endif # ssl
>
> > #insure ?= 0
> > #ifeq ($(insure),1)
> > #  CC  = insure
> > #  CXX = insure
> > #else
> > #  CC  ?= gcc
> > #  CXX ?= g++
> > #endif
>
> > # fix this
> > pipes ?= 1
>
> > CFLAGS  += -W -Wall -Wpointer-arith
> > ifeq ($(threads),1)
> >     CPPFLAGS  += -D_REENTRANT $(PLATFORM_AIO_SUPPORT)
> > endif # threads
>
> > ifeq ($(buildbits),32)
> >   CFLAGS   += -m32
> >   LDFLAGS  += -m32
> > endif
> > ifeq ($(buildbits),64)
> >   CFLAGS   += -m64
> > endif
>
> > #
> > # Rely on _GNU_SOURCE to set these defaults defined in /usr/include/
> > features.h
> > # instead of setting them directly here (older versions of gcc don't
> > set it
> > # for you): _SVID_SOURCE _BSD_SOURCE _POSIX_SOURCE
> > _POSIX_C_SOURCE=199506L, etc...
> > CPPFLAGS += -D_GNU_SOURCE
>
> > DCFLAGS += -g
> > DLD     = $(CXX)
> > LD      = $(CXX)
> > LIBS    += -ldl
>
> > ifeq ($(threads),1)
> >   LIBS += -lpthread
> >   # look for the rt library in the usual places
> >   LIBS += $(shell test "`ls -L /usr/lib/librt.so* /lib/librt.so*`" &&
> > echo -lrt)
> > endif
>
> > ifeq ($(optimize),1)
> >   SOFLAGS += -Wl,-O3
> > endif
>
> > PLATFORM_QT_CPPFLAGS ?= -I$(QTDIR)/include
> > PLATFORM_QT_LIBS ?= -lqt-mt
> > PLATFORM_QT_LDFLAGS ?= -L$(QTDIR)/lib
>
> > PIC     = -fPIC
> > AR      = ar
> > ARFLAGS = rsuv
> > RANLIB  = @true
> > SOFLAGS += $(CPPFLAGS) -shared
> > SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<; \
> >           $(SOLINK.cc) -o $@ $(LDFLAGS) $(VSHDIR)$*.o
> > PRELIB  = @true
>
> > # Test for template instantiation, add to SOFLAGS if SONAME set,
> > # add -E to LDFLAGS if using GNU ld
> > #
> > include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
>
> > # TAO with GCC 4.0.2 and -O3 seems to result in runtime issues, for
> > example
> > # the ForwardRequest PI test will fail. For GCC 4.0.2 we default to -
> > O2
> > ifeq ($(CXX_VERSION),4.0.2)
> >   OCFLAGS ?= -O2
> > else
> >   OCFLAGS ?= -O3
> > endif
>
> > CCFLAGS += $(CFLAGS) $(TEMPLATES_FLAG)
>
> > # Added line below to support "Executable Shared Object" files (as
> > # needed by the service configurator).
> > # Marius Kjeldahl <mari... at sn.no, mar... at funcom.com>
> > ifeq ($(threads),1)
> >     ESOBUILD = $(COMPILEESO.cc) $(PIC) -shared -o $(VSHDIR)$*.so $<
> >     ifndef PRELIB
> >        PRELIB = @true
> >     endif # ! PRELIB
> > endif
>
> > sctp ?=
> > # support for OpenSS7 SCTP
> > ifeq ($(sctp),openss7)
> >   PLATFORM_SCTP_CPPFLAGS+= -DACE_HAS_OPENSS7_SCTP
> >   PLATFORM_SCTP_LDFLAGS?=
> >   PLATFORM_SCTP_LIBS?=
> > endif
>
> > # support for LKSCTP (Linux Kernel 2.5)
> > ifeq ($(sctp),lksctp)
> >   PLATFORM_SCTP_CPPFLAGS+= -DACE_HAS_LKSCTP
> >   PLATFORM_SCTP_LDFLAGS?= -L/usr/local/lib
> >   PLATFORM_SCTP_LIBS?= -lsctp
> > endif
>
> > #### GNU gas has a string limit of 4096 characters.  On Alphas,
> > #### builds will fail due to running over that limit.  There are
> > #### at least two workarounds:
> > #### 1) Change the limit to 8192 characters and rebuild gas.  See
> > ####    ACE-INSTALL.html for more information.
> > #### 2) Don't use -g when compiling those files.
> > #### If you're building on an Alpha and you haven't hacked and
> > #### rebuilt gas, you might need to uncomment the following.
> > #### ifeq ($(debug),1)
> > ####   SUPPRESS_DASH_G = 1
> > #### endif # debug
>
> >     CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/
> > default.features
> >     (used by MPC when you generate your own makefiles):
>
> >     AREA/CLASS/EXAMPLE AFFECTED:
>
> >     TAO/tests/Param_Test
>
> >     DOES THE PROBLEM AFFECT:
> >          EXECUTION : run_test.pl -t ulonglong
>
> >     SYNOPSIS:
>
> > While running the test , I use ethereal to look at the request and
> > notice that
> > the ulonglong value passed as a parameter is 00 00 00 00 67 00 00 00
> > instead of 67 00 00 ...
>
> > The returned values from the server have the same problem
>
> >     DESCRIPTION:
>
> > I'm Probably doing something wrong in config.h to set explicitly tell
> > that 64 bits are supported for this processor. Any idea of waht I
> > should put
> > in there ?
>
> >     REPEAT BY:
> > Use the config files above , recompile and run Param_Test/run_test.pl -
> > t ulonglong
>
> >     SAMPLE FIX/WORKAROUND:




More information about the Ace-users mailing list