$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r77448 - trunk/libs/context/src/asm
From: oliver.kowalke_at_[hidden]
Date: 2012-03-21 03:47:07
Author: olli
Date: 2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
New Revision: 77448
URL: http://svn.boost.org/trac/boost/changeset/77448
Log:
context: remove differentiation between PIC and non-PIC in assembler
Text files modified: 
   trunk/libs/context/src/asm/fcontext_arm_aapcs_elf_gas.S     |    11 -----------                             
   trunk/libs/context/src/asm/fcontext_i386_sysv_elf_gas.S     |    20 +-------------------                    
   trunk/libs/context/src/asm/fcontext_mips32_o32_elf_gas.S    |    12 ------------                            
   trunk/libs/context/src/asm/fcontext_ppc32_sysv_elf_gas.S    |    17 -----------------                       
   trunk/libs/context/src/asm/fcontext_ppc64_sysv_elf_gas.S    |    17 -----------------                       
   trunk/libs/context/src/asm/fcontext_x86_64_sysv_macho_gas.S |    15 ++++++++-------                         
   6 files changed, 9 insertions(+), 83 deletions(-)
Modified: trunk/libs/context/src/asm/fcontext_arm_aapcs_elf_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_arm_aapcs_elf_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_arm_aapcs_elf_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -106,11 +106,7 @@
 
         push    {a1,lr}				@ save pointer to fcontext_t
         mov     a1, a2				@ stack pointer as arg for boost_fcontext_align
-#ifdef __PIC__
         bl		boost_fcontext_align_at_PLT @ align stack
-#else
-	bl		boost_fcontext_align     @ align stack
-#endif
         mov		a2, a1				@ begin of aligned stack 
         pop     {a1,lr}				@ restore pointer to boost_fcontext_t
 
@@ -127,15 +123,8 @@
     mov     a2, v2              @ load the adddress of the next context
     teq     a2, #0              @ test if the address of the next context is a null pointer
 
-#ifdef __PIC__
     bne     boost_fcontext_start_at_PLT   @ install next context
 
     mov     a1, #0
     bl      _exit_at_PLT                  @ exit application
-#else
-    bne     boost_fcontext_start       @ install next context
-
-    mov     a1, #0
-    bl      _exit                      @ exit application
-#endif
 .size boost_fcontext_make,.-boost_fcontext_make
Modified: trunk/libs/context/src/asm/fcontext_i386_sysv_elf_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_i386_sysv_elf_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_i386_sysv_elf_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -89,14 +89,10 @@
     pushl  %eax                         /* save pointer to fcontext_t */
     pushl  %ebx                         /* save EBX */
     pushl  %edx                         /* stack pointer as arg for boost_fcontext_align */
-#ifdef __PIC__
     call   1f
 1:  popl   %ebx                                    /* address of label 1 */
     addl   $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx     /* compute address of GOT and store it in EBX */
     call   boost_fcontext_align_at_PLT     /* align stack */
-#else
-    call   boost_fcontext_align         /* align stack */
-#endif
     movl   %eax,           %edx         /* begin of aligned stack */
     popl   %eax                         /* remove arg for boost_fcontext_align */
     popl   %ebx                         /* restore EBX */
@@ -110,14 +106,10 @@
     movl   %ecx,           0x4(%edx)    /* save the address of the void pointer */
     stmxcsr  0x18(%eax)                 /* save SSE2 control and status word */
     fnstcw   0x1c(%eax)                 /* save x87 control word */
-#ifdef __PIC__
     call    2f
 2:  popl    %ecx                        /* address of label 1 */
     addl    $link_fcontext-2b, %ecx     /* compute address of label link_fcontext */
     movl    %ecx, (%edx)                /* store address of link_fcontext as return address on stack */
-#else
-    movl    $link_fcontext, (%edx)      /* store address of link_fcontext as return address on stack */
-#endif
 
     xorl   %eax,            %eax        /* set EAX to zero */
     ret
@@ -125,30 +117,20 @@
 link_fcontext:
     leal   -0xc(%esp),    %esp
 
-#ifdef  __PIC__
     call    3f
-3:  popl    %ebx                                    /* address of label 2 */
+3:  popl    %ebx                                    /* address of label 3 */
     addl    $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx     /* compute address of GOT and store it in EBX */
-#endif
 
     testl  %esi,           %esi         /* test if a next context was given */
     je     4f                           /* jump to finish */
 
     pushl  %esi                         /* push the address of the next context on the stack */
     pushl  %edi                         /* push the address of the current context to stack */
