summaryrefslogtreecommitdiff
path: root/rts/AdjustorAsm.S
diff options
context:
space:
mode:
authorHerbert Valerio Riedel <hvr@gnu.org>2016-03-24 20:35:42 +0100
committerHerbert Valerio Riedel <hvr@gnu.org>2016-03-24 20:43:59 +0100
commit343349df1f19f21899818d647bf570e489d0cf8f (patch)
tree28e2c1b134cc2c9e3519d55be9966166e9eae45d /rts/AdjustorAsm.S
parentcb08f8da37ff5fb99e1d02b8afdcb802d23e9a8d (diff)
downloadhaskell-343349df1f19f21899818d647bf570e489d0cf8f.tar.gz
Avoid local label syntax for assembler on AIX
Unfortunately (for inline `__asm__()` uses), IBM's `as` doesn't seem to support local labels[1] like GNU `as` does so we need to workaround this when on AIX. [1]: https://sourceware.org/binutils/docs/as/Symbol-Names.html#Symbol-Names Turns out this also addresses the long-standing bug #485 Reviewed By: bgamari, trommler Differential Revision: https://phabricator.haskell.org/D2029
Diffstat (limited to 'rts/AdjustorAsm.S')
-rw-r--r--rts/AdjustorAsm.S14
1 files changed, 9 insertions, 5 deletions
diff --git a/rts/AdjustorAsm.S b/rts/AdjustorAsm.S
index ca7ae36573..1713acb315 100644
--- a/rts/AdjustorAsm.S
+++ b/rts/AdjustorAsm.S
@@ -63,8 +63,12 @@
#define r31 31
#endif
-
+#if defined(aix_HOST_OS)
+/* IBM's assembler needs a different pseudo-op to declare a .text section */
+.csect .text[PR]
+#else
.text
+#endif
#if LEADING_UNDERSCORE
.globl _adjustorCode
_adjustorCode:
@@ -101,14 +105,14 @@ adjustorCode:
LOAD r12, EXTRA_WORDS_OFF(r2)
mtctr r12
- b 2f
-1:
+ b L2
+L1:
LOAD r0, LINKAGE_AREA_SIZE + 8*WS(r30)
STORE r0, LINKAGE_AREA_SIZE + 10*WS(r31)
addi r30, r30, WS
addi r31, r31, WS
-2:
- bdnz 1b
+L2:
+ bdnz L1
/* Restore r30 and r31 now.
*/