Browse Source

+ started implementing TMZExeOutput.writeDebugElf; nothing is written yet, only
the elf header fields are filled with the values, generated by wlink

git-svn-id: trunk@39115 -

nickysn 7 years ago
parent
commit
f505718e6c
1 changed files with 35 additions and 1 deletions
  1. 35 1
      compiler/ogomf.pas

+ 35 - 1
compiler/ogomf.pas

@@ -295,6 +295,7 @@ interface
         procedure FillHeaderData;
         procedure FillHeaderData;
         function writeExe:boolean;
         function writeExe:boolean;
         function writeCom:boolean;
         function writeCom:boolean;
+        function writeDebugElf:boolean;
         property ExeUnifiedLogicalSegments: TFPHashObjectList read FExeUnifiedLogicalSegments;
         property ExeUnifiedLogicalSegments: TFPHashObjectList read FExeUnifiedLogicalSegments;
         property ExeUnifiedLogicalGroups: TFPHashObjectList read FExeUnifiedLogicalGroups;
         property ExeUnifiedLogicalGroups: TFPHashObjectList read FExeUnifiedLogicalGroups;
         property Header: TMZExeHeader read FHeader;
         property Header: TMZExeHeader read FHeader;
@@ -320,7 +321,7 @@ implementation
        SysUtils,
        SysUtils,
        cutils,verbose,globals,
        cutils,verbose,globals,
        fmodule,aasmtai,aasmdata,
        fmodule,aasmtai,aasmdata,
-       ogmap,owomflib,
+       ogmap,owomflib,elfbase,
        version
        version
        ;
        ;
 
 
@@ -2516,6 +2517,39 @@ implementation
         Result:=True;
         Result:=True;
       end;
       end;
 
 
+    function TMZExeOutput.writeDebugElf: boolean;
+      var
+        ElfHeader: TElf32header;
+      begin
+        FillChar(ElfHeader,SizeOf(ElfHeader),0);
+        ElfHeader.e_ident[EI_MAG0]:=ELFMAG0; { = #127'ELF' }
+        ElfHeader.e_ident[EI_MAG1]:=ELFMAG1;
+        ElfHeader.e_ident[EI_MAG2]:=ELFMAG2;
+        ElfHeader.e_ident[EI_MAG3]:=ELFMAG3;
+        ElfHeader.e_ident[EI_CLASS]:=ELFCLASS32;
+        ElfHeader.e_ident[EI_DATA]:=ELFDATA2LSB;
+        ElfHeader.e_ident[EI_VERSION]:=1;
+        ElfHeader.e_ident[EI_OSABI]:=ELFOSABI_NONE;
+        ElfHeader.e_ident[EI_ABIVERSION]:=0;
+        ElfHeader.e_type:=ET_EXEC;
+        ElfHeader.e_machine:=EM_386;
+        ElfHeader.e_version:=1;
+        ElfHeader.e_entry:=0;
+        ElfHeader.e_phoff:=0;
+        ElfHeader.e_shoff:=SizeOf(ElfHeader);
+        ElfHeader.e_flags:=0;
+        ElfHeader.e_ehsize:=SizeOf(ElfHeader);
+        ElfHeader.e_phentsize:=SizeOf(TElf32proghdr);
+        ElfHeader.e_phnum:=0;
+        ElfHeader.e_shentsize:=SizeOf(TElf32sechdr);
+        ElfHeader.e_shnum:=6;
+        ElfHeader.e_shstrndx:=5;
+
+        {todo: implement}
+
+        Result:=True;
+      end;
+
     procedure TMZExeOutput.Load_Symbol(const aname: string);
     procedure TMZExeOutput.Load_Symbol(const aname: string);
       var
       var
         dgroup: TObjSectionGroup;
         dgroup: TObjSectionGroup;