> Date: Wed, 10 Aug 2016 00:31:06 -0700
> From: Philip Guenther <[email protected]>
> 
> So it looks like relro wasn't working for me on mips64...because I 
> couldn't count zeros correctly: 0x1000 != 0x10000, resulting in it 
> aligning on subpage size and protecting the relro area altered the .data 
> and .bss segments too.  Setting COMMONPAGESIZE to 0x4000 == 16K, the 
> advertised page size on loongson appears to have everything working.
> 
> Also, since mips64 doesn't have a real hardware NX bit, splitting the 
> .text and .rodata segments doesn't actually get us anything from a 
> protection standpoint.  So, unset PAD_NO to smoosh them back together. 
> What I'm not sure is if the pmap would be happier with them separate: the 
> workaround for the "R4000 EOP" bug applies to PROT_EXEC pages only, so 
> maybe it would be better to keep them separate for that?  Anyone?

Hmm, doesn' Loongsoon actually have a NX bit?  Perhaps in later
generations?  In any case I'd keep them separate.  Keeps the number of
variations between platfforms down a bit.

> I'm going to leave the loongon doing the full build overnight, but it 
> looks like it's happy with the critical parts of a partial build...
> 
> 
> Philip
> 
> 
> Index: ld/ldmain.c
> ===================================================================
> RCS file: /data/src/openbsd/src/gnu/usr.bin/binutils-2.17/ld/ldmain.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 ldmain.c
> --- ld/ldmain.c       10 Aug 2016 02:58:44 -0000      1.10
> +++ ld/ldmain.c       10 Aug 2016 07:16:41 -0000
> @@ -299,7 +299,7 @@ main (int argc, char **argv)
>    link_info.new_dtags = FALSE;
>    link_info.combreloc = TRUE;
>    link_info.eh_frame_hdr = FALSE;
> -#if defined(__mips64__) || defined(__m88k__)
> +#if defined(__m88k__)
>    link_info.relro = FALSE;
>  #else
>    link_info.relro = TRUE;
> Index: ld/emulparams/elf64btsmip_obsd.sh
> ===================================================================
> RCS file: 
> /data/src/openbsd/src/gnu/usr.bin/binutils-2.17/ld/emulparams/elf64btsmip_obsd.sh,v
> retrieving revision 1.3
> diff -u -p -r1.3 elf64btsmip_obsd.sh
> --- ld/emulparams/elf64btsmip_obsd.sh 10 Aug 2016 02:58:44 -0000      1.3
> +++ ld/emulparams/elf64btsmip_obsd.sh 10 Aug 2016 07:04:26 -0000
> @@ -1,7 +1,9 @@
>  . ${srcdir}/emulparams/elf64btsmip.sh
>  MAXPAGESIZE=0x10000
> -COMMONPAGESIZE=0x1000
> +COMMONPAGESIZE=0x4000
>  TEXT_START_ADDR="0x10000000"
>  . ${srcdir}/emulparams/elf_obsd.sh
>  # XXX causes GOT oflows
>  NO_PAD_CDTOR=y
> +# No nx bit, so don't bother to pad between .text and .rodata
> +unset PAD_RO
> Index: ld/emulparams/elf64ltsmip_obsd.sh
> ===================================================================
> RCS file: 
> /data/src/openbsd/src/gnu/usr.bin/binutils-2.17/ld/emulparams/elf64ltsmip_obsd.sh,v
> retrieving revision 1.3
> diff -u -p -r1.3 elf64ltsmip_obsd.sh
> --- ld/emulparams/elf64ltsmip_obsd.sh 10 Aug 2016 02:58:44 -0000      1.3
> +++ ld/emulparams/elf64ltsmip_obsd.sh 10 Aug 2016 07:04:16 -0000
> @@ -1,7 +1,9 @@
>  . ${srcdir}/emulparams/elf64ltsmip.sh
>  MAXPAGESIZE=0x10000
> -COMMONPAGESIZE=0x1000
> +COMMONPAGESIZE=0x4000
>  TEXT_START_ADDR="0x10000000"
>  . ${srcdir}/emulparams/elf_obsd.sh
>  # XXX causes GOT oflows
>  NO_PAD_CDTOR=y
> +# No nx bit, so don't bother to pad between .text and .rodata
> +unset PAD_RO
> 
> 

Reply via email to