Kaynağa Gözat

[librm] Use garbage-collectable section names

Allow unused sections of librm.o to be removed via --gc-sections.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 8 yıl önce
ebeveyn
işleme
b1436e0b83
1 değiştirilmiş dosya ile 26 ekleme ve 22 silme
  1. 26
    22
      src/arch/x86/transitions/librm.S

+ 26
- 22
src/arch/x86/transitions/librm.S Dosyayı Görüntüle

@@ -37,7 +37,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
37 37
  * "non absolute segment" error.  This is most probably a bug in gas.
38 38
  ****************************************************************************
39 39
  */
40
-	.section ".data16", "aw", @progbits
40
+	.section ".data16.gdt", "aw", @progbits
41 41
 	.align 16
42 42
 gdt:
43 43
 gdtr:		/* The first GDT entry is unused, the GDTR can fit here. */
@@ -89,7 +89,7 @@ gdt_end:
89 89
  *   %edi : Physical base of protected-mode code (virt_offset)
90 90
  ****************************************************************************
91 91
  */
92
-	.section ".text16", "ax", @progbits
92
+	.section ".text16.init_librm", "ax", @progbits
93 93
 	.code16
94 94
 	.globl init_librm
95 95
 init_librm:
@@ -141,7 +141,7 @@ init_librm:
141 141
 	popl	%eax
142 142
 	lret
143 143
 
144
-	.section ".text16", "ax", @progbits
144
+	.section ".text16.set_seg_base", "ax", @progbits
145 145
 	.code16
146 146
 set_seg_base:
147 147
 1:	movw	%ax, 2(%bx)
@@ -167,7 +167,7 @@ set_seg_base:
167 167
  *
168 168
  ****************************************************************************
169 169
  */
170
-	.section ".text16", "ax", @progbits
170
+	.section ".text16.real_to_prot", "ax", @progbits
171 171
 	.code16
172 172
 real_to_prot:
173 173
 	/* Enable A20 line */
@@ -219,7 +219,7 @@ real_to_prot:
219 219
 	orb	$CR0_PE, %al
220 220
 	movl	%eax, %cr0
221 221
 	data32 ljmp	$VIRTUAL_CS, $r2p_pmode
222
-	.section ".text", "ax", @progbits
222
+	.section ".text.real_to_prot", "ax", @progbits
223 223
 	.code32
224 224
 r2p_pmode:
225 225
 	/* Set up protected-mode data segments and stack pointer */
@@ -272,7 +272,7 @@ r2p_pmode:
272 272
  *
273 273
  ****************************************************************************
274 274
  */
275
-	.section ".text", "ax", @progbits
275
+	.section ".text.prot_to_real", "ax", @progbits
276 276
 	.code32
277 277
 prot_to_real:
278 278
 	/* Copy real-mode global descriptor table register to RM code segment */
@@ -311,7 +311,7 @@ prot_to_real:
311 311
 	movw	%ax, %gs
312 312
 	movw	%ax, %ss
313 313
 	ljmp	$REAL_CS, $p2r_rmode
314
-	.section ".text16", "ax", @progbits
314
+	.section ".text16.prot_to_real", "ax", @progbits
315 315
 	.code16
316 316
 p2r_rmode:
317 317
 	/* Load real-mode GDT */
@@ -347,12 +347,12 @@ p2r_ljmp_rm_cs:
347 347
 	.globl rm_cs
348 348
 	.equ	rm_cs, ( p2r_ljmp_rm_cs + 3 )
349 349
 
350
-	.section ".text16.data", "aw", @progbits
350
+	.section ".text16.data.rm_ds", "aw", @progbits
351 351
 	.globl rm_ds
352 352
 rm_ds:	.word 0
353 353
 
354 354
 	/* Real-mode global and interrupt descriptor table registers */
355
-	.section ".text16.data", "aw", @progbits
355
+	.section ".text16.data.rm_gdtr", "aw", @progbits
356 356
 rm_gdtr:
357 357
 	.word 0 /* Limit */
358 358
 	.long 0 /* Base */
@@ -398,7 +398,7 @@ rm_gdtr:
398 398
 #define PC_OFFSET_FUNCTION ( PC_OFFSET_RETADDR + 4 )
399 399
 #define PC_OFFSET_END ( PC_OFFSET_FUNCTION + 4 )
400 400
 
401
-	.section ".text16", "ax", @progbits
401
+	.section ".text16.prot_call", "ax", @progbits
402 402
 	.code16
403 403
 	.globl prot_call
404 404
 prot_call:
@@ -423,7 +423,7 @@ prot_call:
423 423
 	movl	$PC_OFFSET_END, %ecx
424 424
 	pushl	$pc_pmode
425 425
 	jmp	real_to_prot
426
-	.section ".text", "ax", @progbits
426
+	.section ".text.prot_call", "ax", @progbits
427 427
 	.code32
