AVR/ld: Use .avr.prop data during linker relaxation.
authorAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 8 Jan 2015 22:07:48 +0000 (22:07 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 25 Feb 2015 23:19:11 +0000 (23:19 +0000)
commitbac13f5a4c05ed88d7c4639c37ad01bb7e305419
tree09b0947686793b41a08ba78d766f6a0d6ec6bce3
parent137c83d69fad77677cc818593f9399caa777a0c5
AVR/ld: Use .avr.prop data during linker relaxation.

Make use of the data held within the .avr.prop section during linker
relaxation in order to maintain the properties of the .org and .align
directives.

In relation to the .align directives, if enough bytes are deleted before
a .align directive then the alignment can be moved while still
maintaining the alignment requirement.

bfd/ChangeLog:

* elf32-avr.c (struct elf_avr_section_data): New structure.
(struct avr_relax_info): New structure.
(elf_avr_new_section_hook): New function.
(struct elf_avr_section_data): Add relax_info.
(get_avr_relax_info): New function.
(init_avr_relax_info): New function.
(elf32_avr_relax_delete_bytes): Find next property record before
deleting bytes.  When deleting don't move bytes beyond the next
property record.
(avr_elf32_assign_records_to_section): New function.
(avr_property_record_compare): New function.
(avr_load_all_property_sections): New function.
(elf32_avr_relax_section): Load property data.  After relaxing the
section, move any .align directives that have enough deleted bytes
before them.
(bfd_elf32_new_section_hook): Define.

ld/testsuite/ChangeLog:

* ld-avr/avr-prop-1.d: New file.
* ld-avr/avr-prop-1.s: New file.
* ld-avr/avr-prop-2.d: New file.
* ld-avr/avr-prop-2.s: New file.
* ld-avr/avr-prop-3.d: New file.
* ld-avr/avr-prop-3.s: New file.
* ld-avr/avr-prop-4.d: New file.
* ld-avr/avr-prop-4.s: New file.
bfd/ChangeLog
bfd/elf32-avr.c
ld/testsuite/ChangeLog
ld/testsuite/ld-avr/avr-prop-1.d [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-1.s [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-2.d [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-2.s [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-3.d [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-3.s [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-4.d [new file with mode: 0644]
ld/testsuite/ld-avr/avr-prop-4.s [new file with mode: 0644]