Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Oct 2022 23:09:53 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Konstantin Belousov <kostikbel@gmail.com>, dev-commits-src-main@freebsd.org
Subject:   Re: git: 9cabef3d146e - main - ldd: use direct exec mode unconditionally
Message-ID:  <0D5A9F6F-C19B-487D-BD61-F40F02E38873@yahoo.com>
References:  <0D5A9F6F-C19B-487D-BD61-F40F02E38873.ref@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Konstantin Belousov <kostikbel_at_gmail.com> wrote on
Date: Sat, 22 Oct 2022 01:13:49 UTC :

> . . .
> Please try something along this lines:
>=20
> diff --git a/sys/arm64/include/elf.h b/sys/arm64/include/elf.h
> index 3f7c3964d428..22e968c632bf 100644
> --- a/sys/arm64/include/elf.h
> +++ b/sys/arm64/include/elf.h
> @@ -86,7 +86,7 @@ __ElfType(Auxinfo);
>  #endif
> =20
>  #if __ELF_WORD_SIZE =3D=3D 32
> -#define	ET_DYN_LOAD_ADDR 0x12000
> +#define	ET_DYN_LOAD_ADDR 0x01001000
>  #else
>  #define	ET_DYN_LOAD_ADDR 0x100000
>  #endif

[Summary: that made it work.]

First I did some as-is testing . . .

Testing for the problem is easy on the Cortex-A72 system . . .

# ~/do-chroot-main-CA7.sh

# ldd /bin/date
/bin/date:
ld-elf.so.1: /bin/date: mmap of entire address space failed: Cannot =
allocate memory
/bin/date: exit status 1

# ldd -a /bin/date
ld-elf.so.1: /bin/date: mmap of entire address space failed: Cannot =
allocate memory
/bin/date: exit status 1


By contrast, on a 2 GiByte RAM Cortex-A7 (armv7)
Orange Pi Plus 2 Ed, the result is different:

# ldd /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x2056e000)
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)

# ldd -a /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x2056e000)
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)
/lib/libgcc_s.so.1:
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)

For reference (long  output line split for readability):

# uname -apKU
FreeBSD OPiP2E_RPI2v1p1 14.0-CURRENT FreeBSD 14.0-CURRENT #49
main-n258610-ba7319e9091b-dirty: Fri Oct 14 18:27:46 PDT 2022
=
root@CA72_16Gp_ZFS:/usr/obj/BUILDs/main-CA7-nodbg-clang/usr/main-src/arm.a=
rmv7/sys/GENERIC-NODBG-CA7
arm armv7 1400072 1400072

(It was installed from the same buildworld buildkernel as
tree used to set up the chroot tree on the Cortex-A72 system.)


Same boot media, but booting a 1 GiByte RAM Cortex-A7 (armv7)
RPi2B v1.1:

# ldd /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x2056e000)
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)

# ldd -a /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x2056e000)
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)
/lib/libgcc_s.so.1:
        libc.so.7 =3D> /lib/libc.so.7 (0x205a8000)


In case it matters, these Cortex-A7's have LPAE
(RPi2B v1.1 shown):

CPU Features:=20
  Multiprocessing, Thumb2, Security, Virtualization, Generic Timer, =
VMSAv7,
  PXN, LPAE, Coherent Walk

So only the aarch64 context that allows armv7 shows the
problem.



Then I did the requested aarch64 test with the patch . . .

So, for that aarch64 context, the patch test requested:

# git -C /usr/main-src/ diff /usr/main-src/sys/arm64/include/
diff --git a/sys/arm64/include/elf.h b/sys/arm64/include/elf.h
index 3f7c3964d428..22e968c632bf 100644
--- a/sys/arm64/include/elf.h
+++ b/sys/arm64/include/elf.h
@@ -86,7 +86,7 @@ __ElfType(Auxinfo);
 #endif
=20
 #if __ELF_WORD_SIZE =3D=3D 32
-#define        ET_DYN_LOAD_ADDR 0x12000
+#define        ET_DYN_LOAD_ADDR 0x01001000
 #else
 #define        ET_DYN_LOAD_ADDR 0x100000
 #endif

Then: builworld buildkernel installkernel installworld reboot
login. The results in that new context were:

# ~/do-chroot-main-CA7.sh

# ldd /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x4106f000)
        libc.so.7 =3D> /lib/libc.so.7 (0x410a9000)

# ldd -a /bin/date
/bin/date:
        libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x4106f000)
        libc.so.7 =3D> /lib/libc.so.7 (0x410a9000)
/lib/libgcc_s.so.1:
        libc.so.7 =3D> /lib/libc.so.7 (0x410a9000)


So: works.


NOTES:

I do not have any armv6, i386, or 32-bit powerpc contexts
set up to test, not that the specific patch targets the
i386 or targets any powerpc's. (armv6 requires adjusting
the kernel to instead not target armv7 chroot/jail support.
Long ago I helped someone work out having an alternate
kernel to boot for such armv6 chroot/jail use, not that I
remember any detail at this point. The detail should be in
my E-mail archive and/or in comments for a bugzilla
submittal that the person had used to report the lack of
armv6 chroot/jail support.)

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0D5A9F6F-C19B-487D-BD61-F40F02E38873>