[haiku-commits] haiku: hrev53614 - src/system/boot/arch/ppc src/system/boot/platform/openfirmware/arch/ppc src/system/libroot/os/arch/ppc build/jam/repositories/HaikuPorts build/jam

  • From: Adrien Destugues <pulkomandy@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 4 Dec 2019 13:34:33 -0500 (EST)

hrev53614 adds 1 changeset to branch 'master'
old head: 4236826da6b0b6f3176bdb9c4f61aded6c7c0dba
new head: 09b40d1634f72ff933450f9c2f1d7c722b744cd9
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=09b40d1634f7+%5E4236826da6b0

----------------------------------------------------------------------------

09b40d1634f7: ppc: Minor tweaks to get the arch compile again (WIP)
  
  - Factor in types changes (introduction of intptr_t)
  - Align JamFiles syntax with in progress architectures (arm/sparc)
  - Xorriso doesn't support much of the mkisofs options (anymore ?)
  - (After a correct bootstrap) one should be able to build @minimum-raw and 
haiku-boot-cd again
  Change-Id: I4f779ad8f2210389fa9b7f7c0a98c3652a64c257
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/1983
  Reviewed-by: François Revol <revol@xxxxxxx>

                                            [ Ynoga <ynoga@xxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53614
Commit:      09b40d1634f72ff933450f9c2f1d7c722b744cd9
URL:         https://git.haiku-os.org/haiku/commit/?id=09b40d1634f7
Author:      Ynoga <ynoga@xxxxxxxxxxxxxx>
Date:        Tue Dec  3 08:43:16 2019 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxx>
Commit-Date: Wed Dec  4 18:34:31 2019 UTC

----------------------------------------------------------------------------

15 files changed, 95 insertions(+), 109 deletions(-)
build/jam/ImageRules                             |  7 +-
build/jam/images/CDBootImage                     |  2 +-
build/jam/repositories/HaikuPorts/ppc            | 67 ++------------------
build/jam/repositories/HaikuPortsCross/ppc       |  7 +-
headers/private/system/arch/ppc/asm_defs.h       |  6 +-
.../arch/ppc/openfirmware/pci_openfirmware.cpp   |  2 +-
.../compat/freebsd_network/compat/sys/param.h    |  2 +
src/system/boot/arch/ppc/Jamfile                 | 47 +++++++-------
src/system/boot/loader/Jamfile                   |  1 +
.../boot/platform/openfirmware/arch/ppc/Jamfile  |  2 +-
.../boot/platform/openfirmware/arch/ppc/cpu.cpp  |  8 +--
.../boot/platform/openfirmware/arch/ppc/mmu.cpp  |  8 +--
.../platform/openfirmware/arch/ppc/start.cpp     |  6 +-
src/system/kernel/arch/ppc/arch_platform.cpp     |  2 +-
src/system/libroot/os/arch/ppc/byteorder.S       | 37 ++++++++++-

----------------------------------------------------------------------------

diff --git a/build/jam/ImageRules b/build/jam/ImageRules
index bcaa5d7fdc..e182d87230 100644
--- a/build/jam/ImageRules
+++ b/build/jam/ImageRules
@@ -1618,9 +1618,10 @@ actions BuildCDBootPPCImage1 bind MAPS
        # Extras (readme files, etc)
        cp $(>[4]) $(HAIKU_OUTPUT_DIR)/cd/
 
-       xorriso -as mkisofs -v -hfs -part -map $(MAPS) -no-desktop -hfs-volid 
bootimg \
-               -V $(VOLID) -hfs-bless $(HAIKU_OUTPUT_DIR)/cd/boot -prep-boot \
-               boot/haikuloader.xcf -r -o $(<) $(HAIKU_OUTPUT_DIR)/cd
+       xorriso -as mkisofs -v -hfsplus \
+               -hfs-bless $(HAIKU_OUTPUT_DIR)/cd/boot \
+               -prep-boot-part $(HAIKU_OUTPUT_DIR)/cd/boot/haikuloader.xcf \
+               -r -J -o $(<) $(HAIKU_OUTPUT_DIR)/cd
        $(RM) -r $(HAIKU_OUTPUT_DIR)/cd
 }
 
