From b20eb413cd5afe7d879235b4553deeaab4ee5ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Dziepak?= Date: Fri, 30 May 2014 02:11:05 +0200 Subject: [PATCH] kernel/x86_64: help gcc with devirtualization This patch gets rid of some indirect calls in the paging code. --- .../arch/x86/paging/64bit/X86PagingMethod64Bit.h | 2 +- .../x86/paging/64bit/X86PagingStructures64Bit.h | 2 +- .../x86/paging/64bit/X86VMTranslationMap64Bit.h | 2 +- .../kernel/arch/x86/paging/X86VMTranslationMap.h | 13 +++++++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.h b/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.h index e68e559c45..694b5befd9 100644 --- a/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.h +++ b/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.h @@ -25,7 +25,7 @@ class X86PhysicalPageMapper; struct vm_page_reservation; -class X86PagingMethod64Bit : public X86PagingMethod { +class X86PagingMethod64Bit final : public X86PagingMethod { public: X86PagingMethod64Bit(); virtual ~X86PagingMethod64Bit(); diff --git a/src/system/kernel/arch/x86/paging/64bit/X86PagingStructures64Bit.h b/src/system/kernel/arch/x86/paging/64bit/X86PagingStructures64Bit.h index e3114d25a6..edb3e44e8a 100644 --- a/src/system/kernel/arch/x86/paging/64bit/X86PagingStructures64Bit.h +++ b/src/system/kernel/arch/x86/paging/64bit/X86PagingStructures64Bit.h @@ -10,7 +10,7 @@ #include "paging/X86PagingStructures.h" -struct X86PagingStructures64Bit : X86PagingStructures { +struct X86PagingStructures64Bit final : X86PagingStructures { X86PagingStructures64Bit(); virtual ~X86PagingStructures64Bit(); diff --git a/src/system/kernel/arch/x86/paging/64bit/X86VMTranslationMap64Bit.h b/src/system/kernel/arch/x86/paging/64bit/X86VMTranslationMap64Bit.h index 7a9b449a70..aa62a29155 100644 --- a/src/system/kernel/arch/x86/paging/64bit/X86VMTranslationMap64Bit.h +++ b/src/system/kernel/arch/x86/paging/64bit/X86VMTranslationMap64Bit.h @@ -13,7 +13,7 @@ struct X86PagingStructures64Bit; -struct X86VMTranslationMap64Bit : X86VMTranslationMap { +struct X86VMTranslationMap64Bit final : X86VMTranslationMap { X86VMTranslationMap64Bit(); virtual ~X86VMTranslationMap64Bit(); diff --git a/src/system/kernel/arch/x86/paging/X86VMTranslationMap.h b/src/system/kernel/arch/x86/paging/X86VMTranslationMap.h index fdb02411a4..a07b314b69 100644 --- a/src/system/kernel/arch/x86/paging/X86VMTranslationMap.h +++ b/src/system/kernel/arch/x86/paging/X86VMTranslationMap.h @@ -9,6 +9,11 @@ #include +#if __GNUC__ < 4 +#define final +#endif + + #define PAGE_INVALIDATE_CACHE_SIZE 64 @@ -22,12 +27,12 @@ struct X86VMTranslationMap : VMTranslationMap { status_t Init(bool kernel); - virtual bool Lock(); - virtual void Unlock(); + virtual bool Lock() final; + virtual void Unlock() final; - virtual addr_t MappedSize() const; + virtual addr_t MappedSize() const final; - virtual void Flush(); + virtual void Flush() final; virtual X86PagingStructures* PagingStructures() const = 0;