diff options
Diffstat (limited to 'ortho/mcode')
-rw-r--r-- | ortho/mcode/binary_file-memory.adb | 10 | ||||
-rw-r--r-- | ortho/mcode/binary_file.adb | 26 | ||||
-rw-r--r-- | ortho/mcode/binary_file.ads | 8 |
3 files changed, 21 insertions, 23 deletions
diff --git a/ortho/mcode/binary_file-memory.adb b/ortho/mcode/binary_file-memory.adb index 6e25f67..4d5f740 100644 --- a/ortho/mcode/binary_file-memory.adb +++ b/ortho/mcode/binary_file-memory.adb @@ -22,12 +22,13 @@ package body Binary_File.Memory is -- Absolute section. Sect_Abs : Section_Acc; + function To_Pc_Type is new Ada.Unchecked_Conversion + (Source => System.Address, Target => Pc_Type); + procedure Set_Symbol_Address (Sym : Symbol; Addr : System.Address) is - function Conv is new Ada.Unchecked_Conversion - (Source => System.Address, Target => Pc_Type); begin - Set_Symbol_Value (Sym, Conv (Addr)); + Set_Symbol_Value (Sym, To_Pc_Type (Addr)); Set_Scope (Sym, Sym_Global); Set_Section (Sym, Sect_Abs); end Set_Symbol_Address; @@ -40,7 +41,6 @@ package body Binary_File.Memory is procedure Write_Memory_Relocate (Error : out Boolean) is - use SSE; Sect : Section_Acc; Rel : Reloc_Acc; N_Rel : Reloc_Acc; @@ -58,7 +58,7 @@ package body Binary_File.Memory is end if; end if; if Sect.Data_Max > 0 and Sect /= Sect_Abs then - Sect.Vaddr := To_Integer (Sect.Data (0)'Address); + Sect.Vaddr := To_Pc_Type (Sect.Data (0)'Address); end if; Sect := Sect.Next; end loop; diff --git a/ortho/mcode/binary_file.adb b/ortho/mcode/binary_file.adb index 1407424..3890b78 100644 --- a/ortho/mcode/binary_file.adb +++ b/ortho/mcode/binary_file.adb @@ -15,7 +15,7 @@ -- along with GCC; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. -with System; +with System.Storage_Elements; with Ada.Text_IO; use Ada.Text_IO; with Ada.Characters.Latin_1; with Ada.Unchecked_Conversion; @@ -805,10 +805,10 @@ package body Binary_File is Gen_32 (V); end Gen_Ppc_24; - function Get_Symbol_Vaddr (Sym : Symbol) return Unsigned_32 is + function Get_Symbol_Vaddr (Sym : Symbol) return Pc_Type is begin - return Unsigned_32 (Get_Section (Sym).Vaddr) - + Unsigned_32 (Get_Symbol_Value (Sym)); + return Pc_Type (Get_Section (Sym).Vaddr) + + Pc_Type (Get_Symbol_Value (Sym)); end Get_Symbol_Vaddr; procedure Write_Left_Be32 (Sect : Section_Acc; @@ -833,8 +833,7 @@ package body Binary_File is D : Unsigned_32; Mask : Unsigned_32; begin - D := Get_Symbol_Vaddr (Sym) - - (Unsigned_32 (Sect.Vaddr) + Unsigned_32 (Addr)); + D := Unsigned_32 (Get_Symbol_Vaddr (Sym) - (Sect.Vaddr + Addr)); -- Check overflow. Mask := Shift_Left (1, Size + 2) - 1; if (D and Shift_Left (1, Size + 1)) = 0 then @@ -860,23 +859,24 @@ package body Binary_File is case Kind is when Reloc_32 => - Add_Le32 (Sect, Addr, Get_Symbol_Vaddr (Sym)); + Add_Le32 (Sect, Addr, Unsigned_32 (Get_Symbol_Vaddr (Sym))); when Reloc_Pc32 => Add_Le32 (Sect, Addr, - Get_Symbol_Vaddr (Sym) - - (Unsigned_32 (Sect.Vaddr) + Unsigned_32 (Addr))); - + Unsigned_32 (Get_Symbol_Vaddr (Sym) + - (Sect.Vaddr + Addr))); when Reloc_Disp22 => Set_Wdisp (Sect, Addr, Sym, 22); when Reloc_Disp30 => Set_Wdisp (Sect, Addr, Sym, 30); when Reloc_Hi22 => - Write_Left_Be32 (Sect, Addr, 22, Get_Symbol_Vaddr (Sym) / 1024); + Write_Left_Be32 (Sect, Addr, 22, + Unsigned_32 (Get_Symbol_Vaddr (Sym) / 1024)); when Reloc_Lo10 => - Write_Left_Be32 (Sect, Addr, 10, Get_Symbol_Vaddr (Sym)); + Write_Left_Be32 (Sect, Addr, 10, + Unsigned_32 (Get_Symbol_Vaddr (Sym))); when Reloc_Ua_32 => - Write_Be32 (Sect, Addr, Get_Symbol_Vaddr (Sym)); + Write_Be32 (Sect, Addr, Unsigned_32 (Get_Symbol_Vaddr (Sym))); when Reloc_Ppc_Addr24 => raise Program_Error; end case; diff --git a/ortho/mcode/binary_file.ads b/ortho/mcode/binary_file.ads index db31cb6..f812926 100644 --- a/ortho/mcode/binary_file.ads +++ b/ortho/mcode/binary_file.ads @@ -15,11 +15,11 @@ -- along with GCC; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. +with System; with Interfaces; use Interfaces; with Ada.Unchecked_Deallocation; with Ortho_Ident; use Ortho_Ident; with GNAT.Table; -with System.Storage_Elements; with Memsegs; package Binary_File is @@ -73,7 +73,7 @@ package Binary_File is function Get_Symbol (Name : String) return Symbol; -- Get the virtual address of a symbol. - function Get_Symbol_Vaddr (Sym : Symbol) return Unsigned_32; + function Get_Symbol_Vaddr (Sym : Symbol) return Pc_Type; pragma Inline (Get_Symbol_Vaddr); -- Set the value of a symbol. @@ -150,8 +150,6 @@ package Binary_File is procedure Disp_Stats; procedure Finish; private - package SSE renames System.Storage_Elements; - type Byte_Array_Base is array (Pc_Type range <>) of Byte; subtype Byte_Array is Byte_Array_Base (Pc_Type); type Byte_Array_Acc is access Byte_Array; @@ -210,7 +208,7 @@ private -- Section number (set and used by binary writer). Number : Natural; -- Virtual address, if set. - Vaddr : SSE.Integer_Address; + Vaddr : Pc_Type; -- SSE.Integer_Address; -- Memory for this segment. Seg : Memsegs.Memseg_Type; end record; |