• Navigation überspringen
  • Zur Navigation
  • Zum Seitenende
Organisationsmenü öffnen Organisationsmenü schließen
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
  • FAUZur zentralen FAU Website
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Suche öffnen
  • English
  • Campo
  • StudOn
  • FAUdir
  • Stellenangebote
  • Lageplan
  • Hilfe im Notfall
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
Menu Menu schließen
  • Lehrstuhl
    • Team
    • Aktuelles
    • Kontakt und Anfahrt
    • Leitbild
    • 50-jähriges Jubiläum
    Portal Lehrstuhl
  • Forschung
    • Forschungsbereiche
      • Betriebssysteme
      • Confidential Computing
      • Embedded Systems Software
      • Verteilte Systeme
    • Projekte
      • AIMBOS
      • BALu
      • BFT2Chain
      • DOSS
      • Mirador
      • NEON
      • PAVE
      • ResPECT
      • Watwa
    • Projektkampagnen
      • maRE
    • Seminar
      • Systemsoftware
    Portal Forschung
  • Publikationen
  • Lehre
    • Sommersemester 2025
      • Applied Software Architecture
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssystemtechnik
      • Projekt angewandte Systemsoftwaretechnik
      • System-Level Programming
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verteilte Systeme
    • Wintersemester 2024/25
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Systemprogrammierung 2
      • Verlässliche Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • Betriebssystemtechnik
    • Vorlesung
      • Folien
      • Glossar
    • Übung
      • Aufgaben
      • Dokumentation
        • Blog
          • Entwicklungsumgebung
            • Assembler Crashkurs
              • C++ Crashkurs
                • 🔗 Testrechnerverwaltung
                • 🔗 Adora-Belle (Helpdesk)
                • Kontakt
              • Evaluation

              Blog

              Unterstützung für GCC 12

              Bernhard Heinloth

              2022-06-09

              Anfang Mai wurde GCC Version 12 veröffentlicht, nach dem Beginn des Übungsbetriebs – und der Herausgabe der Vorgabe.

              StuBS(mI) kann zwar prinzipiell damit übersetzt werden, es werden jedoch bei der Übersetzung des ACPI-Teils Warnungen bzgl. Array Grenzen angezeigt. Und unter Umständen kann es passieren, das beim casten von volatile Variablen zusätzliche Instruktionen (welche Symbole aus der C++-ABI, die bei uns nicht-definierte sind) referenzieren.

              Mit diesem Patch lässt sich unser Kernel auch problemlos mit GCC 12 übersetzen:

              diff --git a/machine/acpi.cc b/machine/acpi.cc
              index 02229e7..ef9faa6 100644
              --- a/machine/acpi.cc
              +++ b/machine/acpi.cc
              @@ -48,7 +48,8 @@ bool init() {
                       *   on the BIOS data area.
                       * * The BIOS read-only memory space between 0E0000h and 0FFFFFh.
                       */
              -       const uintptr_t ebda = static_cast<uintptr_t>(*reinterpret_cast<uint32_t*>(0x40e));
              +       volatile uintptr_t ebda_base_address = 0x40e;
              +       const uintptr_t ebda = static_cast<uintptr_t>(*reinterpret_cast<uint32_t *>(ebda_base_address));
                      const RSDP *rsdp = findRSDP(reinterpret_cast<void*>(ebda), 1024);
                      if (rsdp == nullptr) {
                              rsdp = findRSDP(reinterpret_cast<void*>(0xe0000), 0xfffff-0xe0000);
              diff --git a/tools/build.mk b/tools/build.mk
              index 21378ae..312196f 100644
              --- a/tools/build.mk
              +++ b/tools/build.mk
              @@ -17,7 +17,7 @@ CXXFLAGS_DEFAULT = -std=c++14 -ffreestanding -fno-pic -nodefaultlibs -nostdlib -
               CXXFLAGS_OPT = -O3 -fomit-frame-pointer
               CXXFLAGS_WARNING = -Wall -Wextra -Werror -Wno-error=unused-parameter -Wno-non-virtual-dtor
               CXXFLAGS_CLANG = -no-pie -Wno-error=unused-private-field -Wno-implicit-exception-spec-mismatch -Wno-error=unused-const-variable -Wno-unused-command-line-argument -Wno-unused-const-variable -fno-strict-aliasing
              -CXXFLAGS_GCC = -fno-tree-loop-distribute-patterns -no-pie -nostartfiles -Wstack-usage=1024 -Wno-error=stack-usage=
              +CXXFLAGS_GCC = -fno-tree-loop-distribute-patterns -no-pie -nostartfiles -Wstack-usage=1024 -Wno-error=stack-usage= -fno-threadsafe-statics
               CXXFLAGS_NOFPU = -mno-mmx -mno-sse -mgeneral-regs-only
               CXXFLAGS = $(CXXFLAGS_ARCH) $(CXXFLAGS_DEFAULT) $(CXXFLAGS_OPT) $(CXXFLAGS_NOFPU) $(CXXFLAGS_WARNING)
               # Compiler specific flags

              Außerdem wurden nun auch die Docker-Abbilder nachgezogen.

              Übersetzer Versionen Dockerabbild
              GCC 7 - 10 inf4/stubs:gcc-old-x64
              GCC 9 - 12 inf4/stubs:gcc-x64
              LLVM/Clang 7 - 10 inf4/stubs:clang-old-x64
              LLVM/Clang 11 - 14 inf4/stubs:clang-x64

              StuBS unterstützt (mit obigen Patch) alle diese Versionen, zum Übersetzen sollte die Makefilevariable CXX entsprechend angepasst werden. Um zum Beispiel testweise mit GCC 12 zu bauen, einfach

              $ cd mpstubsmi-gruppe-00
              $ make clean
              $ docker run --rm -it -v $(pwd):/builds/stubs/ inf4/stubs:gcc-x64
              root@123456789abc:/# cd /builds/stubs
              root@123456789abc:/builds/stubs# make CXX=gcc-12

              ausführen.

              Zurück zur Übersicht

              Friedrich-Alexander-Universität
              Erlangen-Nürnberg

              Schlossplatz 4
              91054 Erlangen
              • Impressum
              • Datenschutz
              • Barrierefreiheit
              • Facebook
              • RSS Feed
              • Xing
              Nach oben