summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-27 13:05:18 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-27 13:05:18 +0000
commitc708bb59ae8df10207338aa25183aafd2e5c125a (patch)
treeb816c9b29ae8b833e46583d85835a7d0377ab429
parentb7ca89c5606272ae17507789d8ea30790fa72b38 (diff)
downloadgcc-c708bb59ae8df10207338aa25183aafd2e5c125a.tar.gz
2004-10-26 Matthew Gingell <gingell@gnat.com>
* i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89655 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/i-cpp.adb7
-rw-r--r--gcc/ada/i-cpp.ads25
2 files changed, 15 insertions, 17 deletions
diff --git a/gcc/ada/i-cpp.adb b/gcc/ada/i-cpp.adb
index b54d6d98e9c..387dcb5583c 100644
--- a/gcc/ada/i-cpp.adb
+++ b/gcc/ada/i-cpp.adb
@@ -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;
--------------------------------------------------------
diff --git a/gcc/ada/i-cpp.ads b/gcc/ada/i-cpp.ads
index 6372fb5db3b..9a5998837a2 100644
--- a/gcc/ada/i-cpp.ads
+++ b/gcc/ada/i-cpp.ads
@@ -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