428 428
 pc_pmode:
429 429
 	/* Call function */
@@ -437,7 +437,7 @@ pc_pmode:
437 437
 	movl	%esp, %esi
438 438
 	pushl	$pc_rmode
439 439
 	jmp	prot_to_real
440
-	.section ".text16", "ax", @progbits
440
+	.section ".text16.prot_call", "ax", @progbits
441 441
 	.code16
442 442
 pc_rmode:
443 443
 	/* Restore registers and flags and return */
@@ -484,7 +484,7 @@ pc_rmode:
484 484
 #define RC_OFFSET_FUNCTION ( RC_OFFSET_RETADDR + 4 )
485 485
 #define RC_OFFSET_END ( RC_OFFSET_FUNCTION + 4 )
486 486
 
487
-	.section ".text", "ax", @progbits
487
+	.section ".text.real_call", "ax", @progbits
488 488
 	.code32
489 489
 	.globl real_call
490 490
 real_call:
@@ -497,7 +497,7 @@ real_call:
497 497
 	pushl	$rc_rmode
498 498
 	movl	$rm_default_gdtr_idtr, %esi
499 499
 	jmp	prot_to_real
500
-	.section ".text16", "ax", @progbits
500
+	.section ".text16.real_call", "ax", @progbits
501 501
 	.code16
502 502
 rc_rmode:
503 503
 	/* Call real-mode function */
@@ -513,7 +513,7 @@ rc_rmode:
513 513
 	movl	$RC_OFFSET_RETADDR, %ecx
514 514
 	pushl	$rc_pmode
515 515
 	jmp	real_to_prot
516
-	.section ".text", "ax", @progbits
516
+	.section ".text.real_call", "ax", @progbits
517 517
 	.code32
518 518
 rc_pmode:
519 519
 	/* Restore registers and return */
@@ -524,11 +524,11 @@ rc_pmode:
524 524
 	/* Function vector, used because "call xx(%sp)" is not a valid
525 525
 	 * 16-bit expression.
526 526
 	 */
527
-	.section ".data16", "aw", @progbits
527
+	.section ".bss16.rc_function", "aw", @nobits
528 528
 rc_function:	.word 0, 0
529 529
 
530 530
 	/* Default real-mode global and interrupt descriptor table registers */
531
-	.section ".data", "aw", @progbits
531
+	.section ".data.rm_default_gdtr_idtr", "aw", @progbits
532 532
 rm_default_gdtr_idtr:
533 533
 	.word 0		/* Global descriptor table limit */
534 534
 	.long 0		/* Global descriptor table base */
@@ -542,7 +542,7 @@ rm_default_gdtr_idtr:
542 542
  *
543 543
  ****************************************************************************
544 544
  */
545
-	.section ".text16", "ax", @progbits
545
+	.section ".text16.flatten_real_mode", "ax", @progbits
546 546
 	.code16
547 547
 	.globl flatten_real_mode
548 548
 flatten_real_mode:
@@ -559,7 +559,7 @@ flatten_real_mode:
559 559
 	/* Return */
560 560
 	ret
561 561
 
562
-	.section ".text", "ax", @progbits
562
+	.section ".text.flatten_dummy", "ax", @progbits
563 563
 	.code32
564 564
 flatten_dummy:
565 565
 	ret
@@ -638,11 +638,15 @@ interrupt_wrapper:
638 638
  * to us.
639 639
  ****************************************************************************
640 640
  */
641
-	.section ".data", "aw", @progbits
641
+	.section ".bss.rm_sp", "aw", @nobits
642 642
 	.globl rm_sp
643 643
 rm_sp:	.word 0
644
+
645
+	.section ".bss.rm_ss", "aw", @nobits
644 646
 	.globl rm_ss
645 647
 rm_ss:	.word 0
648
+
649
+	.section ".data.pm_esp", "aw", @progbits
646 650
 pm_esp:	.long _estack
647 651
 
648 652
 /****************************************************************************
@@ -654,13 +658,13 @@ pm_esp:	.long _estack
654 658
  ****************************************************************************
655 659
  */
656 660
 	/* Internal copies, created by init_librm (which runs in real mode) */
657
-	.section ".data16", "aw", @progbits
661
+	.section ".bss16.rm_virt_offset", "aw", @nobits
658 662
 rm_virt_offset:	.long 0
659 663
 rm_text16:	.long 0
660 664
 rm_data16:	.long 0
661 665
 
662 666
 	/* Externally-visible copies, created by real_to_prot */
663
-	.section ".data", "aw", @progbits
667
+	.section ".bss.virt_offset", "aw", @nobits
664 668
 	.globl virt_offset
665 669
 virt_offset:	.long 0	
666 670
 	.globl text16

Loading…
İptal
Kaydet