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