svn commit: r256934 - head/sys/mips/include

Adrian Chadd adrian at freebsd.org
Wed Oct 23 02:20:29 UTC 2013


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