From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cmx-torrgo001.bell.net (mta-tor-001.bell.net [209.71.212.28]) by sourceware.org (Postfix) with ESMTP id C12A23858D1E; Fri, 11 Feb 2022 17:29:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C12A23858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=bell.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bell.net X-RG-CM-BuS: 0 X-RG-CM-SC: 0 X-RG-CM: Clean X-Originating-IP: [70.50.7.94] X-RG-Env-Sender: dave.anglin@bell.net X-RG-Rigid: 6202A014004CA29A X-CM-Envelope: MS4xfCwYXJlz9p4+LKkHRw7MDZgPgc41U6iCO635u8Z3n42ivkMxzVlM9CowSlVNhrYwUTwTX3wbaGpl99eGRqkV/Z5LFPwC+kZuAMKNwW+7T+9f61xG9LT3 Rro4xQZAZovTiUVmVFhRao5pDtzqxBDLaFMRL3WnRICnute5gmbpOrGED3Tk1LoRPRCZOPGodFZHKnYS+5m7BzrWj5+SgXhSlfC/UkRx1Dm1xOPrsc5BYdRZ wmEPNCIs6QYK19KCanUWlqcZZRgL/OVeQYAMfc64E/ZrrgjqmCVvl1VPuTXE6zrS6gS5fA6wkEqRqq7qNk7Xj3htZd8+9bb3+JXvnQSyRjnP8QnIcqYudimY /mn5Qnl5a5LyL2Ynm1/celv7DT2BwAvoumOsZy86PMiKGg3oyxunGimNWdukjE1rSyrI2GLPeNXTlmCOtJ3Ot5jaKME0Ca3jztSBvGfqgGRF9MwNDuBY3Z0i YJ79gqlmNzyOxJi3m8/j9RzKs39M4Rf092ROT2yoPX5/kIOoeEc1SKdd48XmCxDl5AH7cnbR3pYeSs1JunbymmX4FBf1MTwfuSUhO/FLhsHIvPO2+wpFKTgA RJs= X-CM-Analysis: v=2.4 cv=f44ruM+M c=1 sm=1 tr=0 ts=62069d10 a=9k1bCY7nR7m1ZFzoCuQ56g==:117 a=9k1bCY7nR7m1ZFzoCuQ56g==:17 a=oGFeUVbbRNcA:10 a=YwwAtqrtxheDdSbYzJsA:9 a=CjuIK1q_8ugA:10 a=rRm_j0C8sdc1EMZIwFEA:9 a=FfaGCDsud1wA:10 Received: from mx3210.localdomain (70.50.7.94) by cmx-torrgo001.bell.net (5.8.716.03) (authenticated as dave.anglin@bell.net) id 6202A014004CA29A; Fri, 11 Feb 2022 12:29:52 -0500 Received: by mx3210.localdomain (Postfix, from userid 1000) id 04E7A220115; Fri, 11 Feb 2022 17:29:51 +0000 (UTC) Date: Fri, 11 Feb 2022 17:29:51 +0000 From: John David Anglin To: libc-alpha@sourceware.org Cc: Adhemerval Zanella , carlos Subject: [PATCH] rtld: Add new hook to initialize dp register on hppa Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="ZZrKtuTJiURjtO48" Content-Disposition: inline X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Feb 2022 17:29:56 -0000 --ZZrKtuTJiURjtO48 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable The test elf/tst-audit2 fails on hppa with a segmentation fault in the long branch stub used to call malloc from calloc. This occur because the test is not a PIC executable and calloc is called from the dynamic linker before the dp register is initialized in _dl_start_user. The fix is to add a new hook, ELF_MACHINE_AFTER_RTLD_RELOC, in dl_main to allow initialization of the dp register just after relocation is completed. Okay? Dave --- diff --git a/elf/rtld.c b/elf/rtld.c index 19e328f89e..fcea41cb86 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -2333,6 +2333,10 @@ dl_main (const ElfW(Phdr) *phdr, /* Make sure no new search directories have been added. */ assert (GLRO(dl_init_all_dirs) =3D=3D GL(dl_all_dirs)); =20 +#ifdef ELF_MACHINE_AFTER_RTLD_RELOC + ELF_MACHINE_AFTER_RTLD_RELOC (main_map); +#endif + if (rtld_multiple_ref) { /* There was an explicit ref to the dynamic linker as a shared lib. diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h index da4d57d2e4..74a81dc1f7 100644 --- a/sysdeps/hppa/dl-machine.h +++ b/sysdeps/hppa/dl-machine.h @@ -70,6 +70,18 @@ __hppa_init_bootstrap_fdesc_table (struct link_map *map) map->l_mach.fptr_table =3D boot_table; } =20 +/* Set up dp for any non-PIC lib functions that may be called. */ +static inline void +set_dp (struct link_map *map) +{ + register Elf32_Addr dp asm ("%r27"); + dp =3D D_PTR (map, l_info[DT_PLTGOT]); + asm volatile ("" : : "r" (dp)); +} + +#define ELF_MACHINE_AFTER_RTLD_RELOC(map) \ + set_dp (map); + #define ELF_MACHINE_BEFORE_RTLD_RELOC(map, dynamic_info) \ __hppa_init_bootstrap_fdesc_table (map); \ _dl_fptr_init(); @@ -338,16 +350,6 @@ elf_machine_runtime_setup (struct link_map *l, struct = r_scope_elem *scope[], its return value is the user program's entry point. */ =20 #define RTLD_START \ -/* Set up dp for any non-PIC lib constructors that may be called. */ \ -static struct link_map * __attribute__((used)) \ -set_dp (struct link_map *map) \ -{ \ - register Elf32_Addr dp asm ("%r27"); \ - dp =3D D_PTR (map, l_info[DT_PLTGOT]); \ - asm volatile ("" : : "r" (dp)); \ - return map; \ -} \ - \ asm ( \ " .text\n" \ " .globl _start\n" \ @@ -447,14 +449,11 @@ asm ( \ " stw %r24,-44(%sp)\n" \ \ ".Lnofix:\n" \ + /* Call _dl_init(main_map, argc, argv, envp). */ \ " addil LT'_rtld_local,%r19\n" \ " ldw RT'_rtld_local(%r1),%r26\n" \ -" bl set_dp, %r2\n" \ " ldw 0(%r26),%r26\n" \ \ - /* Call _dl_init(_dl_loaded, argc, argv, envp). */ \ -" copy %r28,%r26\n" \ - \ /* envp =3D argv + argc + 1 */ \ " sh2add %r25,%r24,%r23\n" \ " bl _dl_init,%r2\n" \ --ZZrKtuTJiURjtO48 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEnRzl+6e9+DTrEhyEXb/Nrl8ZTfEFAmIGnQcACgkQXb/Nrl8Z TfGcxg/+KFxmGlEQqeB6t3m5kDvK213Z/i1xWFkV7NzOfmYurYZfkQBeLZId0YmN BCWQ3KRchsFZbWZxXKDVHaZFKYC9JOkd74+1fzax5SeDtCTBGI8eHw3fuw2h/LnE pA5CuzgwEXKpGx4bGegjF7VzS6jwrmZ7rEUCKyq3DtkozPMSzfOSymz5Qn/De4dS 3h+vxHYeWdGrkaMQKpw90wyhCkFfOTOhdf0LjUaTBjzwLxqIv+KW1i8K8b4+BAON A8MRUkz3EIV20siZ+M/di/xcRdq542AiDY+Zg2tU0q7GFTIQEsJuntlm32fVYw5V 4Pf3W8Znkbtol13hsKj8Gf4AQFAiF3uMNmaP7AUH6OVQ/dXXHgQlVRSxxfxj9im8 BGnpIyz9D8KcC/P4JCE56e1TyJEt2XsiKU/0QFB5qKou52u6pvI186KGLQ1qNXi4 iIonyneLyNHk/8FizbDf9UGf4CvD9NYBjdFaZuT+iwpcnVh/05oRlgqCK3R4c2Cn /v8Yc4onqjSZeKlMM0xX3+MOcIJixzHeyQwzM+5H0rO6meiNQKgZOMPc2oIwHFl/ Bcrf3MMdDWGzL/2fvilGd5Njb3OONTJYuQ4zNbOr4QQdDquLb0W4pMQniiAGX/5/ cie/bSWVxHZthr0dllWmjCOu0qv3+TwjAUpO61YzyfYBxuOSCgo= =SflN -----END PGP SIGNATURE----- --ZZrKtuTJiURjtO48--