Mercurial > hg > CbC > CbC_gcc
diff gcc/ada/libgnat/s-dwalin.ads @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/ada/libgnat/s-dwalin.ads Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,191 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . D W A R F _ L I N E S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2009-2017, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides routines to read DWARF line number information from +-- a generic object file with as little overhead as possible. This allows +-- conversions from PC addresses to human readable source locations. +-- +-- Objects must be built with debugging information, however only the +-- .debug_line section of the object file is referenced. In cases where object +-- size is a consideration it's possible to strip all other .debug sections, +-- which will decrease the size of the object significantly. + +pragma Polling (Off); +-- We must turn polling off for this unit, because otherwise we can get +-- elaboration circularities when polling is turned on + +with Ada.Exceptions.Traceback; + +with System.Object_Reader; +with System.Storage_Elements; +with System.Bounded_Strings; + +package System.Dwarf_Lines is + + package AET renames Ada.Exceptions.Traceback; + package SOR renames System.Object_Reader; + + type Dwarf_Context (In_Exception : Boolean := False) is private; + -- Type encapsulation the state of the Dwarf reader. When In_Exception + -- is True we are parsing as part of a exception handler decorator, we do + -- not want an exception to be raised, the parsing is done safely skipping + -- DWARF file that cannot be read or with stripped debug section for + -- example. + + procedure Open + (File_Name : String; + C : out Dwarf_Context; + Success : out Boolean); + procedure Close (C : in out Dwarf_Context); + -- Open and close files + + procedure Set_Load_Address (C : in out Dwarf_Context; Addr : Address); + -- Set the load address of a file. This is used to rebase PIE (Position + -- Independant Executable) binaries. + + function Is_Inside (C : Dwarf_Context; Addr : Address) return Boolean; + pragma Inline (Is_Inside); + -- Return true iff Addr is within the module + + function Low (C : Dwarf_Context) return Address; + pragma Inline (Low); + -- Return the lowest address of C + + procedure Dump (C : in out Dwarf_Context); + -- Dump each row found in the object's .debug_lines section to standard out + + procedure Dump_Cache (C : Dwarf_Context); + -- Dump the cache (if present) + + procedure Enable_Cache (C : in out Dwarf_Context); + -- Read symbols information to speed up Symbolic_Traceback. + + procedure Symbolic_Traceback + (Cin : Dwarf_Context; + Traceback : AET.Tracebacks_Array; + Suppress_Hex : Boolean; + Symbol_Found : in out Boolean; + Res : in out System.Bounded_Strings.Bounded_String); + -- Generate a string for a traceback suitable for displaying to the user. + -- If one or more symbols are found, Symbol_Found is set to True. This + -- allows the caller to fall back to hexadecimal addresses. + + Dwarf_Error : exception; + -- Raised if a problem is encountered parsing DWARF information. Can be a + -- result of a logic error or malformed DWARF information. + +private + -- The following section numbers reference + + -- "DWARF Debugging Information Format, Version 3" + + -- published by the Standards Group, http://freestandards.org. + + -- 6.2.2 State Machine Registers + + type Line_Info_Registers is record + Address : SOR.uint64; + File : SOR.uint32; + Line : SOR.uint32; + Column : SOR.uint32; + Is_Stmt : Boolean; + Basic_Block : Boolean; + End_Sequence : Boolean; + Prologue_End : Boolean; + Epilogue_Begin : Boolean; + ISA : SOR.uint32; + Is_Row : Boolean; + end record; + + -- 6.2.4 The Line Number Program Prologue + + MAX_OPCODE_LENGTHS : constant := 256; + + type Opcodes_Lengths_Array is + array (SOR.uint32 range 1 .. MAX_OPCODE_LENGTHS) of SOR.uint8; + + type Line_Info_Prologue is record + Unit_Length : SOR.uint32; + Version : SOR.uint16; + Prologue_Length : SOR.uint32; + Min_Isn_Length : SOR.uint8; + Default_Is_Stmt : SOR.uint8; + Line_Base : SOR.int8; + Line_Range : SOR.uint8; + Opcode_Base : SOR.uint8; + Opcode_Lengths : Opcodes_Lengths_Array; + Includes_Offset : SOR.Offset; + File_Names_Offset : SOR.Offset; + end record; + + type Search_Entry is record + First : SOR.uint32; + Size : SOR.uint32; + -- Function bounds as offset to the base address. + + Sym : SOR.uint32; + -- Symbol offset to get the name. + + Line : SOR.uint32; + -- Dwarf line offset. + end record; + + type Search_Array is array (Natural range <>) of Search_Entry; + + type Search_Array_Access is access Search_Array; + + type Dwarf_Context (In_Exception : Boolean := False) is record + Load_Slide : System.Storage_Elements.Integer_Address := 0; + Low, High : Address; + -- Bounds of the module + + Obj : SOR.Object_File_Access; + -- The object file containing dwarf sections + + Has_Debug : Boolean; + -- True if all debug sections are available + + Cache : Search_Array_Access; + -- Quick access to symbol and debug info (when present). + + Lines : SOR.Mapped_Stream; + Aranges : SOR.Mapped_Stream; + Info : SOR.Mapped_Stream; + Abbrev : SOR.Mapped_Stream; + -- Dwarf line, aranges, info and abbrev sections + + Prologue : Line_Info_Prologue; + Registers : Line_Info_Registers; + Next_Prologue : SOR.Offset; + -- State for lines + end record; + +end System.Dwarf_Lines;