This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: PR bootstrap/54209: [4.8 Regression] Failed to build gcc for Android/x86


On Tue, Aug 14, 2012 at 3:47 PM, Maxim Kuvyrkov <maxim@codesourcery.com> wrote:
> On 15/08/2012, at 7:39 AM, H.J. Lu wrote:
>
>> On Tue, Aug 14, 2012 at 12:38 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Thu, Aug 9, 2012 at 3:17 PM, Ian Lance Taylor <iant@google.com> wrote:
>>>> On Thu, Aug 9, 2012 at 9:39 AM, H.J. Lu <hongjiu.lu@intel.com> wrote:
>>>>>
>>>>> Bionic C library doesn't provide link.h.
>>>>
>>>> Does Bionic provide dl_iterate_phdr?  If it does, I'll just note in
>>>> passing that it would be straightforward to simply incorporate the
>>>> required types and constants in unwind-dw2-fde-dip.c directly, and
>>>> avoid the #include.  If it doesn't, then of course nothing will make
>>>> this code work correctly.
>>>>
>>>
>>> dl_iterate_phdr is provided in libdl.so, which is always linked with
>>> dynamic executables:
>>>
>>> #define ANDROID_LIB_SPEC \
>>>  "%{!static: -ldl}"
>>>
>>>
>>> This patch fixes Android/x86 build on trunk. OK to install?
>
> [Adding David Turner to CC as the main Bionic expert.  Also reattaching HJ's current patch so that David can easily look at it.  Link to the bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54209]
>
> I think this patch will break MIPS Android build due to mismatch of ElfW(type) when _MIPS_SZPTR == 64.  I think the right way to fix this is to make Bionic export link.h or already-existing linker.h, but I differ to Ian for final judgement.
>
> FWIW, I'm OK with using hard-coded definitions if link.h is absent, and using definitions from link.h if it is there.  I.e.,
>
> #ifdef HAVE_LINK_H
> # include <link.h>
> #else
> <YOUR PATCH>
> #endif
>
> This would allow Bionic to eventually catch up and provide link.h uniformly across all targets.
>
> I've looked into latest Android NDK distribution, and the situation with link.h is not uniform across targets.  ARM and x86 don't have link.h, while MIPS does:
> ---
> /*
>    For building unwind-dw2-fde-glibc.c for MIPS frame unwinding,
>    we need to have <link.h> that defines struct dl_phdr_info,
>    ELFW(type), and dl_iterate_phdr().
> */
>
> #include <sys/types.h>
> #include <elf.h>
>
> struct dl_phdr_info
> {
>     Elf32_Addr dlpi_addr;
>     const char *dlpi_name;
>     const Elf32_Phdr *dlpi_phdr;
>     Elf32_Half dlpi_phnum;
> };
>
> #if _MIPS_SZPTR == 32
> #define ElfW(type)      Elf32_##type
> #elif _MIPS_SZPTR == 64
> #define ElfW(type)      Elf64_##type
> #endif
>
> int
> dl_iterate_phdr(int (*cb)(struct dl_phdr_info *info, size_t size, void *data),
>                 void *data);
> ---
>
> I'm not 100% sure where the above link.h comes from for MIPS, but since it's not present in Bionic sources, my guess is kernel's arch/mips/include directory.  Checking ...  No, not from the kernel sources.  Hm...
>
> --

Bionic is a 32-bit library.  I don't know how  _MIPS_SZPTR == 64 works
with Bionic on mips.


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]