Hi Maxim, 2013/9/4 Maxim Kuvyrkov <ma...@kugelworks.com>: > On 23/08/2013, at 1:04 AM, Alexander Ivchenko wrote: > >> Ugh.. thanks, you are right. That points to another problem that I >> didn't see before: >> >> 3) *linux* targets that do not append to tm_p_file (s390x-*-linux* and >> s390x-ibm-tpf* - your patch addresses that problem correctly) OR >> tmake_file (bfin*-linux-uclibc* or crisv32-*-linux* | cris-*-linux*) > > Could you be more verbose, please? What some of the *linux* target do not > append to tm_p_file?
*linux* targets that do not append to tm_p_file are 390x-*-linux* and s390x-ibm-tpf* and Andrew is already addressed this problem. > It seems that there are at least two separate problems: > > 1. OPTION_BIONIC is not defined in linux-android.c . I think the right fix > here is to copy definitions of OPTION_BIONIC (and, optionally, OPTION_UCLIBC) > from gcc/config/linux.h to rs6000/linux.h, rs6000/linux64.h and alpha/linux.h > -- in other words, define OPTION_BIONIC and OPTION_UCLIBC whenever > OPTION_GLIBC is defined. Why can't we just use the checks like "if (linux_libc == LIBC_GLIBC)". Seems that we have all infrastructure in place (linux_libc, LIBC_GLIBC, LIBC_BIONIC, LIBC_UCLIBC are defined for all *linux* targets). I don't see the reason to make new defines. > 2. The second problem is to do with definitions of TARGET_LIBC_HAS_FUNCTION > for bfin, c6x, lm32, m68k and moxie. What is the failure scenario here? "For them we have ar: linux-android.o: No such file or directory" So I added t-linux-android rules to tmake_file. (and for bfin additionally we have: "../../gcc/gcc/config/bfin/bfin.c:5812:29: error: ‘linux_android_libc_has_function’ was not declared in this scope". because the tm_p.h is not included in bfin.c) > >> diff --git a/gcc/config.gcc b/gcc/config.gcc >> index 7e1d529..89cf30a 100644 >> --- a/gcc/config.gcc >> +++ b/gcc/config.gcc >> @@ -1018,7 +1018,7 @@ bfin*-uclinux*) >> ;; >> bfin*-linux-uclibc*) >> tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h gnu-user.h linux.h >> glibc-stdint.h bfin/linux.h ./linux-sysroot-suffix.h" >> - tmake_file="bfin/t-bfin-linux t-slibgcc" >> + tmake_file="bfin/t-bfin-linux t-slibgcc t-linux-android" >> use_collect2=no >> ;; >> bfin*-rtems*) > > Why? Bfin has nothing to do with android. Since ‘linux_android_libc_has_function’ handles all three libc options for all linux targets, that's natural to use this function. May be it should be called "linux_libc_has_function" and be located in linux.c (we don't have this file..). >> @@ -1053,7 +1053,7 @@ cris-*-elf | cris-*-none) >> crisv32-*-linux* | cris-*-linux*) >> tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h >> glibc-stdint.h cris/linux.h" >> # We need to avoid using t-linux, so override default tmake_file >> - tmake_file="cris/t-cris cris/t-linux t-slibgcc" >> + tmake_file="cris/t-cris cris/t-linux t-slibgcc t-linux-android" >> extra_options="${extra_options} cris/linux.opt" >> case $target in >> cris-*-*) > > Same question here. Please, see above. >> diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c >> index 7fab975..18457f8 100644 >> --- a/gcc/config/bfin/bfin.c >> +++ b/gcc/config/bfin/bfin.c >> @@ -46,6 +46,7 @@ >> #include "cgraph.h" >> #include "langhooks.h" >> #include "bfin-protos.h" >> +#include "tm_p.h" >> #include "tm-preds.h" >> #include "tm-constrs.h" >> #include "gt-bfin.h" >> diff --git a/gcc/config/bfin/uclinux.h b/gcc/config/bfin/uclinux.h >> index ca0f4ee..63cba99 100644 >> --- a/gcc/config/bfin/uclinux.h >> +++ b/gcc/config/bfin/uclinux.h >> @@ -44,3 +44,6 @@ see the files COPYING3 and COPYING.RUNTIME >> respectively. If not, see >> #define TARGET_SUPPORTS_SYNC_CALLS 1 >> >> #define SUBTARGET_FDPIC_NOT_SUPPORTED >> + >> +#undef TARGET_LIBC_HAS_FUNCTION >> +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function >> diff --git a/gcc/config/c6x/uclinux-elf.h b/gcc/config/c6x/uclinux-elf.h >> index 5d61f4d..fa0937e 100644 >> --- a/gcc/config/c6x/uclinux-elf.h >> +++ b/gcc/config/c6x/uclinux-elf.h >> @@ -62,3 +62,5 @@ >> : "0" (_beg), "b" (_end), "b" (_scno)); \ >> } >> >> +#undef TARGET_LIBC_HAS_FUNCTION >> +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function >> diff --git a/gcc/config/linux-android.c b/gcc/config/linux-android.c >> index 4a4b48d..e9d9e9a 100644 >> --- a/gcc/config/linux-android.c >> +++ b/gcc/config/linux-android.c >> @@ -35,9 +35,9 @@ linux_android_has_ifunc_p (void) >> bool >> linux_android_libc_has_function (enum function_class fn_class) >> { >> - if (OPTION_GLIBC) >> + if (linux_libc == LIBC_GLIBC) >> return true; >> - if (OPTION_BIONIC) >> + if (linux_libc == LIBC_BIONIC) >> if (fn_class == function_c94 >> || fn_class == function_c99_misc >> || fn_class == function_sincos) > > The above hunk should not be necessary after (1). > >> diff --git a/gcc/config/lm32/uclinux-elf.h b/gcc/config/lm32/uclinux-elf.h >> index 3a556d7..a5e8163 100644 >> --- a/gcc/config/lm32/uclinux-elf.h >> +++ b/gcc/config/lm32/uclinux-elf.h >> @@ -77,3 +77,5 @@ >> #undef CC1_SPEC >> #define CC1_SPEC "%{G*} %{!fno-PIC:-fPIC}" >> >> +#undef TARGET_LIBC_HAS_FUNCTION >> +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function >> diff --git a/gcc/config/m68k/uclinux.h b/gcc/config/m68k/uclinux.h >> index 8d74312..b1af7d2 100644 >> --- a/gcc/config/m68k/uclinux.h >> +++ b/gcc/config/m68k/uclinux.h >> @@ -67,3 +67,6 @@ along with GCC; see the file COPYING3. If not see >> sections. */ >> #undef M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P >> #define M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 1 >> + >> +#undef TARGET_LIBC_HAS_FUNCTION >> +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function >> diff --git a/gcc/config/moxie/uclinux.h b/gcc/config/moxie/uclinux.h >> index 498037e..85c65f2 100644 >> --- a/gcc/config/moxie/uclinux.h >> +++ b/gcc/config/moxie/uclinux.h >> @@ -37,3 +37,6 @@ see the files COPYING3 and COPYING.RUNTIME >> respectively. If not, see >> --wrap=mmap --wrap=munmap --wrap=alloca\ >> %{fmudflapth: --wrap=pthread_create\ >> }} %{fmudflap|fmudflapth: --wrap=main}" >> + >> +#undef TARGET_LIBC_HAS_FUNCTION >> +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function >> >> > > Thanks, > > -- > Maxim Kuvyrkov > www.kugelworks.com Thanks for the review, Alexander