]> git.buserror.net Git - polintos/scott/priv.git/commitdiff
Merge branch 'origin'
authorScott Wood <scott@buserror.net>
Wed, 4 Jul 2007 01:33:58 +0000 (20:33 -0500)
committerScott Wood <scott@buserror.net>
Wed, 4 Jul 2007 01:33:58 +0000 (20:33 -0500)
Conflicts:

lib/c++/orb.cc

doc/abi/x86
doc/orb/marshalling
doc/orb/newobject
include/c++/util/assert.h
include/c++/util/radix.h
lib/c++/orb.cc

index 805eb76a630f16fa019b67b3e493c509c7c9b799..7f3de369192025ad0570c4cac8880f7c94f05e0f 100644 (file)
@@ -40,9 +40,9 @@ Object registration:
        eax: pointer to exception, or NULL if none
        edx: length of exception segment, if any
 
-GUID hash retrieval:
+GUID SHA-1 hash retrieval:
        eax: object id
-       edx: 16-byte buffer
+       edx: 20-byte buffer
        
        Call the 32-bit address stored at 0x7fff000c.
        
index ab429bb8e853ee0e27a0e02154c8dbb6ff96f98b..e56e350a0d3eebc3c991906f4ad856a9112fc42c 100644 (file)
@@ -37,6 +37,26 @@ for 32-bit architectures and 32 for 64-bit architectures.
 Object references are encoded as pointer-sized offsets into the
 objlist array.
 
+Virtual structs are prefaced with a header, which consists of
+the following, in order:
+1. 128-bit GUID of the most derived vstruct type
+2. 160-bit SHA-1 of the vstruct type info
+3. 32-bit objlist-offset of an introspection object
+4. 32-bit length of vstruct, including header, and all referenced
+data chunks, which must be contiguously appended to the vstruct body
+5. 32-bit reserved field
+
+The requirement for all referenced data chunks to be contiguous with
+the vstruct means that scatter-gather and zero-copy cannot be done;
+however, it prevents the loss of derived-type data when only a base
+type is known at unmarshalling time (the derived-type data could
+later be accessed through introspection, or be passed to another
+process that does know the derived type).  For this reason, vstructs
+should generally not be used to pass large chunks of data.
+
+The introspection object reference may be NULL; in this case, the
+SHA-1 field is ignored.
+
 Op1: Get Interface List
 -----------------------
 
index 7b1c4c52ddbf45a1d0874fab79a1702eb88ad440..6140c6c6cbde126475aeb045ba5e021195ec2514 100644 (file)
@@ -1,5 +1,5 @@
 struct NewObject {
-       u32 guid_hash[4]; // Interface GUID checksum
+       u32 guid_hash[5]; // SHA-1 hash of Interface GUIDs
        u32 id; // Filled in by ORB
        u32 reserved[3]; // must be zero
 };
index fdff3b3d85b901b4b932917dc165e82f389ba703..43e80b9163ad6a70a77b71ae3f90cc53c74ae0f2 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef _UTIL_ASSERT_H
 #define _UTIL_ASSERT_H
 
+#ifndef _UTIL_ASSERT_LEVEL
+#define _UTIL_ASSERT_LEVEL 1
+#endif
+
 namespace Assert {
        enum {
                Always = 0,
index c3ab842c82748e710061a832fffaec2370d5a19c..be982a504d3b4a32df4fef4c33640349c26bf6ae 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <stddef.h>
 #include <stdint.h>
-
 #include <lowlevel/bitops.h>
 
 namespace Util {
index 31f5cf3cfba2a82d824c8ae55f32c8bf5e8ab7fc..a6158bf9ebcf0c23824e28e6adcf34f671b55e10 100644 (file)
@@ -7,7 +7,6 @@ namespace RunTime {
 
        // This function could be made to do a binary search if we can
        // manage to somehow sort the IFaceTables...
-
        uintptr_t downcast(::System::_i_Object *obj,
                           const unsigned long *new_guid)
        {
@@ -49,7 +48,6 @@ namespace RunTime {
                
                return ptr;
        };
-       
 
        namespace Priv {
                typedef void (*MethodEntry)(ParamInfoBlock *pib);
@@ -59,7 +57,7 @@ namespace RunTime {
                        void *ptr; // pointer to the class interface
                };
 
-               typedef Util::RadixTree<Object, ID, 6> ObjTable;
+               typedef ::Util::RadixTree<Object, ID, 6> ObjTable;
                ObjTable objtable;
 
                unsigned long get_pc()
@@ -69,9 +67,7 @@ namespace RunTime {
 
                void exception_to_array(::System::VStruct *ex, Array<uint8_t> *ar)
                {
-                       // FIXME
-//                     ar->ptr = reinterpret_cast<uint8_t *>(ex);
-//                     ar->count = ex->_infoptr->structlen;
+                       // FIXME: marshall struct
                }
                
                void handle_message(ParamInfoBlock *pib)
@@ -84,9 +80,7 @@ namespace RunTime {
                                                throw_idl(ShortMessage, 0, pib->segments[0].len,
                                                          sizeof(InvokeMethod));
        
-               //                      ID obj = pib->objlist[0];
-                                       
-                                       
+//                                     ID obj = pib->objlist[0];
                                        break;
                                }
                                
@@ -106,8 +100,8 @@ extern "C" void handle_message(::System::RunTime::ParamInfoBlock *pib,
                ::System::RunTime::Priv::handle_message(pib);
        }
        
-       catch (::System::Exceptions::Exception *ex) {
-               ::System::RunTime::Priv::exception_to_array(ex, ex_arr);
+       catch (::System::Exceptions::Exception &ex) {
+               ::System::RunTime::Priv::exception_to_array(&ex, ex_arr);
        }
        
        catch (...) {