-#ifdef __PIC__
     call   boost_fcontext_start_at_PLT     /* jump to next context */
-#else
-    call   boost_fcontext_start         /* jump to next context */
-#endif
 
 4:
     movl    %eax,           %eax
     pushl   %eax                        /* exit code is zero */
-#ifdef __PIC__
     call   _exit_at_PLT                    /* exit application */
-#else
-    call   _exit                        /* exit application */
-#endif
     hlt
 .size boost_fcontext_make,.-boost_fcontext_make
Modified: trunk/libs/context/src/asm/fcontext_mips32_o32_elf_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_mips32_o32_elf_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_mips32_o32_elf_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -126,12 +126,8 @@
     sw      $ra, 24($sp)
     sw      $a0, 20($sp)
     move    $a0, $t0            # stack pointer as arg for boost_fcontext_align
-#ifdef __PIC__
     lw      $t9, %call16(boost_fcontext_align)($gp) # align stack
     jalr    $t9
-#else
-    jal     boost_fcontext_align                    # align stack
-#endif
     nop
     move    $t0, $v0            # begin of aligned stack 
     lw      $ra, 24($sp)
@@ -154,20 +150,12 @@
     beqz    $a1, 2f             # test if a next context was given
 
     move    $a0, $s0            # set A0 to address of current context
-#ifdef __PIC__
     lw      $t9, %call16(boost_fcontext_start)($gp)  # install next context
     jr      $t9
-#else
-    j       boost_fcontext_start       # install next context
-#endif
 
 2:
     move    $a0, $zero
-#ifdef __PIC__
     lw      $t9, %call16(_exit)($gp)  # exit application
     jalr    $t9
-#else
-    j       _exit               # exit application
-#endif
 .end boost_fcontext_make
 .size boost_fcontext_make, .-boost_fcontext_make
Modified: trunk/libs/context/src/asm/fcontext_ppc32_sysv_elf_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_ppc32_sysv_elf_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_ppc32_sysv_elf_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -306,11 +306,7 @@
     mflr    %r4                 # load LR
     stw     %r4, 20(%r1)        # store LR on stack
     mr.     %r3, %r0            # context stack as arg to boost_fcontext_algin
-#ifdef __PIC__
     bl      boost_fcontext_align_at_plt    # call boost_fcontext_align
-#else
-    bl      boost_fcontext_align        # call boost_fcontext_align
-#endif
     mr.     %r0, %r3            # load result into R0
     lwz     %r4, 20(%r1)        # pop LR from stack
     mtlr    %r4                 # restore LR
@@ -322,17 +318,12 @@
     stw     %r0, 76(%r3)        # save the stack base
     lwz     %r0, 256(%r3)       # load address of next user context
     stw     %r0, 4(%r3)         # save the next context
-#ifdef __PIC__
     mflr    %r0                 # load LR
     bl      1f                  # jump to label 1
 1:
     mflr    %r4                             # load LR
     addi    %r4, %r4, link_fcontext - 1b    # calulate absolute address of link_fcontext
     mtlr    %r0                             # restore LR
-#else
-   lis     %r4, link_fcontext_at_ha       # get hight address of link_fcontext
-   addi    %r4, %r4, link_fcontext_at_l   # get low address of link_fcontext
-#endif
     stw     %r4, 84(%r3)        # save address of link_fcontext
 
     li      %r3,  0             # set return value to zero
@@ -343,17 +334,9 @@
     mr.     %r4, %r14
     beq     2f                  # test if a next context was given
 
-#ifdef __PIC__
     bl      boost_fcontext_start_at_plt   # install next context
 
 2:
     li      %r3,  0             # set return value to zero
     bl      _exit_at_plt           # exit application
-#else
-    bl      boost_fcontext_start # install next context
-
-2:
-    li      %r3,  0             # set return value to zero
-    bl      _exit               # exit application
-#endif
 .size boost_fcontext_make, .-boost_fcontext_make
Modified: trunk/libs/context/src/asm/fcontext_ppc64_sysv_elf_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_ppc64_sysv_elf_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_ppc64_sysv_elf_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -320,11 +320,7 @@
     mflr    %r4                 # load LR
     stw     %r4, 40(%r1)        # store LR on stack
     mr.     %r3, %r0            # context stack as arg to boost_fcontext_algin
-#ifdef __PIC__
     bl      boost_fcontext_align_at_plt    # call boost_fcontext_align
