Browse Source

+ added property PrimaryGroup to TOmfObjSection; fill it with 'dgroup' if
section belongs to the group dgroup in the current memory model

git-svn-id: trunk@30476 -

nickysn 10 years ago
parent
commit
e87148c425
1 changed files with 23 additions and 3 deletions
  1. 23 3
      compiler/ogomf.pas

+ 23 - 3
compiler/ogomf.pas

@@ -62,6 +62,7 @@ interface
         FOmfAlignment: TOmfSegmentAlignment;
         FOmfAlignment: TOmfSegmentAlignment;
         FCombination: TOmfSegmentCombination;
         FCombination: TOmfSegmentCombination;
         FUse: TOmfSegmentUse;
         FUse: TOmfSegmentUse;
+        FPrimaryGroup: string;
       public
       public
         constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);override;
         constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);override;
         property ClassName: string read FClassName;
         property ClassName: string read FClassName;
@@ -69,6 +70,7 @@ interface
         property OmfAlignment: TOmfSegmentAlignment read FOmfAlignment;
         property OmfAlignment: TOmfSegmentAlignment read FOmfAlignment;
         property Combination: TOmfSegmentCombination read FCombination;
         property Combination: TOmfSegmentCombination read FCombination;
         property Use: TOmfSegmentUse read FUse;
         property Use: TOmfSegmentUse read FUse;
+        property PrimaryGroup: string read FPrimaryGroup;
       end;
       end;
 
 
       { TOmfObjData }
       { TOmfObjData }
@@ -152,33 +154,51 @@ implementation
 
 
     constructor TOmfObjSection.create(AList: TFPHashObjectList;
     constructor TOmfObjSection.create(AList: TFPHashObjectList;
           const Aname: string; Aalign: shortint; Aoptions: TObjSectionOptions);
           const Aname: string; Aalign: shortint; Aoptions: TObjSectionOptions);
+      var
+        dgroup: Boolean;
       begin
       begin
         inherited create(AList, Aname, Aalign, Aoptions);
         inherited create(AList, Aname, Aalign, Aoptions);
         FCombination:=scPublic;
         FCombination:=scPublic;
         FUse:=suUse16;
         FUse:=suUse16;
         FOmfAlignment:=saRelocatableByteAligned;
         FOmfAlignment:=saRelocatableByteAligned;
         if oso_executable in Aoptions then
         if oso_executable in Aoptions then
-          FClassName:='code'
+          begin
+            FClassName:='code';
+            dgroup:=(current_settings.x86memorymodel=mm_tiny);
+          end
         else if Aname='stack' then
         else if Aname='stack' then
           begin
           begin
             FClassName:='stack';
             FClassName:='stack';
             FCombination:=scStack;
             FCombination:=scStack;
             FOmfAlignment:=saRelocatableParaAligned;
             FOmfAlignment:=saRelocatableParaAligned;
+            dgroup:=current_settings.x86memorymodel in (x86_near_data_models-[mm_tiny]);
           end
           end
         else if Aname='heap' then
         else if Aname='heap' then
           begin
           begin
             FClassName:='heap';
             FClassName:='heap';
             FOmfAlignment:=saRelocatableParaAligned;
             FOmfAlignment:=saRelocatableParaAligned;
+            dgroup:=current_settings.x86memorymodel in x86_near_data_models;
           end
           end
         else if Aname='bss' then
         else if Aname='bss' then
-          FClassName:='bss'
+          begin
+            FClassName:='bss';
+            dgroup:=true;
+          end
         else if Aname='data' then
         else if Aname='data' then
           begin
           begin
             FClassName:='data';
             FClassName:='data';
             FOmfAlignment:=saRelocatableWordAligned;
             FOmfAlignment:=saRelocatableWordAligned;
+            dgroup:=true;
           end
           end
         else
         else
-          FClassName:='data';
+          begin
+            FClassName:='data';
+            dgroup:=true;
+          end;
+        if dgroup then
+          FPrimaryGroup:='dgroup'
+        else
+          FPrimaryGroup:='';
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************