exec: Extract 'page-vary.h' header
In the next commit we will extract the generic code out of page-vary.c, only keeping the target specific code. Both files will use the same TargetPageBits structure, so make its declaration in a shared header. As the common header can not use target specific types, use a uint64_t to hold the page mask value, and add a cast back to target_long in the TARGET_PAGE_MASK definitions. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210322112427.4045204-3-f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>stable-6.0
parent
6670d4d0e3
commit
27eb9d65ff
|
@ -215,11 +215,7 @@ static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val
|
||||||
/* page related stuff */
|
/* page related stuff */
|
||||||
|
|
||||||
#ifdef TARGET_PAGE_BITS_VARY
|
#ifdef TARGET_PAGE_BITS_VARY
|
||||||
typedef struct {
|
# include "exec/page-vary.h"
|
||||||
bool decided;
|
|
||||||
int bits;
|
|
||||||
target_long mask;
|
|
||||||
} TargetPageBits;
|
|
||||||
#if defined(CONFIG_ATTRIBUTE_ALIAS) || !defined(IN_EXEC_VARY)
|
#if defined(CONFIG_ATTRIBUTE_ALIAS) || !defined(IN_EXEC_VARY)
|
||||||
extern const TargetPageBits target_page;
|
extern const TargetPageBits target_page;
|
||||||
#else
|
#else
|
||||||
|
@ -227,10 +223,11 @@ extern TargetPageBits target_page;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_DEBUG_TCG
|
#ifdef CONFIG_DEBUG_TCG
|
||||||
#define TARGET_PAGE_BITS ({ assert(target_page.decided); target_page.bits; })
|
#define TARGET_PAGE_BITS ({ assert(target_page.decided); target_page.bits; })
|
||||||
#define TARGET_PAGE_MASK ({ assert(target_page.decided); target_page.mask; })
|
#define TARGET_PAGE_MASK ({ assert(target_page.decided); \
|
||||||
|
(target_long)target_page.mask; })
|
||||||
#else
|
#else
|
||||||
#define TARGET_PAGE_BITS target_page.bits
|
#define TARGET_PAGE_BITS target_page.bits
|
||||||
#define TARGET_PAGE_MASK target_page.mask
|
#define TARGET_PAGE_MASK ((target_long)target_page.mask)
|
||||||
#endif
|
#endif
|
||||||
#define TARGET_PAGE_SIZE (-(int)TARGET_PAGE_MASK)
|
#define TARGET_PAGE_SIZE (-(int)TARGET_PAGE_MASK)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* Definitions for cpus with variable page sizes.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2003 Fabrice Bellard
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EXEC_PAGE_VARY_H
|
||||||
|
#define EXEC_PAGE_VARY_H
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool decided;
|
||||||
|
int bits;
|
||||||
|
uint64_t mask;
|
||||||
|
} TargetPageBits;
|
||||||
|
|
||||||
|
#endif /* EXEC_PAGE_VARY_H */
|
Loading…
Reference in New Issue