]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI.
authorMatthew Gingell <gingell@gnat.com>
Wed, 27 Oct 2004 13:05:18 +0000 (15:05 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 27 Oct 2004 13:05:18 +0000 (15:05 +0200)
2004-10-26  Matthew Gingell  <gingell@gnat.com>

* i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI.

From-SVN: r89655

gcc/ada/i-cpp.adb
gcc/ada/i-cpp.ads

index b54d6d98e9cb93a0c2554df6ec39a59b6eb3b088..387dcb5583c4e109e927d1ae4d7d22edac70cec4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -32,7 +32,6 @@
 ------------------------------------------------------------------------------
 
 with Ada.Tags;                use Ada.Tags;
-with Interfaces.C;            use Interfaces.C;
 with System;                  use System;
 with System.Storage_Elements; use System.Storage_Elements;
 with Unchecked_Conversion;
@@ -60,10 +59,8 @@ package body Interfaces.CPP is
    type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
 
    type VTable is record
-      Unused1   : C.short;
-      Unused2   : C.short;
-      TSD       : Type_Specific_Data_Ptr;
       Prims_Ptr : Vtable_Entry_Array (Positive);
+      TSD       : Type_Specific_Data_Ptr;
    end record;
 
    --------------------------------------------------------
index 6372fb5db3bafa39069b1fad72c789bb24c76687..9a5998837a269b308bcfa0faf005ee7175405850 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -41,15 +41,16 @@ package Interfaces.CPP is
    package S   renames System;
    package SSE renames System.Storage_Elements;
 
-   --  This package corresponds to Ada.Tags but applied to tagged types
-   --  which are 'imported' from C++ and correspond to exactly to a C++
-   --  Class.  GNAT doesn't know about the structure od the C++ dispatch
-   --  table (Vtable) but always access it through the procedural interface
-   --  defined below, thus the implementation of this package (the body) can
-   --  be customized to another C++ compiler without any change in the
-   --  compiler code itself as long as this procedural interface is
-   --  respected. Note that Ada.Tags defines a very similar procedural
-   --  interface to the regular Ada Dispatch Table.
+   --  This package corresponds to Ada.Tags but applied to tagged
+   --  types which are 'imported' from C++ and correspond exactly to a
+   --  C++ Class. GNAT doesn't know about the structure of the C++
+   --  dispatch table (Vtable) but always accesses it through the
+   --  procedural interface defined below, thus the implementation of
+   --  this package (the body) can be customized to another C++
+   --  compiler without any change in the compiler code itself as long
+   --  as this procedural interface is respected. Note that Ada.Tags
+   --  defines a very similar procedural interface to the regular Ada
+   --  Dispatch Table.
 
    type Vtable_Ptr is private;
 
@@ -95,7 +96,7 @@ private
 
    CPP_DT_Prologue_Size : constant SSE.Storage_Count :=
                             SSE.Storage_Count
-                              (2 * (Standard'Address_Size / S.Storage_Unit));
+                              (1 * (Standard'Address_Size / S.Storage_Unit));
    --  Size of the first part of the dispatch table
 
    CPP_DT_Entry_Size : constant SSE.Storage_Count :=
@@ -110,7 +111,7 @@ private
 
    CPP_TSD_Entry_Size : constant SSE.Storage_Count :=
                           SSE.Storage_Count
-                            (Standard'Address_Size / S.Storage_Unit);
+                            (1 * (Standard'Address_Size / S.Storage_Unit));
    --  Size of each ancestor tag entry in the TSD
 
    procedure CPP_Inherit_DT