svn commit: r256934 - head/sys/mips/include
Adrian Chadd
adrian at freebsd.org
Wed Oct 23 02:27:24 UTC 2013
.. and it didn't compile because TLBLO_SWBITS_CLEAR_SHIFT is just plain not
defined in the 32-bit mips platform case.
Did you attempt to do a tinderbox build on this? Or even build a 32 bit
kernel?
-adrian
On 22 October 2013 19:20, Adrian Chadd <adrian at freebsd.org> wrote:
> This fails to build:
>
> cc -c -x assembler-with-cpp -DLOCORE -O -pipe -march=mips32 -std=c99 -g
> -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
> -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
> -fdiagnostics-show-option -nostdinc -I.
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/altq
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/libfdt -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=10000 --param
> large-function-growth=100000 --param max-inline-insns-single=10000
> -fno-pic -mno-abicalls -G0 -DKERNLOADADDR=0x80050000 -march=mips32
> -msoft-float -ffreestanding -O -pipe -march=mips32 -std=c99 -g -Wall
> -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
> -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
> -fdiagnostics-show-option -nostdinc -I.
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/altq
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/libfdt -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=10000 --param
> large-function-growth=100000 --param max-inline-insns-single=10000
> -fno-pic -mno-abicalls -G0 -DKERNLOADADDR=0x80050000 -march=mips32
> -msoft-float -ffreestanding -D_LOCORE -DLOCORE -Werror
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/locore.S
> --- exception.o ---
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:
> Assembler messages:
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:157:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:157:
> Error: Instruction srl requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:160:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:160:
> Error: Instruction srl requires absolute expression
> --- support.o ---
> --- exception.o ---
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:907:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:907:
> Error: Instruction srl requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:910:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:910:
> Error: Instruction srl requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:920:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:920:
> Error: Instruction srl requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:923:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:923:
> Error: Instruction srl requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:1064:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:1064:
> Error: Instruction srl requires absolute expression
> --- support.o ---
> cc -c -x assembler-with-cpp -DLOCORE -O -pipe -march=mips32 -std=c99 -g
> -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
> -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
> -fdiagnostics-show-option -nostdinc -I.
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/altq
> -I/usr/home/adrian/work/freebsd/svn/head/src/sys/contrib/libfdt -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=10000 --param
> large-function-growth=100000 --param max-inline-insns-single=10000
> -fno-pic -mno-abicalls -G0 -DKERNLOADADDR=0x80050000 -march=mips32
> -msoft-float -ffreestanding -O -pipe -march=mips32 -std=c99 -g -Wall
> -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
> -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
> -fdiagnostics-show---- exception.o ---
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:1067:
> Error: Instruction sll requires absolute expression
> /usr/home/adrian/work/freebsd/svn/head/src/sys/mips/mips/exception.S:1067:
> Error: Instruction srl requires absolute expression
>
>
>
>
> -adrian
>
>
> On 22 October 2013 14:06, Brooks Davis <brooks at freebsd.org> wrote:
>
>> Author: brooks
>> Date: Tue Oct 22 21:06:27 2013
>> New Revision: 256934
>> URL: http://svnweb.freebsd.org/changeset/base/256934
>>
>> Log:
>> MFP4:
>> Change 221534 by rwatson at rwatson_zenith_cl_cam_ac_uk on 2013/01/27
>> 16:05:30
>>
>> FreeBSD/mips stores page-table entries in a near-identical
>> format
>> to MIPS TLB entries -- only it overrides certain "reserved" bits
>> in the MIPS-defined EntryLo register to hold software-defined
>> bits
>> (swbits) to avoid significantly increasing the page table memory
>> footprint. On n32 and n64, these bits were (a) colliding with
>> MIPS64r2 physical memory extensions and (b) being improperly
>> cleared.
>>
>> Attempt to fix both of these problems by pushing swbits further
>> along 64-bit EntryLo registers into the reserved space, and
>> improving consistency between C-based and assembly-based
>> clearing
>> of swbits -- in particular, to use the same definition. This
>> should stop swbits from leaking into TLB entries -- while
>> ignored
>> by most current MIPS hardware, this would cause a problem with
>> (much) larger physical memory sizes, and also leads to confusing
>> hardware-level tracing as physical addresses contain unexpected
>> (and inconsistent) higher bits.
>>
>> Discussed with: imp, jmallett
>>
>> MFC after: 3 days
>> Sponsored by: DARPA/AFRL
>>
>> Modified:
>> head/sys/mips/include/pte.h
>>
>> Modified: head/sys/mips/include/pte.h
>>
>> ==============================================================================
>> --- head/sys/mips/include/pte.h Tue Oct 22 20:58:23 2013 (r256933)
>> +++ head/sys/mips/include/pte.h Tue Oct 22 21:06:27 2013 (r256934)
>> @@ -56,16 +56,26 @@ typedef pt_entry_t *pd_entry_t;
>> #define TLBMASK_MASK ((PAGE_MASK >> TLBMASK_SHIFT) <<
>> TLBMASK_SHIFT)
>>
>> /*
>> - * PFN for EntryLo register. Upper bits are 0, which is to say that
>> - * bit 28 is the last hardware bit; Bits 29 and upwards (EntryLo is
>> - * 64 bit though it can be referred to in 32-bits providing 3 software
>> - * bits safely. We use it as 64 bits to get many software bits, and
>> - * god knows what else.) are unacknowledged by hardware. They may be
>> - * written as anything, but otherwise they have as much meaning as
>> - * other 0 fields.
>> + * FreeBSD/mips page-table entries take a near-identical format to MIPS
>> TLB
>> + * entries, each consisting of two 32-bit or 64-bit values ("EntryHi" and
>> + * "EntryLo"). MIPS4k and MIPS64 both define certain bits in TLB
>> entries as
>> + * reserved, and these must be zero-filled by software. We overload
>> these
>> + * bits in PTE entries to hold PTE_ flags such as RO, W, and MANAGED.
>> + * However, we must mask these out when writing to TLB entries to ensure
>> that
>> + * they do not become visible to hardware -- especially on MIPS64r2
>> which has
>> + * an extended physical memory space.
>> + *
>> + * When using n64 and n32, shift software-defined bits into the MIPS64r2
>> + * reserved range, which runs from bit 55 ... 63. In other
>> configurations
>> + * (32-bit MIPS4k and compatible), shift them out to bits 29 ... 31.
>> + *
>> + * NOTE: This means that for 32-bit use of CP0, we aren't able to set
>> the top
>> + * bit of PFN to a non-zero value, as software is using it! This
>> physical
>> + * memory size limit may not be sufficiently enforced elsewhere.
>> */
>> #if defined(__mips_n64) || defined(__mips_n32) /* PHYSADDR_64_BIT */
>> -#define TLBLO_SWBITS_SHIFT (34)
>> +#define TLBLO_SWBITS_SHIFT (55)
>> +#define TLBLO_SWBITS_CLEAR_SHIFT (9)
>> #define TLBLO_PFN_MASK 0x3FFFFFFC0ULL
>> #else
>> #define TLBLO_SWBITS_SHIFT (29)
>> @@ -133,6 +143,9 @@ typedef pt_entry_t *pd_entry_t;
>> * listen to requests to write to it.
>> * W: Wired. ???
>> * MANAGED:Managed. This PTE maps a managed page.
>> + *
>> + * These bits should not be written into the TLB, so must first be
>> masked out
>> + * explicitly in C, or using CLEAR_PTE_SWBITS() in assembly.
>> */
>> #define PTE_RO ((pt_entry_t)0x01 <<
>> TLBLO_SWBITS_SHIFT)
>> #define PTE_W ((pt_entry_t)0x02 <<
>> TLBLO_SWBITS_SHIFT)
>> @@ -162,7 +175,7 @@ typedef pt_entry_t *pd_entry_t;
>> #define PTESIZE 4
>> #define PTE_L lw
>> #define PTE_MTC0 mtc0
>> -#define CLEAR_PTE_SWBITS(r) sll r, 3; srl r, 3 /* remove 3
>> high bits */
>> +#define CLEAR_PTE_SWBITS(r) LONG_SLL r,
>> TLBLO_SWBITS_CLEAR_SHIFT; LONG_SRL r, TLBLO_SWBITS_CLEAR_SHIFT /* remove
>> swbits */
>> #endif /* defined(__mips_n64) || defined(__mips_n32) */
>>
>> #if defined(__mips_n64)
>>
>
>
More information about the svn-src-all
mailing list