diff options
author | Olivier Hainque <hainque@adacore.com> | 2024-08-16 17:08:32 +0200 |
---|---|---|
committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2024-10-08 10:37:11 +0200 |
commit | eeb0a0eae55a68069edd0d9074e7e3adfbceee64 (patch) | |
tree | 4d820a2590b1359ef3c78408ff48458606d9feb9 /gcc/go | |
parent | 3376bc79ba0833f9ad8a9ec4860aeb217710cb5b (diff) | |
download | gcc-eeb0a0eae55a68069edd0d9074e7e3adfbceee64.zip gcc-eeb0a0eae55a68069edd0d9074e7e3adfbceee64.tar.gz gcc-eeb0a0eae55a68069edd0d9074e7e3adfbceee64.tar.bz2 |
ada: Rework s-linux/osinte for arm/aarch64-android sigactions
Building an aarch64-android compiler with the current sources
initially intended for arm-android expectedly trips on problems.
This change is meant to address:
```
.../gcc/ada/rts % ../../gnat1 -quiet ... a-stbufi.adb -I.
s-osinte.ads:591:07: error: component "sa_flags" overlaps "sa_mask" at line 590
```
s-linux__android.ads makes hardcoded assumptions on the size
of sigset_t, based on observations performed in the course of the
arm port.
Then sysem headers show sa_flags placed VERY differently between
the 32 and the 64 bits variants.
See android-sysroot/usr/include/bits/signal_types.h
```
%if defined(__LP64__)
int sa_flags; \
union { \
sighandler_t sa_handler; \
void (*sa_sigaction)(int, struct siginfo*, void*); \
}; \
sigset_t sa_mask; \
void (*sa_restorer)(void); \
%else
union {
sighandler_t sa_handler;
void (*sa_sigaction)(int, struct siginfo*, void*);
};
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
```
gcc/ada/ChangeLog:
* libgnarl/s-linux__android-arm.ads: New file, renaming of ...
* libgnarl/s-linux__android.ads: ... this file.
* libgnarl/s-linux__android-aarch64.ads: New file. Based on the
-arm variant, with sa_ field positions adjusted.
* Makefile.rtl (arm/aarch64-android pairs): Adjust accordingly.
* libgnarl/s-osinte__android.ads: Rather than making assumptions
on the actual type of the C sigset_t, use
Os_Constants.SIZEOF_sigset_t to define an Ada sigset_t type of the
proper size. Use C.int instead of unsigned_long for sa_flags.
Diffstat (limited to 'gcc/go')
0 files changed, 0 insertions, 0 deletions