Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Sep 2018 20:48:54 +0200
From:      Michael Tuexen <tuexen@freebsd.org>
To:        Andreas Tobler <andreast@FreeBSD.org>
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r338930 - head/libexec/rtld-elf/powerpc
Message-ID:  <828EF35C-7216-4847-A73D-464111006E52@freebsd.org>
In-Reply-To: <201809251929.w8PJTZl9021331@repo.freebsd.org>
References:  <201809251929.w8PJTZl9021331@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> On 25. Sep 2018, at 21:29, Andreas Tobler <andreast@FreeBSD.org> =
wrote:
>=20
> Author: andreast
> Date: Tue Sep 25 19:29:35 2018
> New Revision: 338930
> URL: https://svnweb.freebsd.org/changeset/base/338930
>=20
> Log:
>  Bring the 32-bit powerpc (PowerMac) back to live. The commit 338486 =
reworked
>  some TLS bits. This broke operation on the PowerMac. Namely one could =
not login.
>  At login the screen/shell was giving back lots of backslashes and the =
login
>  shell dumped core.
>=20
>  The fix to this issue is to revert the powerpc commit from 338486 and =
to
>  increase the TLS_TCB_SIZE to 16.
>  Reverting only did not help, login was possible but userland =
applications
>  aborted with strange messages.
>=20
>  I tested this patch with world/kernel builds and with port upgrades.
>  Additionally a full gcc8 bootstrap was successfully completed.
>=20
>  Reviewed by: jhibbits@
>  Approved by: re (Glen)
>=20
> Modified:
>  head/libexec/rtld-elf/powerpc/rtld_machdep.h
>=20
> Modified: head/libexec/rtld-elf/powerpc/rtld_machdep.h
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
> --- head/libexec/rtld-elf/powerpc/rtld_machdep.h	Tue Sep 25 =
18:54:18 2018	(r338929)
> +++ head/libexec/rtld-elf/powerpc/rtld_machdep.h	Tue Sep 25 =
19:29:35 2018	(r338930)
> @@ -69,12 +69,12 @@ void _rtld_powerpc_pltcall(void);
>=20
> #define TLS_TP_OFFSET	0x7000
> #define TLS_DTV_OFFSET	0x8000
> -#define TLS_TCB_SIZE	8
> +#define TLS_TCB_SIZE	16
>=20
> #define round(size, align) \
>     (((size) + (align) - 1) & ~((align) - 1))
> #define calculate_first_tls_offset(size, align) \
> -    TLS_TCB_SIZE
> +    round(8, align)
> #define calculate_tls_offset(prev_offset, prev_size, size, align) \
>     round(prev_offset + prev_size, align)
> #define calculate_tls_end(off, size)    ((off) + (size))
>=20
After performing a buildworld/buildkernel and running r338956 on a =
32-bit powerpc machine (G4 Mac Mini),
the following program:

#include <pthread.h>
#include <stdio.h>
#include <string.h>

void *
f(void * arg)
{
	return (arg);
}

int
main(void)
{
	void *res;
	pthread_t tid;
	int err;

	if ((err =3D pthread_create(&tid, NULL, f, NULL)) !=3D 0) {
		fprintf(stderr, "pthread_create: %s\n", strerror(err));
	}
	if ((err =3D pthread_join(tid, &res)) !=3D 0) {
		fprintf(stderr, "pthread_join: %s\n", strerror(err));
	}
	return (0);
}

is killed:

tuexen@bsd5:~ % ./test
ld-elf.so.1: assert failed: =
/usr/home/tuexen/head/libexec/rtld-elf/rtld.c:4753
Abort (core dumped)

gdb shows:

tuexen@bsd5:~ % gdb -c test.core test
GNU gdb (GDB) 8.1 [GDB v8.1 for FreeBSD]
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later =
<http://gnu.org/licenses/gpl.html>;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show =
copying"
and "show warranty" for details.
This GDB was configured as "powerpc-portbld-freebsd12.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...done.
[New LWP 100112]
Core was generated by `./test'.
Program terminated with signal SIGABRT, Aborted.
#0  0x41829a58 in thr_kill () at thr_kill.S:3
3	RSYSCALL(thr_kill)
(gdb) bt
#0  0x41829a58 in thr_kill () at thr_kill.S:3
#1  0x41829378 in __raise (s=3D6)
    at /usr/home/tuexen/head/lib/libc/gen/raise.c:52
#2  0x41823b84 in abort () at =
/usr/home/tuexen/head/lib/libc/stdlib/abort.c:67
#3  0x41813f58 in allocate_tls (objs=3D0x41843000, oldtcb=3D<optimized =
out>,=20
    tcbsize=3D8, tcbalign=3D<optimized out>)
    at /usr/home/tuexen/head/libexec/rtld-elf/rtld.c:4753
#4  0x41813fc0 in _rtld_allocate_tls (oldtls=3D0x0, tcbsize=3D8, =
tcbalign=3D16)
    at /usr/home/tuexen/head/libexec/rtld-elf/rtld.c:5030
#5  0x41877438 in _tcb_ctor (thread=3D0x41a8d300, initial=3D<optimized =
out>)
    at /usr/home/tuexen/head/lib/libthr/thread/thr_ctrdtr.c:45
#6  0x41876ebc in _thr_alloc (curthread=3D0x41a8d000)
    at /usr/home/tuexen/head/lib/libthr/thread/thr_list.c:172
#7  0x41867118 in _pthread_create (thread=3D0xffffdc10, attr=3D0x0,=20
    start_routine=3D0x180073c <f>, arg=3D0x0)
    at /usr/home/tuexen/head/lib/libthr/thread/thr_create.c:81
#8  0x01800798 in main ()
(gdb) quit

Any idea what is wrong?

Best regards
Michael=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?828EF35C-7216-4847-A73D-464111006E52>