]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[librm] Use garbage-collectable section names
authorMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2016 15:40:33 +0000 (15:40 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2016 15:43:33 +0000 (15:43 +0000)
Allow unused sections of librm.o to be removed via --gc-sections.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/transitions/librm.S

index a3b78c7843b3c352ed81847e9a67d326213235cd..6cbc379549016e1c8b5b2708fa4952fb8e9bcb25 100644 (file)
@@ -37,7 +37,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
  * "non absolute segment" error.  This is most probably a bug in gas.
  ****************************************************************************
  */
-       .section ".data16", "aw", @progbits
+       .section ".data16.gdt", "aw", @progbits
        .align 16
 gdt:
 gdtr:          /* The first GDT entry is unused, the GDTR can fit here. */
@@ -89,7 +89,7 @@ gdt_end:
  *   %edi : Physical base of protected-mode code (virt_offset)
  ****************************************************************************
  */
-       .section ".text16", "ax", @progbits
+       .section ".text16.init_librm", "ax", @progbits
        .code16
        .globl init_librm
 init_librm:
@@ -141,7 +141,7 @@ init_librm:
        popl    %eax
        lret
 
-       .section ".text16", "ax", @progbits
+       .section ".text16.set_seg_base", "ax", @progbits
        .code16
 set_seg_base:
 1:     movw    %ax, 2(%bx)
@@ -167,7 +167,7 @@ set_seg_base:
  *
  ****************************************************************************
  */
-       .section ".text16", "ax", @progbits
+       .section ".text16.real_to_prot", "ax", @progbits
        .code16
 real_to_prot:
        /* Enable A20 line */
@@ -219,7 +219,7 @@ real_to_prot:
        orb     $CR0_PE, %al
        movl    %eax, %cr0
        data32 ljmp     $VIRTUAL_CS, $r2p_pmode
-       .section ".text", "ax", @progbits
+       .section ".text.real_to_prot", "ax", @progbits
        .code32
 r2p_pmode:
        /* Set up protected-mode data segments and stack pointer */
@@ -272,7 +272,7 @@ r2p_pmode:
  *
  ****************************************************************************
  */
-       .section ".text", "ax", @progbits
+       .section ".text.prot_to_real", "ax", @progbits
        .code32
 prot_to_real:
        /* Copy real-mode global descriptor table register to RM code segment */
@@ -311,7 +311,7 @@ prot_to_real:
        movw    %ax, %gs
        movw    %ax, %ss
        ljmp    $REAL_CS, $p2r_rmode
-       .section ".text16", "ax", @progbits
+       .section ".text16.prot_to_real", "ax", @progbits
        .code16
 p2r_rmode:
        /* Load real-mode GDT */
@@ -347,12 +347,12 @@ p2r_ljmp_rm_cs:
        .globl rm_cs
        .equ    rm_cs, ( p2r_ljmp_rm_cs + 3 )
 
-       .section ".text16.data", "aw", @progbits
+       .section ".text16.data.rm_ds", "aw", @progbits
        .globl rm_ds
 rm_ds: .word 0
 
        /* Real-mode global and interrupt descriptor table registers */
-       .section ".text16.data", "aw", @progbits
+       .section ".text16.data.rm_gdtr", "aw", @progbits
 rm_gdtr:
        .word 0 /* Limit */
        .long 0 /* Base */
@@ -398,7 +398,7 @@ rm_gdtr:
 #define PC_OFFSET_FUNCTION ( PC_OFFSET_RETADDR + 4 )
 #define PC_OFFSET_END ( PC_OFFSET_FUNCTION + 4 )
 
-       .section ".text16", "ax", @progbits
+       .section ".text16.prot_call", "ax", @progbits
        .code16
        .globl prot_call
 prot_call:
@@ -423,7 +423,7 @@ prot_call:
        movl    $PC_OFFSET_END, %ecx
        pushl   $pc_pmode
        jmp     real_to_prot
-       .section ".text", "ax", @progbits
+       .section ".text.prot_call", "ax", @progbits
        .code32
 pc_pmode:
        /* Call function */
@@ -437,7 +437,7 @@ pc_pmode:
        movl    %esp, %esi
        pushl   $pc_rmode
        jmp     prot_to_real
-       .section ".text16", "ax", @progbits
+       .section ".text16.prot_call", "ax", @progbits
        .code16
 pc_rmode:
        /* Restore registers and flags and return */
@@ -484,7 +484,7 @@ pc_rmode:
 #define RC_OFFSET_FUNCTION ( RC_OFFSET_RETADDR + 4 )
 #define RC_OFFSET_END ( RC_OFFSET_FUNCTION + 4 )
 
-       .section ".text", "ax", @progbits
+       .section ".text.real_call", "ax", @progbits
        .code32
        .globl real_call
 real_call:
@@ -497,7 +497,7 @@ real_call:
        pushl   $rc_rmode
        movl    $rm_default_gdtr_idtr, %esi
        jmp     prot_to_real
-       .section ".text16", "ax", @progbits
+       .section ".text16.real_call", "ax", @progbits
        .code16
 rc_rmode:
        /* Call real-mode function */
@@ -513,7 +513,7 @@ rc_rmode:
        movl    $RC_OFFSET_RETADDR, %ecx
        pushl   $rc_pmode
        jmp     real_to_prot
-       .section ".text", "ax", @progbits
+       .section ".text.real_call", "ax", @progbits
        .code32
 rc_pmode:
        /* Restore registers and return */
@@ -524,11 +524,11 @@ rc_pmode:
        /* Function vector, used because "call xx(%sp)" is not a valid
         * 16-bit expression.
         */
-       .section ".data16", "aw", @progbits
+       .section ".bss16.rc_function", "aw", @nobits
 rc_function:   .word 0, 0
 
        /* Default real-mode global and interrupt descriptor table registers */
-       .section ".data", "aw", @progbits
+       .section ".data.rm_default_gdtr_idtr", "aw", @progbits
 rm_default_gdtr_idtr:
        .word 0         /* Global descriptor table limit */
        .long 0         /* Global descriptor table base */
@@ -542,7 +542,7 @@ rm_default_gdtr_idtr:
  *
  ****************************************************************************
  */
-       .section ".text16", "ax", @progbits
+       .section ".text16.flatten_real_mode", "ax", @progbits
        .code16
        .globl flatten_real_mode
 flatten_real_mode:
@@ -559,7 +559,7 @@ flatten_real_mode:
        /* Return */
        ret
 
-       .section ".text", "ax", @progbits
+       .section ".text.flatten_dummy", "ax", @progbits
        .code32
 flatten_dummy:
        ret
@@ -638,11 +638,15 @@ interrupt_wrapper:
  * to us.
  ****************************************************************************
  */
-       .section ".data", "aw", @progbits
+       .section ".bss.rm_sp", "aw", @nobits
        .globl rm_sp
 rm_sp: .word 0
+
+       .section ".bss.rm_ss", "aw", @nobits
        .globl rm_ss
 rm_ss: .word 0
+
+       .section ".data.pm_esp", "aw", @progbits
 pm_esp:        .long _estack
 
 /****************************************************************************
@@ -654,13 +658,13 @@ pm_esp:   .long _estack
  ****************************************************************************
  */
        /* Internal copies, created by init_librm (which runs in real mode) */
-       .section ".data16", "aw", @progbits
+       .section ".bss16.rm_virt_offset", "aw", @nobits
 rm_virt_offset:        .long 0
 rm_text16:     .long 0
 rm_data16:     .long 0
 
        /* Externally-visible copies, created by real_to_prot */
-       .section ".data", "aw", @progbits
+       .section ".bss.virt_offset", "aw", @nobits
        .globl virt_offset
 virt_offset:   .long 0 
        .globl text16