From: H.J. Lu Date: Tue, 21 Dec 2021 20:25:20 +0000 (-0800) Subject: elf: Add a test for PT_LOAD segments with p_align == 1 [BZ #28688] X-Git-Tag: glibc-2.35~44 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4c9268d154ff11c070eba4791d33bd3a5875bca;p=platform%2Fupstream%2Fglibc.git elf: Add a test for PT_LOAD segments with p_align == 1 [BZ #28688] Add tst-p_alignmod2-edit to edit the copy of tst-p_alignmod-base.so to set p_align of the first PT_LOAD segment to 1 and verify that the shared library can be loaded normally. Reviewed-by: Adhemerval Zanella --- diff --git a/elf/Makefile b/elf/Makefile index 1758259..687b913 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -414,7 +414,9 @@ tests += \ tst-noload \ tst-null-argv \ tst-p_alignmod1-edit \ + tst-p_alignmod2-edit \ tst-p_align1 \ + tst-p_align2 \ tst-relsort1 \ tst-ro-dynamic \ tst-rtld-run-static \ @@ -2609,3 +2611,14 @@ $(objpfx)tst-p_alignmod1.so: $(objpfx)tst-p_alignmod1-edit \ cp $(objpfx)tst-p_alignmod-base.so $@ $(test-wrapper-env) $(run-program-env) $(rtld-prefix) \ $(objpfx)tst-p_alignmod1-edit $@ + +$(objpfx)tst-p_align2: $(objpfx)tst-p_alignmod2.so + +# Make a copy of tst-p_alignmod-base.so and update p_align of the first +# PT_LOAD segment. +$(objpfx)tst-p_alignmod2.so: $(objpfx)tst-p_alignmod2-edit \ + $(objpfx)tst-p_alignmod-base.so + rm -f $@ + cp $(objpfx)tst-p_alignmod-base.so $@ + $(test-wrapper-env) $(run-program-env) $(rtld-prefix) \ + $(objpfx)tst-p_alignmod2-edit $@ diff --git a/elf/tst-p_align2.c b/elf/tst-p_align2.c new file mode 100644 index 0000000..961c7fb --- /dev/null +++ b/elf/tst-p_align2.c @@ -0,0 +1,27 @@ +/* Check different alignments of PT_LOAD segments in a shared library. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include "tst-p_align.h" + +static int +do_test (void) +{ + return do_load_test (); +} + +#include diff --git a/elf/tst-p_alignmod2-edit.c b/elf/tst-p_alignmod2-edit.c new file mode 100644 index 0000000..4c2ae65 --- /dev/null +++ b/elf/tst-p_alignmod2-edit.c @@ -0,0 +1,27 @@ +/* Set p_align of the first PT_LOAD segment to 1. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include "tst-elf-edit.h" + +/* Set p_align to 1. */ + +static size_t +update_p_align (size_t p_align __attribute__ ((unused))) +{ + return 1; +}