ARC: Enable shared crt1
commit2c3be84e73fa4013608e9b348386ddff91ae0c8c
authorVineet Gupta <Vineet.Gupta1@synopsys.com>
Thu, 23 Jun 2016 11:51:15 +0000 (23 17:21 +0530)
committerWaldemar Brodkorb <wbx@uclibc-ng.org>
Thu, 23 Jun 2016 18:48:25 +0000 (23 20:48 +0200)
treec828ba4f11ef6f97e7b67d326c4f79f8558f1588
parente58bacb7ec462912e843fc616288995db88b7275
ARC: Enable shared crt1

Currently crt1 takes address of functions (main,_init,_fini) directly
which doesn't generate truely position independent code, but zero based
values instead. e.g.

|  __start:
|        ...
| add_s   r2,sp,0x4
|  mov_s r0, main

generates to

|  000156ec <__start>:
|  ...
|     156f4: add_s r2,sp,0x4
|     156f6: mov_s r0,0x15f7c
|  ...
|  00015f7c <main>:
|     15f7c: push_s blink

This works just fine for the normal (non PIE) dynamic executables since
they are loaded at address 0. However this is not true for PIE
executables. So for Scrt1 we use a true position independent way when
taking function addresses.

Cc: uclibc@uclibc.org <uclibc@uclibc.org>
Cc: devel@uclibc-ng.org <devel@uclibc-ng.org>
Cc: Cupertino Miranda <cmiranda@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
libc/sysdeps/linux/arc/crt1.S