Tested this along with the patches for binutils and gcc. Everything is working for me when tested with buildroot's qemu_xtensa_lx60_defconfig and qemu.
On Thu, Sep 15, 2022 at 3:31 PM Max Filippov <jcmvb...@gmail.com> wrote: > Signed-off-by: Max Filippov <jcmvb...@gmail.com> > --- > extra/Configs/Config.in | 4 +++- > ldso/ldso/xtensa/dl-startup.h | 2 ++ > libc/misc/internals/reloc_static_pie.c | 2 +- > libc/sysdeps/linux/xtensa/crt1.S | 27 ++++++++++++++++++++++++++ > 4 files changed, 33 insertions(+), 2 deletions(-) > > diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in > index 43c04fd0a271..dd1beaadcee3 100644 > --- a/extra/Configs/Config.in > +++ b/extra/Configs/Config.in > @@ -324,7 +324,9 @@ config DOPIC > config STATIC_PIE > bool "Add support for Static Position Independent Executables > (PIE)" > default n > - depends on DOPIC && !UCLIBC_FORMAT_FDPIC_ELF && (TARGET_arm || > TARGET_i386 || TARGET_x86_64 || TARGET_aarch64 || TARGET_mips) > + depends on DOPIC && !UCLIBC_FORMAT_FDPIC_ELF && \ > + (TARGET_arm || TARGET_i386 || TARGET_x86_64 || > TARGET_aarch64 || \ > + TARGET_mips || TARGET_xtensa) > > config ARCH_HAS_NO_SHARED > bool > diff --git a/ldso/ldso/xtensa/dl-startup.h b/ldso/ldso/xtensa/dl-startup.h > index 439bdbd7a5e2..c9350c0f201e 100644 > --- a/ldso/ldso/xtensa/dl-startup.h > +++ b/ldso/ldso/xtensa/dl-startup.h > @@ -7,6 +7,7 @@ > * Parts taken from glibc/sysdeps/xtensa/dl-machine.h. > */ > > +#ifndef L_rcrt1 > __asm__ ( > " .text\n" > " .align 4\n" > @@ -81,6 +82,7 @@ __asm__ ( > " addi a5, a5, 8\n" > " bnez a6, 3b\n" > " j .Lfixup_stack_ret"); > +#endif > > /* Get a pointer to the argv value. */ > #define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long *) ARGS) + 1) > diff --git a/libc/misc/internals/reloc_static_pie.c > b/libc/misc/internals/reloc_static_pie.c > index ce42cb9b30df..ab1923024c2b 100644 > --- a/libc/misc/internals/reloc_static_pie.c > +++ b/libc/misc/internals/reloc_static_pie.c > @@ -21,7 +21,7 @@ > #include <dl-elf.h> > > #include <ldso.h> > -#ifdef __mips__ > +#if defined(__mips__) || defined(__xtensa__) > #include <dl-startup.h> > #endif > > diff --git a/libc/sysdeps/linux/xtensa/crt1.S > b/libc/sysdeps/linux/xtensa/crt1.S > index efbe264c03f0..3fa14ae583a9 100644 > --- a/libc/sysdeps/linux/xtensa/crt1.S > +++ b/libc/sysdeps/linux/xtensa/crt1.S > @@ -76,9 +76,26 @@ > .global _start > .type _start, @function > _start: > +#ifdef L_rcrt1 > + .begin no-transform > + call0 1f > +.Lret_addr: > + .end no-transform > + .align 4 > +1: > +#endif > #if defined(__XTENSA_WINDOWED_ABI__) > +#ifdef L_rcrt1 > + movi a6, .Lret_addr > + sub a6, a0, a6 > + movi a0, 0 > + movi a4, reloc_static_pie > + add a4, a4, a6 > + callx4 a4 > +#else > /* Clear a0 to obviously mark the outermost frame. */ > movi a0, 0 > +#endif > > /* Load up the user's main function. */ > movi a6, main > @@ -106,8 +123,18 @@ _start: > movi a4, __uClibc_main > callx4 a4 > #elif defined(__XTENSA_CALL0_ABI__) > +#ifdef L_rcrt1 > + mov a12, a2 > + movi a2, .Lret_addr > + sub a2, a0, a2 > + movi a0, reloc_static_pie > + add a0, a0, a2 > + callx0 a0 > + mov a7, a12 > +#else > /* Setup the shared library termination function. */ > mov a7, a2 > +#endif > > /* Load up the user's main function. */ > movi a2, main > -- > 2.30.2 > >
_______________________________________________ devel mailing list -- devel@uclibc-ng.org To unsubscribe send an email to devel-le...@uclibc-ng.org