RE: C, -fexceptions, libgcc_s, and related matters on arm64

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Check -S output and see if references to the personality routine are there. Then proceed to the generated object files.

On x86-64, the personality is referenced, quite a lot, in the assembler output:

$ grep __gcc_personality pk/pk_bb.s
        .cfi_personality 0x9b,DW.ref.__gcc_personality_v0
        .globl  __gcc_personality_v0
        .cfi_personality 0x9b,DW.ref.__gcc_personality_v0
        .hidden DW.ref.__gcc_personality_v0
        .weak   DW.ref.__gcc_personality_v0
        .section        .data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
        .type   DW.ref.__gcc_personality_v0, @object
        .size   DW.ref.__gcc_personality_v0, 8
DW.ref.__gcc_personality_v0:
        .quad   __gcc_personality_v0

On arm64, it is not:

$  grep gcc_per pk/pk_bb.s
((no output))

> Maybe your AArch64 toolchain defaults to static linking?

It seems to be happily using dynamic linking. On x86-64:

$ ldd /path/to/libmine.so
        linux-vdso.so.1 =>  (0x00007ffec69bc000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f5eaed0c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5eaeaef000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f5eae72e000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f5eae42c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5eb3c4f000)

And on arm64:

$ ldd /path/to/libmine.so
        linux-vdso.so.1 (0x0000ffff90cca000)
        libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffff8d04d000)
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff8ceda000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffff90c9a000)
        libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffff8ce2d000)

The difference is that the arm64 build does not reference libgcc_s.so.

> Or the compiler is not GCC and does not actually implement this GNU extension?

$ cc --version
cc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Any more ideas?

Thanks,

--
John Dallman
Siemens Digital Industries Software

> -----Original Message-----
> From: Florian Weimer <fw@xxxxxxxxxxxxx>
> Sent: 23 October 2021 13:38
> To: Dallman, John via Gcc-help <gcc-help@xxxxxxxxxxx>
> Cc: Dallman, John (DI SW PE OT PC PDE) <john.dallman@xxxxxxxxxxx>
> Subject: Re: C, -fexceptions, libgcc_s, and related matters on arm64
>
> * John via Gcc-help Dallman:
>
> > My arm64 compile options are similar: cc -march=armv8-a
> > -ffp-contract=off -O -fPIC -D_POSIX_SOURCE -
> D_POSIX_C_SOURCE=200112L
> > -c -fexceptions -std=c99 -Wformat -Wformat-security
> > -fstack-protector-strong -fno-strict-aliasing
> >
> > Any suggestions?
>
> Check -S output and see if references to the personality routine are there.
> Then proceed to the generated object files.
>
> Maybe your AArch64 toolchain defaults to static linking?  Or the compiler is
> not GCC and does not actually implement this GNU extension?
-----------------
Siemens Industry Software Limited is a limited company registered in England and Wales.
Registered number: 3476850.
Registered office: Faraday House, Sir William Siemens Square, Frimley, Surrey, GU16 8QD.




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux