فهرست منبع

Fix powerpc cycle for AIX target

git-svn-id: trunk@35275 -
pierre 8 سال پیش
والد
کامیت
1342d0792f
3فایلهای تغییر یافته به همراه63 افزوده شده و 3 حذف شده
  1. 24 0
      compiler/Makefile
  2. 28 0
      compiler/Makefile.fpc
  3. 11 3
      compiler/ppcgen/agppcgas.pas

+ 24 - 0
compiler/Makefile

@@ -3995,7 +3995,11 @@ endif
 ifndef EXENAME
 EXENAME=ppc$(CPUSUF)$(EXEEXT)
 endif
+ifndef MULTIEXENAME
+MULTIEXENAME=multippc$(CPUSUF)$(EXEEXT)
+endif
 PPEXENAME=pp$(EXEEXT)
+PPMULTIEXENAME=multipp$(EXEEXT)
 TEMPNAME=ppc$(SRCEXEEXT)
 ifneq ($(CPUSUF),jvm)
 PPCROSSNAME=ppcross$(CPUSUF)$(SRCEXEEXT)
@@ -4029,6 +4033,7 @@ alltargets: $(ALLTARGETS)
 .PHONY: all compiler echotime ppuclean execlean clean distclean
 all: compiler $(addsuffix _all,$(TARGET_DIRS))
 compiler: $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR) $(EXENAME)
+multi-compiler: $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR) $(EXENAME)
 ifeq ($(MAKELEVEL),0)
 ifndef STARTTIME
 ifdef DATE
@@ -4143,6 +4148,25 @@ endif
 	$(COMPILER) pp.pas
 	$(EXECPPAS)
 	$(MOVE) $(COMPILER_TARGETDIR)/$(PPEXENAME) $(EXENAME)
+$(MULTIEXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg \
+	     $(wildcard systems/*.pas) $(wilcard systems/*.inc) \
+	     $(wildcard $(CPC_TARGET)/*.pas) $(wildcard $(CPC_TARGET)/*.inc) \
+	     $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR)
+ifneq ($(REVSTR),)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) "'$(REVSTR)'" > revision.inc
+else
+	$(ECHOREDIR) '$(REVSTR)' > revision.inc
+endif
+else
+	$(ECHOREDIR) "'$(REVSTR)'" > revision.inc
+endif
+	$(COMPILER) version.pas
+endif
+	$(COMPILER) multipp.pas
+	$(EXECPPAS)
+	$(MOVE) $(COMPILER_TARGETDIR)/$(PPMULTIEXENAME) $(MULTIEXENAME)
 .PHONY: cycle fullcycle wpocycle
 ifeq ($(CPU_SOURCE),$(PPC_TARGET))
 ifeq ($(OS_SOURCE),$(OS_TARGET))

+ 28 - 0
compiler/Makefile.fpc

@@ -387,7 +387,11 @@ endif
 ifndef EXENAME
 EXENAME=ppc$(CPUSUF)$(EXEEXT)
 endif
+ifndef MULTIEXENAME
+MULTIEXENAME=multippc$(CPUSUF)$(EXEEXT)
+endif
 PPEXENAME=pp$(EXEEXT)
+PPMULTIEXENAME=multipp$(EXEEXT)
 TEMPNAME=ppc$(SRCEXEEXT)
 ifneq ($(CPUSUF),jvm)
 PPCROSSNAME=ppcross$(CPUSUF)$(SRCEXEEXT)
@@ -441,6 +445,8 @@ all: compiler $(addsuffix _all,$(TARGET_DIRS))
 
 compiler: $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR) $(EXENAME)
 
+multi-compiler: $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR) $(EXENAME)
+
 ifeq ($(MAKELEVEL),0)
 ifndef STARTTIME
 ifdef DATE
@@ -594,6 +600,28 @@ endif
         $(EXECPPAS)
         $(MOVE) $(COMPILER_TARGETDIR)/$(PPEXENAME) $(EXENAME)
 
+# Make only the compiler
+# ECHOREDIR sometimes does not remove double quotes
+$(MULTIEXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg \
+             $(wildcard systems/*.pas) $(wilcard systems/*.inc) \
+             $(wildcard $(CPC_TARGET)/*.pas) $(wildcard $(CPC_TARGET)/*.inc) \
+             $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR)
+ifneq ($(REVSTR),)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+        $(ECHOREDIR) "'$(REVSTR)'" > revision.inc
+else
+        $(ECHOREDIR) '$(REVSTR)' > revision.inc
+endif
+else
+        $(ECHOREDIR) "'$(REVSTR)'" > revision.inc
+endif
+        $(COMPILER) version.pas
+endif
+        $(COMPILER) multipp.pas
+        $(EXECPPAS)
+        $(MOVE) $(COMPILER_TARGETDIR)/$(PPMULTIEXENAME) $(MULTIEXENAME)
+
 
 #####################################################################
 # Cycle targets

+ 11 - 3
compiler/ppcgen/agppcgas.pas

@@ -481,8 +481,16 @@ unit agppcgas;
         { map cr registers to plain numbers }
         for i:=0 to 7 do
           writer.AsmWriteln(#9'.set'#9'cr'+tostr(i)+','+tostr(i));
-        { make sure we always have a code and toc section, the linker expects
-          that }
+        { Ensure .data and .rodata sections are aligned to 8-byte boundary,
+          required for correct RTTI alignment.
+          AIX assembler seems to only care for the first
+          alignment value given }
+        writer.AsmWriteln(#9'.csect .data[RW],3');
+        { .rodata is translated into .text[RO]
+          see sectionname in aggas unit. }
+        writer.AsmWriteln(#9'.csect .text[RO],3');
+        { make sure we always have a code and toc section,
+          the linker expects that }
         writer.AsmWriteln(#9'.csect .text[PR]');
         { set _text_s, to be used by footer below } 
         writer.AsmWriteln(#9'_text_s:');
@@ -494,7 +502,7 @@ unit agppcgas;
       begin
         inherited WriteExtraFooter;
         { link between data and text section }
-        writer.AsmWriteln(#9'.csect .data[RW],4');
+        writer.AsmWriteln(#9'.csect .data[RW],3');
 {$ifdef cpu64bitaddr}
         writer.AsmWriteln('text_pos:'#9'.llong _text_s')
 {$else cpu64bitaddr}