-#else
-    bl      boost_fcontext_align        # call boost_fcontext_align
-#endif
     mr.     %r0, %r3            # load result into R0
     lwz     %r4, 40(%r1)        # pop LR from stack
     mtlr    %r4                 # restore LR
@@ -336,17 +332,12 @@
     std     %r0, 152(%r3)       # save the stack base
     ld      %r0, 360(%r3)       # load address of next user context
     std     %r0, 8(%r3)         # save the next context
-#ifdef __PIC__
     mflr    %r0                 # load LR
     bl      1f                  # jump to label 1
 1:
     mflr    %r4                             # load LR
     addi    %r4, %r4, link_fcontext - 1b    # calulate absolute address of link_fcontext
     mtlr    %r0                 # restore LR
-#else
-    lis     %r4, link_fcontext_at_ha       # get hight address of link_fcontext
-    addi    %r4, %r4, link_fcontext_at_l   # get low address of link_fcontext
-#endif
     std     %r4, 168(%r3)       # save address of link_fcontext
 
     li      %r3,  0             # set return value to zero
@@ -357,17 +348,9 @@
     mr.     %r4, %r14
     beq     2f                  # test if a next context was given
 
-#ifdef __PIC__
     bl      boost_fcontext_start_at_plt   # install next context
 
 2:
     li      %r3,  0             # set return value to zero
     bl      _exit_at_plt           # exit application
-#else
-    bl      boost_fcontext_start # install next context
-
-2:
-    li      %r3,  0             # set return value to zero
-    bl      _exit               # exit application
-#endif
 .size boost_fcontext_make, .-boost_fcontext_make
Modified: trunk/libs/context/src/asm/fcontext_x86_64_sysv_macho_gas.S
==============================================================================
--- trunk/libs/context/src/asm/fcontext_x86_64_sysv_macho_gas.S	(original)
+++ trunk/libs/context/src/asm/fcontext_x86_64_sysv_macho_gas.S	2012-03-21 03:47:04 EDT (Wed, 21 Mar 2012)
@@ -68,18 +68,18 @@
     movq     (%rsi),      %rbx      /* restore RBX */
     movq     0x8(%rsi),   %r12      /* restore R12 */
     movq     0x10(%rsi),  %r13      /* restore R13 */
-    movq     0x18(%rsi),  %r15      /* restore R14 */
+    movq     0x18(%rsi),  %r14      /* restore R14 */
     movq     0x20(%rsi),  %r15      /* restore R15 */
     movq     0x28(%rsi),  %rbp      /* restore RBP */
 
-    ldmxcsr  0x41(%rsi)             /* restore SSE2 control and status word */
+    ldmxcsr  0x40(%rsi)             /* restore SSE2 control and status word */
     fldcw    0x44(%rsi)             /* restore x87 control word */
 
     movq     %rdx,        %rax      /* use third arg as return value after jump */
 
     movq     0x30(%rsi),  %rsp      /* restore RSP */
     movq     0x38(%rsi),  %rcx      /* fetch the address to return to */
-    movq     %r13,        %rdi      /* restore RDI */
+    movq     %r13,        %rdi      /* restore void pointer as argument */
 
     jmp      *%rcx                  /* indirect jump to context */
 
@@ -103,8 +103,8 @@
     movq   0x58(%rdi),           %rcx       /* load the address of the next context */
     movq   %rcx,                 0x8(%rdi)  /* save the address of next context */
     stmxcsr  0x40(%rdi)                     /* save SSE2 control and status word */
-    fnstcw   0x44(%rdi)                     /* save x87 control word */
-    leaq   link_fcontext(%rip),  %rcx       /* helper code executed after fn() returns */
+    fnstcw 0x44(%rdi)                       /* save x87 control word */
+    leaq   link_fcontext(%rip),  %rcx       /* helper code executed after context function returns */
     movq   %rcx,                 (%rdx)
     xorq   %rax,                 %rax       /* set RAX to zero */
     ret
@@ -115,8 +115,9 @@
     je     1f                               /* jump to finish */
 
     movq   %rbx,               %rdi         /* restore current context */
-    call   _boost_fcontext_start            /* install next context */
+    call   boost_fcontext_start_at_PLT         /* jump to next context */
 
 1:
     xorq    %rdi,              %rdi         /* exit code is zero */
-    call   _exit                            /* exit application */
+    call   _exit_at_PLT                        /* exit application */
+    hlt