diff --git a/build/jam/images/CDBootImage b/build/jam/images/CDBootImage
index 6832e7ab49..c956f324af 100644
--- a/build/jam/images/CDBootImage
+++ b/build/jam/images/CDBootImage
@@ -16,7 +16,7 @@ local extras = README.html ;
 
 if $(TARGET_ARCH) = ppc {
        local elfloader = boot_loader_openfirmware ;
-       local coffloader = boot_loader_openfirmware_coff ;
+       local coffloader = haiku_loader.openfirmware ;
 
        # OpenFirmware / Mac boot support files:
        # CHRP script
diff --git a/build/jam/repositories/HaikuPorts/ppc 
b/build/jam/repositories/HaikuPorts/ppc
index 720c8fa5dd..3411cfca78 100644
--- a/build/jam/repositories/HaikuPorts/ppc
+++ b/build/jam/repositories/HaikuPorts/ppc
@@ -3,16 +3,16 @@ RemotePackageRepository HaikuPorts
        : https://eu.hpkg.haiku-os.org/haikuports/master/build-packages
        :
        # architecture "any" packages
-       be_book-2008_10_26-2
-       ca_root_certificates-2018_01_17-2
-       gnu_efi_kernel-3.0.8-1
+       be_book-2008_10_26-3
+       ca_root_certificates-2019_01_23-1
+       gnu_efi_kernel-3.0.10-1
        timgmsoundfont-fixed-5
        noto-20170920-3
        wqy_microhei-0.2.0~beta-4
        :
        # repository architecture packages
        # primary architecture (ppc)
-       bash-4.4.012-1
+       bash-4.4.023-1
        coreutils-8.22-1
        curl-7.40.0-1
        curl_devel-7.40.0-1
@@ -23,8 +23,8 @@ RemotePackageRepository HaikuPorts
        mawk-1.3.4-1
        ncurses6-6.0-1
        ncurses6_devel-6.0-1
-       gcc_syslibs-5.4.0_2016_06_04-1
-       gcc_syslibs_devel-5.4.0_2016_06_04-1
+       gcc_syslibs_devel-8.3.0_2019_05_24-1
+       gcc_syslibs-8.3.0_2019_05_24-1
        icu-57.1-2
        icu_devel-57.1-2
        libsolv-0.3.0_haiku_2014_12_22-1
@@ -32,78 +32,25 @@ RemotePackageRepository HaikuPorts
        zlib-1.2.11-1
        zlib_devel-1.2.11-1
        :
-       # source packages
-       autoconf
-       automake
+       # source package
        bash
-#      bepdf
        binutils
        bison
-       bzip2
-       cdrtools
-       cmake
        coreutils
-       ctags
        curl
-       cvs
-       doxygen
        expat
-#      ffmpeg
        flex
        freetype
        gcc
-       gettext
-       git
-       glu
-       gperf
        grep
-       groff
-       haikuwebkit
-       htmldoc
        icu
-       jam
-       jpeg
-       keymapswitcher
-       libedit
-       libiconv
-#      libogg
-       libpcre
-       libpng
        libsolv
-#      libtheora
-       libtool
-#      libvorbis
-#      libvpx
-       libxml2
        m4
        make
-       man
-       mercurial
-       mesa
-       mkdepend
-       nano
        ncurses6
-       neon
-       openssh
-       openssl
-       p7zip
-       pe
-       perl
-       pkgconfig
        python
-       readline
-       scons
        sed
-#      speex
-       sqlite
-       subversion
-       tar
-       texi2html
        texinfo
-       vision
-       wpa_supplicant
-       yasm
-       xz_utils
        zlib
        :
        # debuginfo packages
diff --git a/build/jam/repositories/HaikuPortsCross/ppc 
b/build/jam/repositories/HaikuPortsCross/ppc
index 7fc8fd011a..f783632f86 100644
--- a/build/jam/repositories/HaikuPortsCross/ppc
+++ b/build/jam/repositories/HaikuPortsCross/ppc
@@ -3,6 +3,7 @@ BootstrapPackageRepository HaikuPortsCross
        :
        # architecture "any" packages
        haikuporter-0-1
+       noto-20170202-7
        :
        # repository architecture packages (stage 0)
        gcc_bootstrap-8.3.0_2019_05_24-1
@@ -10,9 +11,9 @@ BootstrapPackageRepository HaikuPortsCross
        gcc_bootstrap_syslibs_devel-8.3.0_2019_05_24-1
        :
        # repository architecture packages (stage 1)
-       bash_bootstrap-4.4.012-1
-       binutils_bootstrap-2.26.1_2016_02_29-1
-       bison_bootstrap-3.0.4-5
+       bash_bootstrap-4.4.023-1
+       binutils_bootstrap-2.28.1_2017_08_05-1
+       bison_bootstrap-3.0.5-1
        coreutils_bootstrap-8.22-1
        curl_bootstrap-7.40.0-1
        curl_bootstrap_devel-7.40.0-1
diff --git a/headers/private/system/arch/ppc/asm_defs.h 
b/headers/private/system/arch/ppc/asm_defs.h
index 798fa02793..299622c653 100644
--- a/headers/private/system/arch/ppc/asm_defs.h
+++ b/headers/private/system/arch/ppc/asm_defs.h
@@ -2,8 +2,8 @@
  * Copyright 2008, Ingo Weinhold, ingo_weinhold@xxxxxx.
  * Distributed under the terms of the MIT License.
  */
-#ifndef SYSTEM_ARCH_X86_ASM_DEFS_H
-#define SYSTEM_ARCH_X86_ASM_DEFS_H
+#ifndef SYSTEM_ARCH_PPC_ASM_DEFS_H
+#define SYSTEM_ARCH_PPC_ASM_DEFS_H
 
 
 #define SYMBOL(name)                   .global name; name
@@ -13,5 +13,5 @@
 #define FUNCTION_END(name)             1: .size name, 1b - name
 
 
-#endif /* SYSTEM_ARCH_X86_ASM_DEFS_H */
+#endif /* SYSTEM_ARCH_PPC_ASM_DEFS_H */
 
diff --git 
a/src/add-ons/kernel/bus_managers/pci/arch/ppc/openfirmware/pci_openfirmware.cpp
 
b/src/add-ons/kernel/bus_managers/pci/arch/ppc/openfirmware/pci_openfirmware.cpp
index aae1330532..f85a682a99 100644
--- 
a/src/add-ons/kernel/bus_managers/pci/arch/ppc/openfirmware/pci_openfirmware.cpp
+++ 
b/src/add-ons/kernel/bus_managers/pci/arch/ppc/openfirmware/pci_openfirmware.cpp
@@ -30,7 +30,7 @@ status_t
 ppc_openfirmware_pci_controller_init(void)
 {
        char path[256];
-       int cookie = 0;
+       intptr_t cookie = 0;
        while (of_get_next_device(&cookie, 0, "pci", path, sizeof(path))
                        == B_OK) {
 dprintf("ppc_openfirmware_pci_controller_init(): pci device node: %s\n", path);
diff --git a/src/libs/compat/freebsd_network/compat/sys/param.h 
b/src/libs/compat/freebsd_network/compat/sys/param.h
index bf7770beff..b9e05aa4d5 100644
--- a/src/libs/compat/freebsd_network/compat/sys/param.h
+++ b/src/libs/compat/freebsd_network/compat/sys/param.h
@@ -65,6 +65,8 @@
        || defined(__sparc__) || defined(__riscv64__) \
        || defined(__aarch64__) || defined(__arm64__)
 #define CACHE_LINE_SIZE 64
+#elif defined(__powerpc__)
+#define CACHE_LINE_SIZE 128
 #else
 #error Need definition of CACHE_LINE_SIZE for this arch!
 #endif
diff --git a/src/system/boot/arch/ppc/Jamfile b/src/system/boot/arch/ppc/Jamfile
index ea1c5a600a..b83c57a6e5 100644
--- a/src/system/boot/arch/ppc/Jamfile
+++ b/src/system/boot/arch/ppc/Jamfile
@@ -1,33 +1,30 @@
 SubDir HAIKU_TOP src system boot arch ppc ;
 
-{
-       local defines = _BOOT_MODE ;
-
-       defines = [ FDefines $(defines) ] ;
-       SubDirCcFlags $(defines) ;
-       SubDirC++Flags $(defines) -fno-rtti ;
-}
-
-
 local kernelLibArchObjects =
        <src!system!kernel!lib!arch!$(TARGET_ARCH)>byteorder.o
        <src!system!kernel!lib!arch!$(TARGET_ARCH)>memcpy.o
        <src!system!kernel!lib!arch!$(TARGET_ARCH)>memset.o
 ;
 
-BootMergeObject boot_arch_$(TARGET_KERNEL_ARCH).o :
-       debug_uart_8250.cpp
-       arch_uart_8250.cpp
-       arch_elf.cpp
-       : # additional flags
-       :
-       $(kernelArchObjects)
-       $(kernelLibArchObjects)
-;
-
-SEARCH on [ FGristFiles arch_elf.cpp arch_uart_8250.cpp ]
-    = [ FDirName $(HAIKU_TOP) src system kernel arch $(TARGET_KERNEL_ARCH) ] ;
-
-SEARCH on [ FGristFiles debug_uart_8250.cpp ]
-       = [ FDirName $(HAIKU_TOP) src system kernel arch generic ] ;
-
+local platform ;
+for platform in [ MultiBootSubDirSetup openfirmware ] {
+    on $(platform) {
+               DEFINES += _BOOT_MODE ;
+
+               BootMergeObject [ FGristFiles boot_arch_$(TARGET_KERNEL_ARCH).o 
] :
+                       debug_uart_8250.cpp
+                       #arch_uart_8250.cpp
+                       arch_elf.cpp
+                       : # additional flags
+                       :
+                       $(kernelArchObjects)
+                       $(kernelLibArchObjects)
+               ;
+
+               SEARCH on [ FGristFiles arch_elf.cpp arch_uart_8250.cpp ]
+                   = [ FDirName $(HAIKU_TOP) src system kernel arch 
$(TARGET_KERNEL_ARCH) ] ;
+
+               SEARCH on [ FGristFiles debug_uart_8250.cpp ]
+                       = [ FDirName $(HAIKU_TOP) src system kernel arch 
generic ] ;
+       }
+}
diff --git a/src/system/boot/loader/Jamfile b/src/system/boot/loader/Jamfile
index eab74569a0..7863619639 100644
--- a/src/system/boot/loader/Jamfile
+++ b/src/system/boot/loader/Jamfile
@@ -36,6 +36,7 @@ for platform in [ MultiBootSubDirSetup ] {
                                case "ppc" :
                                {
                                        DEFINES +=
+                                               BOOT_SUPPORT_ELF32 #How to deal 
with PPC970 ?
                                                BOOT_SUPPORT_PARTITION_AMIGA
                                                BOOT_SUPPORT_PARTITION_APPLE
 
diff --git a/src/system/boot/platform/openfirmware/arch/ppc/Jamfile 
b/src/system/boot/platform/openfirmware/arch/ppc/Jamfile
index 14a364fb08..d0df294dce 100644
--- a/src/system/boot/platform/openfirmware/arch/ppc/Jamfile
+++ b/src/system/boot/platform/openfirmware/arch/ppc/Jamfile
@@ -1,6 +1,6 @@
 SubDir HAIKU_TOP src system boot platform openfirmware arch ppc ;
 
-SubDirHdrs $(HAIKU_TOP) src system boot platform $(TARGET_BOOT_PLATFORM) ;
+SubDirHdrs $(HAIKU_TOP) src system boot platform openfirmware ;
 UsePrivateSystemHeaders ;
 UsePrivateHeaders kernel [ FDirName kernel arch $(TARGET_KERNEL_ARCH) ] 
        [ FDirName kernel boot platform $(HAIKU_KERNEL_PLATFORM) ]
diff --git a/src/system/boot/platform/openfirmware/arch/ppc/cpu.cpp 
b/src/system/boot/platform/openfirmware/arch/ppc/cpu.cpp
index a2a4b2a883..bd67134fa4 100644
--- a/src/system/boot/platform/openfirmware/arch/ppc/cpu.cpp
+++ b/src/system/boot/platform/openfirmware/arch/ppc/cpu.cpp
@@ -45,7 +45,7 @@ boot_arch_cpu_init(void)
        }
 
        char cpuPath[256];
-       int cookie = 0;
+       intptr_t cookie = 0;
        int cpuCount = 0;
        while (of_get_next_device(&cookie, cpus, "cpu", cpuPath,
                        sizeof(cpuPath)) == B_OK) {
@@ -88,9 +88,9 @@ boot_arch_cpu_init(void)
                        gKernelArgs.arch_args.bus_frequency = busFrequency;
                        gKernelArgs.arch_args.time_base_frequency = 
timeBaseFrequency;
 
-                       TRACE(("  CPU clock frequency: %ld\n", clockFrequency));
-                       TRACE(("  bus clock frequency: %ld\n", busFrequency));
-                       TRACE(("  time base frequency: %ld\n", 
timeBaseFrequency));
+                       TRACE(("  CPU clock frequency: %" B_PRId32 "\n", 
clockFrequency));
+                       TRACE(("  bus clock frequency: %" B_PRId32 "\n", 
busFrequency));
+                       TRACE(("  time base frequency: %" B_PRId32 "\n", 
timeBaseFrequency));
                }
 
                cpuCount++;
diff --git a/src/system/boot/platform/openfirmware/arch/ppc/mmu.cpp 
b/src/system/boot/platform/openfirmware/arch/ppc/mmu.cpp
index 4a0fe83f1a..8c82265b1c 100644
--- a/src/system/boot/platform/openfirmware/arch/ppc/mmu.cpp
+++ b/src/system/boot/platform/openfirmware/arch/ppc/mmu.cpp
@@ -574,7 +574,7 @@ map_callback(struct of_arguments *args)
        void *virtualAddress = (void *)args->Argument(1);
        int length = args->Argument(2);
        int mode = args->Argument(3);
-       int &error = args->ReturnValue(0);
+       intptr_t &error = args->ReturnValue(0);
 
        // insert range in physical allocated if needed
 
@@ -618,9 +618,9 @@ static int
 translate_callback(struct of_arguments *args)
 {
        addr_t virtualAddress = (addr_t)args->Argument(0);
-       int &error = args->ReturnValue(0);
-       int &physicalAddress = args->ReturnValue(1);
-       int &mode = args->ReturnValue(2);
+       intptr_t &error = args->ReturnValue(0);
+       intptr_t &physicalAddress = args->ReturnValue(1);
+       intptr_t &mode = args->ReturnValue(2);
 
        // Find page table entry for this address
 
diff --git a/src/system/boot/platform/openfirmware/arch/ppc/start.cpp 
b/src/system/boot/platform/openfirmware/arch/ppc/start.cpp
index 604e726c51..693a2f0aad 100644
--- a/src/system/boot/platform/openfirmware/arch/ppc/start.cpp
+++ b/src/system/boot/platform/openfirmware/arch/ppc/start.cpp
@@ -5,11 +5,13 @@
  * Distributed under the terms of the MIT License.
  */
 
-
 #include "start.h"
 
-#include "machine.h"
+#include <string.h>
+#include <OS.h>
+#include <platform/openfirmware/openfirmware.h>
 
+#include "machine.h"
 
 extern "C" void _start(uint32 _unused1, uint32 _unused2,
        void *openFirmwareEntry);
diff --git a/src/system/kernel/arch/ppc/arch_platform.cpp 
b/src/system/kernel/arch/ppc/arch_platform.cpp
index 1abf7b4fb1..f7b621ab59 100644
--- a/src/system/kernel/arch/ppc/arch_platform.cpp
+++ b/src/system/kernel/arch/ppc/arch_platform.cpp
@@ -114,7 +114,7 @@ status_t
 PPCOpenFirmware::Init(struct kernel_args *kernelArgs)
 {
        return of_init(
-               (int(*)(void*))kernelArgs->platform_args.openfirmware_entry);
+               
(intptr_t(*)(void*))kernelArgs->platform_args.openfirmware_entry);
 }
 
 // InitSerialDebug
diff --git a/src/system/libroot/os/arch/ppc/byteorder.S 
b/src/system/libroot/os/arch/ppc/byteorder.S
index c8a6d8824d..fb49bf56ba 100644
--- a/src/system/libroot/os/arch/ppc/byteorder.S
+++ b/src/system/libroot/os/arch/ppc/byteorder.S
@@ -3,10 +3,45 @@
 ** Distributed under the terms of the OpenBeOS License.
 */
 
-#define FUNCTION(x) .global x; .type x,@function; x
+#include <asm_defs.h>
 
 .text
 
+/* uint16 __swap_int16(uint16 value)
+ *                                        r3
+ */
+FUNCTION(__swap_int16):
+               rlwinm  %r4, %r3, 8, 16, 23             // byte 4 -> byte 3 
(clear other bits)
+               rlwimi  %r4, %r3, 24, 24, 31            // byte 3 -> byte 4 
(copy into)
+               mr              %r3, %r4                                // copy 
to result register
+               blr
+
+
+/* uint32 __swap_int32(uint32 value)
+ *                                        r3
+ */
+FUNCTION(__swap_int32):
+               lwbrx   %r4, 0, %r3             // Load and inverse r3 into r4
+               mr              %r3, %r4
+               blr
+
+
+/* uint64 __swap_int64(uint64 value)
+ *                                        r3/r4
+ */
+FUNCTION(__swap_int64):
+               lwbrx   %r5, 0, %r3
+               mr              %r3, %r5
+               lwbrx   %r5, 0, %r4
+               mr              %r4, %r5                // copy lower 32 bits
+               blr
+
+
+/* TODO: The following functions can surely be optimized. A simple optimization
+ * would be to define macros with the contents of the __swap_int{32,64}
+ * functions and use those instead of calling the functions.
+ */
+
 /* float __swap_float(float value)
  *                                       f1
  */


Other related posts:

  • » [haiku-commits] haiku: hrev53614 - src/system/boot/arch/ppc src/system/boot/platform/openfirmware/arch/ppc src/system/libroot/os/arch/ppc build/jam/repositories/HaikuPorts build/jam - Adrien Destugues