summaryrefslogtreecommitdiff
path: root/crt/arm
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2013-07-10 16:58:27 -0400
committerRich Felker <dalias@aerifal.cx>2013-07-10 16:58:27 -0400
commitc07da2e9704d2ba95efa34a4fde2747d973b4e4c (patch)
tree814e020ffae9e24e6f23280d5e826ad6935bd71b /crt/arm
parent3e8806b4f7f25f7c249f61f597d3a113f531a059 (diff)
downloadmusl-c07da2e9704d2ba95efa34a4fde2747d973b4e4c.tar.gz
musl-c07da2e9704d2ba95efa34a4fde2747d973b4e4c.tar.bz2
musl-c07da2e9704d2ba95efa34a4fde2747d973b4e4c.tar.xz
musl-c07da2e9704d2ba95efa34a4fde2747d973b4e4c.zip
add PIE support for ARM
Diffstat (limited to 'crt/arm')
-rw-r--r--crt/arm/Scrt1.s30
1 files changed, 30 insertions, 0 deletions
diff --git a/crt/arm/Scrt1.s b/crt/arm/Scrt1.s
new file mode 100644
index 00000000..a54859aa
--- /dev/null
+++ b/crt/arm/Scrt1.s
@@ -0,0 +1,30 @@
+.weak _init
+.weak _fini
+.global _start
+_start:
+ mov fp,#0
+ mov lr,#0
+
+ ldr a2,[sp],#4
+ mov a3,sp
+ str fp,[sp,#-4]!
+ str a1,[sp,#-4]!
+
+ adr ip,2f
+ ldr a4,2f+4
+ add a4,a4,ip
+ str a4,[sp,#-4]!
+ ldr a4,2f+8
+ add a4,a4,ip
+
+ ldr a1,2f
+ add ip,ip,a1
+ ldr a1,2f+12
+ ldr a1,[ip,a1]
+
+ bl __libc_start_main(PLT)
+1: b 1b
+2: .word _GLOBAL_OFFSET_TABLE_-2b
+ .word _fini-2b
+ .word _init-2b
+ .word main(GOT)