@@ -414,9 +414,10 @@ package body System.Dwarf_Lines is
Success := True;
- -- Get memory bounds
+ -- Get memory bounds for executable code. Note that such code
+ -- might come from multiple sections.
- Get_Memory_Bounds (C.Obj.all, Lo, Hi);
+ Get_Xcode_Bounds (C.Obj.all, Lo, Hi);
C.Low := Storage_Offset (Lo);
C.High := Storage_Offset (Hi);
@@ -114,6 +114,7 @@ package body System.Object_Reader is
end record;
SHF_ALLOC : constant := 2;
+ SHF_EXECINSTR : constant := 4;
type Symtab_Entry32 is record
St_Name : uint32; -- Name (string table index)
@@ -552,7 +553,7 @@ package body System.Object_Reader is
Offset (SHdr.Sh_Offset),
uint64 (SHdr.Sh_Addr),
uint64 (SHdr.Sh_Size),
- (SHdr.Sh_Flags and SHF_ALLOC) /= 0);
+ (SHdr.Sh_Flags and SHF_EXECINSTR) /= 0);
end Get_Section;
------------------------
@@ -1679,11 +1680,11 @@ package body System.Object_Reader is
end if;
end Get_Section;
- -----------------------
- -- Get_Memory_Bounds --
- -----------------------
+ ----------------------
+ -- Get_Xcode_Bounds --
+ ----------------------
- procedure Get_Memory_Bounds
+ procedure Get_Xcode_Bounds
(Obj : in out Object_File;
Low, High : out uint64) is
Sec : Object_Section;
@@ -1692,9 +1693,11 @@ package body System.Object_Reader is
Low := uint64'Last;
High := uint64'First;
+ -- Now find the lowest and highest offsets
+ -- attached to executable code sections
for Idx in 1 .. Num_Sections (Obj) loop
Sec := Get_Section (Obj, Idx - 1);
- if Sec.Flag_Alloc then
+ if Sec.Flag_Xcode then
if Sec.Addr < Low then
Low := Sec.Addr;
end if;
@@ -1703,7 +1706,7 @@ package body System.Object_Reader is
end if;
end if;
end loop;
- end Get_Memory_Bounds;
+ end Get_Xcode_Bounds;
----------
-- Name --
@@ -277,7 +277,7 @@ package System.Object_Reader is
Sec : Object_Section) return Mapped_Stream;
-- Create a stream for section Sec
- procedure Get_Memory_Bounds
+ procedure Get_Xcode_Bounds
(Obj : in out Object_File;
Low, High : out uint64);
-- Return the low and high addresses of the code for the object file. Can
@@ -434,8 +434,8 @@ private
Size : uint64 := 0;
-- Length of the section in bytes
- Flag_Alloc : Boolean := False;
- -- True if the section is mapped in memory by the OS loader
+ Flag_Xcode : Boolean := False;
+ -- True if the section is advertised to contain executable code
end record;
Null_Section : constant Object_Section := (0, 0, 0, 0, False);