diff options
Diffstat (limited to 'libc/sysdeps/linux/bfin/crt1.S')
-rw-r--r-- | libc/sysdeps/linux/bfin/crt1.S | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/libc/sysdeps/linux/bfin/crt1.S b/libc/sysdeps/linux/bfin/crt1.S index 156654437..38e68c9ac 100644 --- a/libc/sysdeps/linux/bfin/crt1.S +++ b/libc/sysdeps/linux/bfin/crt1.S @@ -34,7 +34,12 @@ Cambridge, MA 02139, USA. */ #include <features.h> -#ifndef L_Scrt1 +#undef USE_GOT +#if defined (__UCLIBC_FORMAT_SHARED_FLAT__) || defined (__UCLIBC_FORMAT_FLAT_SEP_DATA__) +#define USE_GOT +#endif + +#if !(defined L_Scrt1 && defined __UCLIBC_FORMAT_SHARED_FLAT__) .text .align 2 @@ -53,7 +58,7 @@ Cambridge, MA 02139, USA. */ __start: -#if defined(__BFIN_FDPIC__) && !defined(__pie__) +#if defined(__BFIN_FDPIC__) && !defined(L_Scrt1) /* P0 contains a pointer to the program's load map. */ call .Lcall; .Lcall: @@ -108,7 +113,7 @@ __start: #ifdef __BFIN_FDPIC__ R3 = [P3 + __init@FUNCDESC_GOT17M4]; -#elif defined __ID_SHARED_LIB__ +#elif defined USE_GOT P5 = [P5 + _current_shared_library_p5_offset_]; R3 = [P5 + ___shared_flat_init@GOT]; #else @@ -120,7 +125,7 @@ __start: #ifdef __BFIN_FDPIC__ R3 = [P3 + __fini@FUNCDESC_GOT17M4]; -#elif defined __ID_SHARED_LIB__ +#elif defined USE_GOT R3 = [P5 + ___shared_flat_fini@GOT]; #else R3.H = __fini; @@ -135,13 +140,13 @@ __start: #ifdef __BFIN_FDPIC__ R0 = [P3 + _main@FUNCDESC_GOT17M4]; -#elif defined __ID_SHARED_LIB__ +#elif defined USE_GOT R0 = [P5 + _main@GOT]; #else R0.H = _main; R0.L = _main; #endif -#ifdef __ID_SHARED_LIB__ +#ifdef USE_GOT P0 = [P5 + ___uClibc_main@GOT]; jump (P0) #else |