123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /* AVR-specific support for 32-bit ELF.
- Copyright (C) 2006-2015 Free Software Foundation, Inc.
- Written by Bjoern Haase <bjoern.m.haase@web.de>
- This file is part of BFD, the Binary File Descriptor library.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
- /* These four functions will be called from the ld back-end. */
- extern void
- elf32_avr_setup_params (struct bfd_link_info *, bfd *, asection *,
- bfd_boolean, bfd_boolean, bfd_boolean,
- bfd_vma, bfd_boolean);
- extern int
- elf32_avr_setup_section_lists (bfd *, struct bfd_link_info *);
- extern bfd_boolean
- elf32_avr_size_stubs (bfd *, struct bfd_link_info *, bfd_boolean);
- extern bfd_boolean
- elf32_avr_build_stubs (struct bfd_link_info *);
- /* The name of the section into which the property records are stored. */
- #define AVR_PROPERTY_RECORD_SECTION_NAME ".avr.prop"
- /* The current version number for the format of the property records. */
- #define AVR_PROPERTY_RECORDS_VERSION 1
- /* The size of the header that is written to the property record section
- before the property records are written out. */
- #define AVR_PROPERTY_SECTION_HEADER_SIZE 4
- /* This holds a single property record in memory, the structure of this
- data when written out to the ELF section is more compressed. */
- struct avr_property_record
- {
- /* The section and offset for this record. */
- asection *section;
- bfd_vma offset;
- /* The type of this record. */
- enum {
- RECORD_ORG = 0,
- RECORD_ORG_AND_FILL = 1,
- RECORD_ALIGN = 2,
- RECORD_ALIGN_AND_FILL = 3
- } type;
- /* Type specific data. */
- union
- {
- /* RECORD_ORG and RECORD_ORG_AND_FILL. */
- struct
- {
- unsigned long fill;
- } org;
- /* RECORD_ALIGN and RECORD_ALIGN_AND_FILL. */
- struct
- {
- unsigned long bytes;
- unsigned long fill;
- /* This field is used during linker relaxation to track the number of
- bytes that have been opened up before this alignment directive.
- When we have enough bytes available it is possible to move the
- re-align this directive backwards while still maintaining the
- alignment requirement. */
- unsigned long preceding_deleted;
- } align;
- } data;
- };
- struct avr_property_record_list
- {
- /* The version number tells us the structure of the property record data
- within the section. See AVR_PROPERTY_RECORDS_VERSION. */
- bfd_byte version;
- /* The flags field is currently unused. This should be set to 0. */
- bfd_byte flags;
- /* The number of property records. This is stored as a 2-byte value in
- the section contents. */
- unsigned long record_count;
- /* The section from which the property records were loaded. This is the
- actual section containing the records, not the section(s) to which the
- records apply. */
- asection *section;
- /* The actual property records. */
- struct avr_property_record *records;
- };
- /* Load the property records from ABFD, return NULL if there are non
- found, otherwise return pointer to dynamically allocated memory. The
- memory for the header and all of the records are allocated in a single
- block, as such only the header needs to be freed. */
- extern struct avr_property_record_list *avr_elf32_load_property_records (bfd *abfd);
- /* Return a string that is the name of the property record pointed to by REC. */
- extern const char *avr_elf32_property_record_name (struct avr_property_record *rec);
|