Message ID | 20220103230433.1907240-4-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | Properly align all PT_LOAD segments with tests | expand |
On 03/01/2022 20:04, H.J. Lu wrote: > Add tst-p_alignmod2-edit to edit the copy of tst-alignmod3.so to set > p_align of the first PT_LOAD segment to 1 and verify that the shared > library can be loaded normally. > --- > elf/Makefile | 13 +++++++++++++ > elf/tst-p_align2.c | 27 +++++++++++++++++++++++++++ > elf/tst-p_alignmod2-edit.c | 27 +++++++++++++++++++++++++++ > 3 files changed, 67 insertions(+) > create mode 100644 elf/tst-p_align2.c > create mode 100644 elf/tst-p_alignmod2-edit.c > > diff --git a/elf/Makefile b/elf/Makefile > index 9c831faac1..e4be3fa518 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -406,7 +406,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ > ifeq (yes,$(build-shared)) > tests += \ > tst-p_alignmod1-edit \ > + tst-p_alignmod2-edit \ > tst-p_align1 \ > + tst-p_align2 \ > Maybe add a #test as final member? > endif > > @@ -2097,3 +2099,14 @@ $(objpfx)tst-p_alignmod1.so: $(objpfx)tst-p_alignmod1-edit \ > cp $(objpfx)tst-alignmod3.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-alignmod3.so and update p_align of the first PT_LOAD > +# segment. > +$(objpfx)tst-p_alignmod2.so: $(objpfx)tst-p_alignmod2-edit \ > + $(objpfx)tst-alignmod3.so Same as previous patch, it uses tst-alignmod3.so which only defined in next one. > + rm -f $@ > + cp $(objpfx)tst-alignmod3.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 0000000000..cab9793220 > --- /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) 2021 Free Software Foundation, Inc. Update the Copyright year. > + 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 > + <https://www.gnu.org/licenses/>. */ > + > +extern int do_load_test (void); > + > +static int > +do_test (void) > +{ > + return do_load_test (); > +} > + > +#include <support/test-driver.c> > diff --git a/elf/tst-p_alignmod2-edit.c b/elf/tst-p_alignmod2-edit.c > new file mode 100644 > index 0000000000..2f47b37c9e > --- /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) 2021 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 > + <https://www.gnu.org/licenses/>. */ > + > +#include "tst-elf-edit.h" > + > +/* Set p_align to 1. */ > + > +static size_t > +update_p_align (size_t p_align __attribute__ ((unused))) > +{ > + return 1; > +}
On 18/01/2022 13:32, Adhemerval Zanella wrote: > > > On 03/01/2022 20:04, H.J. Lu wrote: >> Add tst-p_alignmod2-edit to edit the copy of tst-alignmod3.so to set >> p_align of the first PT_LOAD segment to 1 and verify that the shared >> library can be loaded normally. >> --- >> elf/Makefile | 13 +++++++++++++ >> elf/tst-p_align2.c | 27 +++++++++++++++++++++++++++ >> elf/tst-p_alignmod2-edit.c | 27 +++++++++++++++++++++++++++ >> 3 files changed, 67 insertions(+) >> create mode 100644 elf/tst-p_align2.c >> create mode 100644 elf/tst-p_alignmod2-edit.c >> >> diff --git a/elf/Makefile b/elf/Makefile >> index 9c831faac1..e4be3fa518 100644 >> --- a/elf/Makefile >> +++ b/elf/Makefile >> @@ -406,7 +406,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ >> ifeq (yes,$(build-shared)) >> tests += \ >> tst-p_alignmod1-edit \ >> + tst-p_alignmod2-edit \ >> tst-p_align1 \ >> + tst-p_align2 \ >> > > Maybe add a #test as final member? > >> endif >> >> @@ -2097,3 +2099,14 @@ $(objpfx)tst-p_alignmod1.so: $(objpfx)tst-p_alignmod1-edit \ >> cp $(objpfx)tst-alignmod3.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-alignmod3.so and update p_align of the first PT_LOAD >> +# segment. >> +$(objpfx)tst-p_alignmod2.so: $(objpfx)tst-p_alignmod2-edit \ >> + $(objpfx)tst-alignmod3.so > > Same as previous patch, it uses tst-alignmod3.so which only defined in next one. > >> + rm -f $@ >> + cp $(objpfx)tst-alignmod3.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 0000000000..cab9793220 >> --- /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) 2021 Free Software Foundation, Inc. > > Update the Copyright year. > >> + 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 >> + <https://www.gnu.org/licenses/>. */ >> + >> +extern int do_load_test (void); Same issue as elf/tst-p_align2.c, where do_load_test is defined as returning void. >> + >> +static int >> +do_test (void) >> +{ >> + return do_load_test (); >> +} >> + >> +#include <support/test-driver.c> >> diff --git a/elf/tst-p_alignmod2-edit.c b/elf/tst-p_alignmod2-edit.c >> new file mode 100644 >> index 0000000000..2f47b37c9e >> --- /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) 2021 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 >> + <https://www.gnu.org/licenses/>. */ >> + >> +#include "tst-elf-edit.h" >> + >> +/* Set p_align to 1. */ >> + >> +static size_t >> +update_p_align (size_t p_align __attribute__ ((unused))) >> +{ >> + return 1; >> +}
On Tue, Jan 18, 2022 at 8:32 AM Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > > > On 03/01/2022 20:04, H.J. Lu wrote: > > Add tst-p_alignmod2-edit to edit the copy of tst-alignmod3.so to set > > p_align of the first PT_LOAD segment to 1 and verify that the shared > > library can be loaded normally. > > --- > > elf/Makefile | 13 +++++++++++++ > > elf/tst-p_align2.c | 27 +++++++++++++++++++++++++++ > > elf/tst-p_alignmod2-edit.c | 27 +++++++++++++++++++++++++++ > > 3 files changed, 67 insertions(+) > > create mode 100644 elf/tst-p_align2.c > > create mode 100644 elf/tst-p_alignmod2-edit.c > > > > diff --git a/elf/Makefile b/elf/Makefile > > index 9c831faac1..e4be3fa518 100644 > > --- a/elf/Makefile > > +++ b/elf/Makefile > > @@ -406,7 +406,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ > > ifeq (yes,$(build-shared)) > > tests += \ > > tst-p_alignmod1-edit \ > > + tst-p_alignmod2-edit \ > > tst-p_align1 \ > > + tst-p_align2 \ > > > > Maybe add a #test as final member? Fixed. > > endif > > > > @@ -2097,3 +2099,14 @@ $(objpfx)tst-p_alignmod1.so: $(objpfx)tst-p_alignmod1-edit \ > > cp $(objpfx)tst-alignmod3.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-alignmod3.so and update p_align of the first PT_LOAD > > +# segment. > > +$(objpfx)tst-p_alignmod2.so: $(objpfx)tst-p_alignmod2-edit \ > > + $(objpfx)tst-alignmod3.so > > Same as previous patch, it uses tst-alignmod3.so which only defined in next one. Fixed. > > + rm -f $@ > > + cp $(objpfx)tst-alignmod3.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 0000000000..cab9793220 > > --- /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) 2021 Free Software Foundation, Inc. > > Update the Copyright year. Fixed. > > + 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 > > + <https://www.gnu.org/licenses/>. */ > > + > > +extern int do_load_test (void); > > + > > +static int > > +do_test (void) > > +{ > > + return do_load_test (); > > +} > > + > > +#include <support/test-driver.c> > > diff --git a/elf/tst-p_alignmod2-edit.c b/elf/tst-p_alignmod2-edit.c > > new file mode 100644 > > index 0000000000..2f47b37c9e > > --- /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) 2021 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 > > + <https://www.gnu.org/licenses/>. */ > > + > > +#include "tst-elf-edit.h" > > + > > +/* Set p_align to 1. */ > > + > > +static size_t > > +update_p_align (size_t p_align __attribute__ ((unused))) > > +{ > > + return 1; > > +} Thanks.
diff --git a/elf/Makefile b/elf/Makefile index 9c831faac1..e4be3fa518 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -406,7 +406,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ ifeq (yes,$(build-shared)) tests += \ tst-p_alignmod1-edit \ + tst-p_alignmod2-edit \ tst-p_align1 \ + tst-p_align2 \ endif @@ -2097,3 +2099,14 @@ $(objpfx)tst-p_alignmod1.so: $(objpfx)tst-p_alignmod1-edit \ cp $(objpfx)tst-alignmod3.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-alignmod3.so and update p_align of the first PT_LOAD +# segment. +$(objpfx)tst-p_alignmod2.so: $(objpfx)tst-p_alignmod2-edit \ + $(objpfx)tst-alignmod3.so + rm -f $@ + cp $(objpfx)tst-alignmod3.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 0000000000..cab9793220 --- /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) 2021 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 + <https://www.gnu.org/licenses/>. */ + +extern int do_load_test (void); + +static int +do_test (void) +{ + return do_load_test (); +} + +#include <support/test-driver.c> diff --git a/elf/tst-p_alignmod2-edit.c b/elf/tst-p_alignmod2-edit.c new file mode 100644 index 0000000000..2f47b37c9e --- /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) 2021 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 + <https://www.gnu.org/licenses/>. */ + +#include "tst-elf-edit.h" + +/* Set p_align to 1. */ + +static size_t +update_p_align (size_t p_align __attribute__ ((unused))) +{ + return 1; +}