summaryrefslogtreecommitdiff
path: root/packages/omniorb/files/arm_double.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/omniorb/files/arm_double.patch')
-rw-r--r--packages/omniorb/files/arm_double.patch266
1 files changed, 266 insertions, 0 deletions
diff --git a/packages/omniorb/files/arm_double.patch b/packages/omniorb/files/arm_double.patch
new file mode 100644
index 0000000000..cfcfd41630
--- /dev/null
+++ b/packages/omniorb/files/arm_double.patch
@@ -0,0 +1,266 @@
+--- include/omniORB4/CORBA_sysdep.h 30 Dec 2005 17:40:22 -0000 1.2.2.32
++++ include/omniORB4/CORBA_sysdep.h 12 Apr 2006 16:55:41 -0000
+@@ -125,6 +125,15 @@
+ #endif
+
+ //
++// Processor dependencies
++//
++
++#if defined(__arm__)
++# define OMNI_MIXED_ENDIAN_DOUBLE
++#endif
++
++
++//
+ // Macro to provide const_cast functionality on all platforms.
+ //
+ #ifdef HAS_Cplusplus_const_cast
+--- include/omniORB4/cdrStream.h 22 Jul 2005 16:57:17 -0000 1.1.2.23
++++ include/omniORB4/cdrStream.h 12 Apr 2006 16:55:41 -0000
+@@ -428,6 +428,13 @@
+ m.l[1] = Swap32(l.l[0]);
+ l = m;
+ }
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++ {
++ _CORBA_ULong v = l.l[0];
++ l.l[0] = l.l[1];
++ l.l[1] = v;
++ }
++#endif
+ CdrMarshal(s,LongArray2,omni::ALIGN_8,l);
+ }
+
+@@ -440,6 +447,13 @@
+ m.l[1] = Swap32(l.l[0]);
+ l = m;
+ }
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++ {
++ _CORBA_ULong v = l.l[0];
++ l.l[0] = l.l[1];
++ l.l[1] = v;
++ }
++#endif
+ convertToFloat(_CORBA_Double, LongArray2);
+ }
+ #else
+@@ -791,6 +805,19 @@
+ p[i] = l;
+ }
+ }
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++ {
++ struct LongArray2 {
++ _CORBA_ULong l[2];
++ };
++ LongArray2* p=(LongArray2*)a;
++ for( int i = 0; i < length; i++ ) {
++ _CORBA_ULong v = p[i].l[0];
++ p[i].l[0] = p[i].l[1];
++ p[i].l[1] = v;
++ }
++ }
++#endif
+ }
+ #endif
+
+@@ -957,6 +984,13 @@
+ m.l[1] = Swap32(l.l[0]);
+ l = m;
+ }
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++ {
++ _CORBA_ULong v = l.l[0];
++ l.l[0] = l.l[1];
++ l.l[1] = v;
++ }
++#endif
+ CdrMarshal(s,LongArray2,omni::ALIGN_8,l);
+ }
+
+@@ -969,6 +1003,13 @@
+ m.l[1] = Swap32(l.l[0]);
+ l = m;
+ }
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++ {
++ _CORBA_ULong v = l.l[0];
++ l.l[0] = l.l[1];
++ l.l[1] = v;
++ }
++#endif
+ convertToFloat(_CORBA_Double, LongArray2);
+ }
+
+--- include/omniORB4/seqTemplatedecls.h 11 Oct 2005 13:17:01 -0000 1.1.2.10
++++ include/omniORB4/seqTemplatedecls.h 12 Apr 2006 16:55:42 -0000
+@@ -544,43 +544,6 @@
+ };
+
+
+-
+-//////////////////////////////////////////////////////////////////////
+-///////////// _CORBA_Sequence_w_FixSizeElement /////////////
+-//////////////////////////////////////////////////////////////////////
+-template <class T,int elmSize,int elmAlignment>
+-class _CORBA_Sequence_w_FixSizeElement : public _CORBA_Sequence<T> {
+-protected:
+- typedef _CORBA_Sequence_w_FixSizeElement<T,elmSize,elmAlignment> T_seq;
+- typedef _CORBA_Sequence<T> Base_T_seq ;
+-
+-
+- inline _CORBA_Sequence_w_FixSizeElement() {}
+-
+- inline _CORBA_Sequence_w_FixSizeElement(_CORBA_ULong max,
+- _CORBA_Boolean bounded=0) :
+- Base_T_seq(max,bounded) {}
+-
+- inline _CORBA_Sequence_w_FixSizeElement(const T_seq& s) : Base_T_seq(s) {}
+-
+- inline _CORBA_Sequence_w_FixSizeElement(_CORBA_ULong max,
+- _CORBA_ULong len,
+- T *value,
+- _CORBA_Boolean release_ = 0,
+- _CORBA_Boolean bounded = 0
+- ) : Base_T_seq(max,len,value,release_,bounded) {}
+-
+- inline T_seq &operator= (const T_seq &s) {
+- Base_T_seq::operator= (s);
+- return *this;
+- }
+-
+-public:
+- inline void operator>>= (cdrStream &s) const;
+- inline void operator<<= (cdrStream &s);
+-};
+-
+-
+ //////////////////////////////////////////////////////////////////////
+ ///////////// _CORBA_Unbounded_Sequence_w_FixSizeElement /////////////
+ //////////////////////////////////////////////////////////////////////
+@@ -663,6 +626,46 @@
+ };
+
+
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++
++template <int max>
++class _CORBA_Bounded_Sequence_w_FixSizeElement<_CORBA_Double,max,8,8> :
++ public _CORBA_Bounded_Sequence<_CORBA_Double,max> {
++public:
++ typedef _CORBA_Bounded_Sequence_w_FixSizeElement<_CORBA_Double,max,8,8> T_seq;
++ typedef _CORBA_Bounded_Sequence<_CORBA_Double,max> Base_T_seq;
++
++
++ inline _CORBA_Bounded_Sequence_w_FixSizeElement() {}
++ inline _CORBA_Bounded_Sequence_w_FixSizeElement(_CORBA_ULong len,
++ _CORBA_Double *value,
++ _CORBA_Boolean rel = 0) :
++ Base_T_seq(len,value,rel) {}
++
++ inline _CORBA_Bounded_Sequence_w_FixSizeElement(const T_seq& s) :
++ Base_T_seq(s) {}
++
++ inline ~_CORBA_Bounded_Sequence_w_FixSizeElement() {}
++
++ inline T_seq& operator=(const T_seq& s) {
++ Base_T_seq::operator= (s);
++ return *this;
++ }
++
++ // CORBA 2.3 additions
++
++ inline void replace(_CORBA_ULong len, _CORBA_Double* data,_CORBA_Boolean release_ = 0) {
++ Base_T_seq::replace(len,data,release_);
++ }
++
++ inline void operator>>= (cdrStream &s) const;
++ inline void operator<<= (cdrStream &s);
++};
++
++#endif
++
++
++
+ //////////////////////////////////////////////////////////////////////
+ ////////////////// _CORBA_Sequence_Char /////////////////////////////
+ //////////////////////////////////////////////////////////////////////
+--- include/omniORB4/seqTemplatedefns.h 22 May 2003 13:41:39 -0000 1.1.2.11
++++ include/omniORB4/seqTemplatedefns.h 12 Apr 2006 16:55:42 -0000
+@@ -266,6 +266,48 @@
+ }
+
+ //////////////////////////////////////////////////////////////////////
++#ifdef OMNI_MIXED_ENDIAN_DOUBLE
++
++// Template member function specializations to use the base
++// marshalling functions for double, so the doubles are properly
++// word-swapped.
++
++template<>
++inline
++void
++_CORBA_Unbounded_Sequence_w_FixSizeElement<_CORBA_Double,8,8>::operator>>= (cdrStream& s) const
++{
++ Base_T_seq::operator>>=(s);
++}
++
++template<>
++inline
++void
++_CORBA_Unbounded_Sequence_w_FixSizeElement<_CORBA_Double,8,8>::operator<<= (cdrStream& s)
++{
++ Base_T_seq::operator<<=(s);
++}
++
++template<int max>
++inline
++void
++_CORBA_Bounded_Sequence_w_FixSizeElement<_CORBA_Double,max,8,8>::operator>>= (cdrStream& s) const
++{
++ Base_T_seq::operator>>=(s);
++}
++
++template<int max>
++inline
++void
++_CORBA_Bounded_Sequence_w_FixSizeElement<_CORBA_Double,max,8,8>::operator<<= (cdrStream& s)
++{
++ Base_T_seq::operator<<=(s);
++}
++
++#endif
++
++
++//////////////////////////////////////////////////////////////////////
+ inline
+ void
+ _CORBA_Sequence_Char::operator>>= (cdrStream& s) const
+--- src/lib/omniORB/omniidl_be/cxx/skutil.py 27 Jul 2003 19:24:32 -0000 1.17.2.10
++++ src/lib/omniORB/omniidl_be/cxx/skutil.py 12 Apr 2006 16:55:42 -0000
+@@ -197,6 +197,11 @@
+ if array_marshal_helpers.has_key(d_type.type().kind()):
+ (alignment,elmsize) = array_marshal_helpers[d_type.type().kind()]
+ if alignment != "omni::ALIGN_1":
++ is_double = d_type.type().kind() == idltype.tk_double
++ if is_double:
++ to.out("""
++#ifndef OMNI_MIXED_ENDIAN_DOUBLE""")
++
+ to.out("""\
+ if (! @where@.marshal_byte_swap()) {
+ @where@.put_octet_array((CORBA::Octet*)(@slice_cast@@name@),@num@,@align@);
+@@ -207,6 +212,11 @@
+ slice_cast = slice_cast,
+ num = str(n_elements * elmsize),
+ align = alignment)
++
++ if is_double:
++ to.out("""\
++#endif""")
++
+ # Do not return here.
+ # let the code below to deal with the else block.
+ else: