thank you very much for your review! I fixed the arm build and all other issues that you raised.
the patch is attached. Bootstrap and tested on x86-64 linux Alexander 2013/1/11 Maxim Kuvyrkov <maxim.kuvyr...@gmail.com>: > On 10/01/2013, at 12:24 AM, Alexander Ivchenko wrote: > >>> Config/linux-android.h is a better place for this declaration. > > I was wrong here. Config/linux-android.h is not a "re-includable" header, > and is not fit for function declarations. > >> >> That wouldn't help, I got the following error: >> >> In file included from ../../.././gcc/tm.h:24:0, >> from [..]/src/gcc/libgcc/generic-morestack-thread.c:29: >> [..]/src/gcc/libgcc/../gcc/config/linux-android.h:62:1: error: unknown >> type name ‘bool’ >> extern bool linux_android_has_ifunc_p (void); >> ^ >> >> Anyway, linux-protos.h looks to me as a good thing to have (e.g. for >> libc_has_function hook, that is >> supposed to be commited in a near future) for declaring linux (and >> Android) specific versions of hooks.. > > OK, I agree. In theory linux_android_has_ifunc_p could've been placed into > linux-android-protos.h, but having a separate file (from linux-protos.h) just > for 1-2 declarations is not justified. > >>>> + "It returns true if the target supports GNU indirect functions.\n\ >>>> +The support includes the assembler, linker and dynamic linker.\n\ >>>> +The default value of this hook is defined as for the host machine.", >>> >>> Are your sure the last sentence is correct? It seems the default value for >>> this hook is based on which libc is being used. Maybe it would be more >>> accurate to say "The default value of this hook is based on target's libc."? >> >> Well yes, you are right that the default value depends on version of >> libc, but this version >> is checked on the configure time for the host machine >> (HAVE_GNU_INDIRECT_FUNCTION), > > No. And even if that was the case that would be a bug. > > HAVE_GNU_INDIRECT_FUNCTION is set based on default_gnu_indirect_function > variable defined in config.gcc (unless overridden with a configure argument). > This variable is set to true for targets that support IFUNCs irrespective of > host and host's libc. > >> --- a/gcc/config.gcc >> +++ b/gcc/config.gcc >> @@ -637,6 +637,11 @@ case ${target} in >> native_system_header_dir=/include >> ;; >> esac >> + case $target in >> + *linux*) >> + tm_p_file="${tm_p_file} linux-protos.h" >> + ;; >> + esac >> # glibc / uclibc / bionic switch. >> # uclibc and bionic aren't usable for GNU/Hurd and neither for GNU/k*BSD. >> case $target in >> @@ -662,8 +667,10 @@ case ${target} in >> # Add Android userspace support to Linux targets. >> case $target in >> *linux*) >> + tmake_file="${tmake_file} t-linux-android" >> tm_file="$tm_file linux-android.h" >> extra_options="$extra_options linux-android.opt" >> + extra_objs="$extra_objs linux-android.o" >> ;; >> esac >> # Enable compilation for Android by default for *android* targets. >> > > Also scan config.gcc for any other occurences of linux-android.h and add same > changes there. I believe only arm*-*-linux-* is affected. > > >> --- a/gcc/config/host-linux.c >> +++ b/gcc/config/host-linux.c >> @@ -23,7 +23,6 @@ >> #include "hosthooks.h" >> #include "hosthooks-def.h" >> >> - >> /* Linux has a feature called exec-shield-randomize that perturbs the >> address of non-fixed mapped segments by a (relatively) small amount. >> The feature is intended to make it harder to attack the system with > > Don't change formatting unless you are editing the code around it. > >> diff --git a/gcc/config/linux-android.c b/gcc/config/linux-android.c >> new file mode 100644 >> index 0000000..47cc50a >> --- /dev/null >> +++ b/gcc/config/linux-android.c > ... >> +You should have received a copy of the GNU General Public License >> +along with GCC; see the file COPYING3. If not see >> +<http://www.gnu.org/licenses/>. */ >> + >> +#include "config.h" >> +#include "system.h" >> +#include "coretypes.h" >> +#include "tm.h" > > Add '#include "linux-protos.h"'. Remember to update t-linux-android. > >> + >> +/* Android does not support GNU indirect functions. */ >> + >> +bool >> +linux_android_has_ifunc_p (void) >> +{ >> + return TARGET_ANDROID ? false : HAVE_GNU_INDIRECT_FUNCTION; >> +} >> > > > Please send one last version for the final review, primarily to double check > your changes to arm*-linux-* to avoid breaking it. > > Thanks! > > -- > Maxim Kuvyrkov > > > > >
disable_ifunc_for_android_06.patch
Description: Binary data