binutils-gdb/ld/testsuite/ld-msp430-elf/main-with-data-bss-unique-sec.s
Jozef Lawrynowicz 7ef3addbe1 Improve MSP430 section placement.
ld	* emultempl/msp430.em (change_output_section): New function.
	(move_prefixed_section): New function.
	(add_region_prefix): New function.
	(msp430_elf_after_open): New function.
	(gld${EMULATION_NAME}_add_options): Implement.
	(gld${EMULATION_NAME}_list_options): Implement.
	(gld${EMULATION_NAME}_handle_option): Implement.
	* ld.texinfo: Document new options.
	* testsuite/ld-msp430-elf/main-bss-lower.d: New.
	* testsuite/ld-msp430-elf/main-bss-upper.d: New.
	* testsuite/ld-msp430-elf/main-const-lower.d: New.
	* testsuite/ld-msp430-elf/main-const-upper.d: New.
	* testsuite/ld-msp430-elf/main-text-lower.d: New.
	* testsuite/ld-msp430-elf/main-text-upper.d: New.
	* testsuite/ld-msp430-elf/main-var-lower.d: New.
	* testsuite/ld-msp430-elf/main-var-upper.d: New.
	* testsuite/ld-msp430-elf/main-with-data-bss-unique-sec.s: New.
	* testsuite/ld-msp430-elf/main-with-data-bss.s: New.
	* testsuite/ld-msp430-elf/main-with-text-rodata-unique-sec.s: New.
	* testsuite/ld-msp430-elf/main-with-text-rodata.s: New.
	* testsuite/ld-msp430-elf/msp430-elf.exp: New.
	* testsuite/ld-msp430-elf/msp430-no-lower.ld: New.
	* testsuite/ld-msp430-elf/msp430.ld: New.
	* emultempl/msp430.em (data_statement_size): New.
	(eval_upper_either_sections): New.
	(eval_lower_either_sections): New.
	(intermediate_relax_sections): New.
	(msp430_elf_after_allocation): New.
	* emultempl/msp430.em (gld${EMULATION_NAME}_place_orphan): Always
	place sections in the lower region.

gas	* config/tc-msp430.c (md_parse_option): Define high data and high
	bss symbols if -mdata-region is passed.
	Define -mdata-region open.
	* doc/c-msp430.texi: Document -mdata-region.
	* testsuite/gas/msp430/high-data-bss-sym.d: New test.
	* testsuite/gas/msp430/high-data-bss-sym.s: New.
	* testsuite/gas/msp430/msp430.exp: Add -mdata-region tests.
2017-08-29 17:18:43 +01:00

79 lines
1.3 KiB
ArmAsm

.file "main-with-data-bss.c"
.global glob_var_array
.section .data.glob_var_array,"aw",@progbits
.balign 2
.type glob_var_array, @object
.size glob_var_array, 20
glob_var_array:
.short 0
.short 1
.short 2
.short 3
.short 4
.short 5
.short 6
.short 7
.short 8
.short 9
.section .bss.glob_bss_array,"aw",@nobits
.balign 2
.type glob_bss_array, @object
.size glob_bss_array, 20
glob_bss_array:
.zero 20
.section .text.main,"ax",@progbits
.balign 2
.global main
.type main, @function
main:
; start of function
; framesize_regs: 0
; framesize_locals: 2
; framesize_outgoing: 0
; framesize: 2
; elim ap -> fp 2
; elim fp -> sp 2
; saved regs:(none)
; start of prologue
SUB.W #2, R1
; end of prologue
MOV.W #0, @R1
BR #.L2
.L7:
MOV.W @R1, R12
ADD.W R12, R12
ADD.W #glob_var_array, R12
MOV.W @R12, R13
MOV.W R13, R12
ADD.W R12, R12
ADD.W R13, R12
rpt #2 { rlax.w R12
SUB.W R13, R12
CMP.W #110, R12 { JNE .L3
.L4:
BR #.L4
.L3:
MOV.W @R1, R12
ADD.W R12, R12
ADD.W #glob_bss_array, R12
MOV.W @R12, R13
MOV.W R13, R12
ADD.W R12, R12
ADD.W R13, R12
rpt #2 { rlax.w R12
SUB.W R13, R12
CMP.W #110, R12 { JNE .L5
.L6:
BR #.L6
.L5:
ADD.W #1, @R1
.L2:
MOV.B #9, R12
CMP.W @R1, R12 { JGE .L7
MOV.B #0, R12
; start of epilogue
.refsym __crt0_call_exit
ADD.W #2, R1
RET
.size main, .-main