1 /* ELF object file format
2 Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as
8 published by the Free Software Foundation; either version 2,
9 or (at your option) any later version.
11 GAS is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14 the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GAS; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 #define OBJ_HEADER "obj-elf.h"
26 #ifndef ECOFF_DEBUGGING
27 #define ECOFF_DEBUGGING 0
29 #define NEED_ECOFF_DEBUG
32 #ifdef NEED_ECOFF_DEBUG
37 #include "elf/alpha.h"
48 static bfd_vma elf_s_get_size
PARAMS ((symbolS
*));
49 static void elf_s_set_size
PARAMS ((symbolS
*, bfd_vma
));
50 static bfd_vma elf_s_get_align
PARAMS ((symbolS
*));
51 static void elf_s_set_align
PARAMS ((symbolS
*, bfd_vma
));
52 static void elf_copy_symbol_attributes
PARAMS ((symbolS
*, symbolS
*));
53 static int elf_sec_sym_ok_for_reloc
PARAMS ((asection
*));
54 static void adjust_stab_sections
PARAMS ((bfd
*, asection
*, PTR
));
56 #ifdef NEED_ECOFF_DEBUG
57 static boolean elf_get_extr
PARAMS ((asymbol
*, EXTR
*));
58 static void elf_set_index
PARAMS ((asymbol
*, bfd_size_type
));
61 static void obj_elf_line
PARAMS ((int));
62 void obj_elf_version
PARAMS ((int));
63 static void obj_elf_size
PARAMS ((int));
64 static void obj_elf_type
PARAMS ((int));
65 static void obj_elf_ident
PARAMS ((int));
66 static void obj_elf_weak
PARAMS ((int));
67 static void obj_elf_local
PARAMS ((int));
68 static void obj_elf_common
PARAMS ((int));
69 static void obj_elf_symver
PARAMS ((int));
70 static void obj_elf_vtable_inherit
PARAMS ((int));
71 static void obj_elf_vtable_entry
PARAMS ((int));
72 static void obj_elf_data
PARAMS ((int));
73 static void obj_elf_text
PARAMS ((int));
74 static void obj_elf_subsection
PARAMS ((int));
75 static void obj_elf_popsection
PARAMS ((int));
77 static const pseudo_typeS elf_pseudo_table
[] =
79 {"comm", obj_elf_common
, 0},
80 {"common", obj_elf_common
, 0},
81 {"ident", obj_elf_ident
, 0},
82 {"local", obj_elf_local
, 0},
83 {"previous", obj_elf_previous
, 0},
84 {"section", obj_elf_section
, 0},
85 {"section.s", obj_elf_section
, 0},
86 {"sect", obj_elf_section
, 0},
87 {"sect.s", obj_elf_section
, 0},
88 {"pushsection", obj_elf_section
, 1},
89 {"popsection", obj_elf_popsection
, 0},
90 {"size", obj_elf_size
, 0},
91 {"type", obj_elf_type
, 0},
92 {"version", obj_elf_version
, 0},
93 {"weak", obj_elf_weak
, 0},
95 /* These are used for stabs-in-elf configurations. */
96 {"line", obj_elf_line
, 0},
98 /* This is a GNU extension to handle symbol versions. */
99 {"symver", obj_elf_symver
, 0},
101 /* A GNU extension to change subsection only. */
102 {"subsection", obj_elf_subsection
, 0},
104 /* These are GNU extensions to aid in garbage collecting C++ vtables. */
105 {"vtable_inherit", obj_elf_vtable_inherit
, 0},
106 {"vtable_entry", obj_elf_vtable_entry
, 0},
108 /* These are used for dwarf. */
113 /* We need to trap the section changing calls to handle .previous. */
114 {"data", obj_elf_data
, 0},
115 {"text", obj_elf_text
, 0},
121 static const pseudo_typeS ecoff_debug_pseudo_table
[] =
123 #ifdef NEED_ECOFF_DEBUG
124 /* COFF style debugging information for ECOFF. .ln is not used; .loc
126 { "def", ecoff_directive_def
, 0 },
127 { "dim", ecoff_directive_dim
, 0 },
128 { "endef", ecoff_directive_endef
, 0 },
129 { "file", ecoff_directive_file
, 0 },
130 { "scl", ecoff_directive_scl
, 0 },
131 { "tag", ecoff_directive_tag
, 0 },
132 { "val", ecoff_directive_val
, 0 },
134 /* COFF debugging requires pseudo-ops .size and .type, but ELF
135 already has meanings for those. We use .esize and .etype
136 instead. These are only generated by gcc anyhow. */
137 { "esize", ecoff_directive_size
, 0 },
138 { "etype", ecoff_directive_type
, 0 },
140 /* ECOFF specific debugging information. */
141 { "begin", ecoff_directive_begin
, 0 },
142 { "bend", ecoff_directive_bend
, 0 },
143 { "end", ecoff_directive_end
, 0 },
144 { "ent", ecoff_directive_ent
, 0 },
145 { "fmask", ecoff_directive_fmask
, 0 },
146 { "frame", ecoff_directive_frame
, 0 },
147 { "loc", ecoff_directive_loc
, 0 },
148 { "mask", ecoff_directive_mask
, 0 },
150 /* Other ECOFF directives. */
151 { "extern", ecoff_directive_extern
, 0 },
153 /* These are used on Irix. I don't know how to implement them. */
154 { "alias", s_ignore
, 0 },
155 { "bgnb", s_ignore
, 0 },
156 { "endb", s_ignore
, 0 },
157 { "lab", s_ignore
, 0 },
158 { "noalias", s_ignore
, 0 },
159 { "verstamp", s_ignore
, 0 },
160 { "vreg", s_ignore
, 0 },
163 {NULL
} /* end sentinel */
167 #include "aout/aout64.h"
169 /* This is called when the assembler starts. */
174 /* Add symbols for the known sections to the symbol table. */
175 symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput
,
176 TEXT_SECTION_NAME
)));
177 symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput
,
178 DATA_SECTION_NAME
)));
179 symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput
,
186 pop_insert (elf_pseudo_table
);
188 pop_insert (ecoff_debug_pseudo_table
);
195 return S_GET_SIZE (sym
);
199 elf_s_set_size (sym
, sz
)
203 S_SET_SIZE (sym
, sz
);
207 elf_s_get_align (sym
)
210 return S_GET_ALIGN (sym
);
214 elf_s_set_align (sym
, align
)
218 S_SET_ALIGN (sym
, align
);
222 elf_copy_symbol_attributes (dest
, src
)
225 OBJ_COPY_SYMBOL_ATTRIBUTES (dest
, src
);
229 elf_sec_sym_ok_for_reloc (sec
)
232 return obj_sec_sym_ok_for_reloc (sec
);
241 sym
= symbol_new (s
, absolute_section
, (valueT
) 0, (struct frag
*) 0);
242 symbol_set_frag (sym
, &zero_address_frag
);
243 symbol_get_bfdsym (sym
)->flags
|= BSF_FILE
;
245 if (symbol_rootP
!= sym
)
247 symbol_remove (sym
, &symbol_rootP
, &symbol_lastP
);
248 symbol_insert (sym
, symbol_rootP
, &symbol_rootP
, &symbol_lastP
);
250 verify_symbol_chain (symbol_rootP
, symbol_lastP
);
254 #ifdef NEED_ECOFF_DEBUG
260 obj_elf_common (ignore
)
270 name
= input_line_pointer
;
271 c
= get_symbol_end ();
272 /* just after name is now '\0' */
273 p
= input_line_pointer
;
276 if (*input_line_pointer
!= ',')
278 as_bad (_("Expected comma after symbol-name"));
279 ignore_rest_of_line ();
282 input_line_pointer
++; /* skip ',' */
283 if ((temp
= get_absolute_expression ()) < 0)
285 as_bad (_(".COMMon length (%d.) <0! Ignored."), temp
);
286 ignore_rest_of_line ();
291 symbolP
= symbol_find_or_make (name
);
293 if (S_IS_DEFINED (symbolP
) && ! S_IS_COMMON (symbolP
))
295 as_bad (_("Ignoring attempt to re-define symbol"));
296 ignore_rest_of_line ();
299 if (S_GET_VALUE (symbolP
) != 0)
301 if (S_GET_VALUE (symbolP
) != size
)
303 as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %d."),
304 S_GET_NAME (symbolP
), (long) S_GET_VALUE (symbolP
), size
);
307 know (symbolP
->sy_frag
== &zero_address_frag
);
308 if (*input_line_pointer
!= ',')
313 input_line_pointer
++;
316 if (! have_align
|| *input_line_pointer
!= '"')
322 temp
= get_absolute_expression ();
326 as_warn (_("Common alignment negative; 0 assumed"));
329 if (symbol_get_obj (symbolP
)->local
)
338 old_subsec
= now_subseg
;
341 /* convert to a power of 2 alignment */
342 for (align
= 0; (temp
& 1) == 0; temp
>>= 1, ++align
);
345 as_bad (_("Common alignment not a power of 2"));
346 ignore_rest_of_line ();
352 record_alignment (bss_section
, align
);
353 subseg_set (bss_section
, 0);
355 frag_align (align
, 0, 0);
356 if (S_GET_SEGMENT (symbolP
) == bss_section
)
357 symbol_get_frag (symbolP
)->fr_symbol
= 0;
358 symbol_set_frag (symbolP
, frag_now
);
359 pfrag
= frag_var (rs_org
, 1, 1, (relax_substateT
) 0, symbolP
,
360 (offsetT
) size
, (char *) 0);
362 S_SET_SIZE (symbolP
, size
);
363 S_SET_SEGMENT (symbolP
, bss_section
);
364 S_CLEAR_EXTERNAL (symbolP
);
365 subseg_set (old_sec
, old_subsec
);
370 S_SET_VALUE (symbolP
, (valueT
) size
);
371 S_SET_ALIGN (symbolP
, temp
);
372 S_SET_EXTERNAL (symbolP
);
373 S_SET_SEGMENT (symbolP
, bfd_com_section_ptr
);
378 input_line_pointer
++;
379 /* @@ Some use the dot, some don't. Can we get some consistency?? */
380 if (*input_line_pointer
== '.')
381 input_line_pointer
++;
382 /* @@ Some say data, some say bss. */
383 if (strncmp (input_line_pointer
, "bss\"", 4)
384 && strncmp (input_line_pointer
, "data\"", 5))
386 while (*--input_line_pointer
!= '"')
388 input_line_pointer
--;
389 goto bad_common_segment
;
391 while (*input_line_pointer
++ != '"')
393 goto allocate_common
;
396 symbol_get_bfdsym (symbolP
)->flags
|= BSF_OBJECT
;
398 demand_empty_rest_of_line ();
403 p
= input_line_pointer
;
404 while (*p
&& *p
!= '\n')
408 as_bad (_("bad .common segment %s"), input_line_pointer
+ 1);
410 input_line_pointer
= p
;
411 ignore_rest_of_line ();
417 obj_elf_local (ignore
)
426 name
= input_line_pointer
;
427 c
= get_symbol_end ();
428 symbolP
= symbol_find_or_make (name
);
429 *input_line_pointer
= c
;
431 S_CLEAR_EXTERNAL (symbolP
);
432 symbol_get_obj (symbolP
)->local
= 1;
435 input_line_pointer
++;
437 if (*input_line_pointer
== '\n')
442 demand_empty_rest_of_line ();
446 obj_elf_weak (ignore
)
455 name
= input_line_pointer
;
456 c
= get_symbol_end ();
457 symbolP
= symbol_find_or_make (name
);
458 *input_line_pointer
= c
;
460 S_SET_WEAK (symbolP
);
461 symbol_get_obj (symbolP
)->local
= 1;
464 input_line_pointer
++;
466 if (*input_line_pointer
== '\n')
471 demand_empty_rest_of_line ();
474 static segT previous_section
;
475 static int previous_subsection
;
479 struct section_stack
*next
;
481 int subseg
, prev_subseg
;
484 static struct section_stack
*section_stack
;
487 /* Handle the .section pseudo-op. This code supports two different
490 The first is found on Solaris, and looks like
491 .section ".sec1",#alloc,#execinstr,#write
492 Here the names after '#' are the SHF_* flags to turn on for the
493 section. I'm not sure how it determines the SHT_* type (BFD
494 doesn't really give us control over the type, anyhow).
496 The second format is found on UnixWare, and probably most SVR4
497 machines, and looks like
498 .section .sec1,"a",@progbits
499 The quoted string may contain any combination of a, w, x, and
500 represents the SHF_* flags to turn on for the section. The string
501 beginning with '@' can be progbits or nobits. There should be
502 other possibilities, but I don't know what they are. In any case,
503 BFD doesn't really let us set the section type. */
505 /* Certain named sections have particular defined types, listed on p.
507 struct special_section
514 static struct special_section
const special_sections
[] =
516 { ".bss", SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
},
517 { ".comment", SHT_PROGBITS
, 0 },
518 { ".data", SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
},
519 { ".data1", SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
},
520 { ".debug", SHT_PROGBITS
, 0 },
521 { ".fini", SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
522 { ".init", SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
523 { ".line", SHT_PROGBITS
, 0 },
524 { ".note", SHT_NOTE
, 0 },
525 { ".rodata", SHT_PROGBITS
, SHF_ALLOC
},
526 { ".rodata1", SHT_PROGBITS
, SHF_ALLOC
},
527 { ".text", SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
529 #ifdef ELF_TC_SPECIAL_SECTIONS
530 ELF_TC_SPECIAL_SECTIONS
534 /* The following section names are special, but they can not
535 reasonably appear in assembler code. Some of the attributes are
536 processor dependent. */
537 { ".dynamic", SHT_DYNAMIC
, SHF_ALLOC
/* + SHF_WRITE */ },
538 { ".dynstr", SHT_STRTAB
, SHF_ALLOC
},
539 { ".dynsym", SHT_DYNSYM
, SHF_ALLOC
},
540 { ".got", SHT_PROGBITS
, 0 },
541 { ".hash", SHT_HASH
, SHF_ALLOC
},
542 { ".interp", SHT_PROGBITS
, /* SHF_ALLOC */ },
543 { ".plt", SHT_PROGBITS
, 0 },
544 { ".shstrtab",SHT_STRTAB
, 0 },
545 { ".strtab", SHT_STRTAB
, /* SHF_ALLOC */ },
546 { ".symtab", SHT_SYMTAB
, /* SHF_ALLOC */ },
553 obj_elf_change_section (name
, type
, attr
, push
)
555 int type
, attr
, push
;
560 #ifdef md_flush_pending_output
561 md_flush_pending_output ();
564 /* Switch to the section, creating it if necessary. */
567 struct section_stack
*elt
;
568 elt
= xmalloc (sizeof (struct section_stack
));
569 elt
->next
= section_stack
;
571 elt
->prev_seg
= previous_section
;
572 elt
->subseg
= now_subseg
;
573 elt
->prev_subseg
= previous_subsection
;
576 previous_section
= now_seg
;
577 previous_subsection
= now_subseg
;
579 new_sec
= bfd_get_section_by_name (stdoutput
, name
) == NULL
;
580 sec
= subseg_new (name
, 0);
588 /* See if this is one of the special sections. */
589 for (i
= 0; special_sections
[i
].name
!= NULL
; i
++)
590 if (strcmp (name
, special_sections
[i
].name
) == 0)
592 if (type
== SHT_NULL
)
593 type
= special_sections
[i
].type
;
594 else if (type
!= special_sections
[i
].type
)
595 as_warn (_("Setting incorrect section type for %s"), name
);
597 if ((attr
&~ special_sections
[i
].attributes
) != 0)
599 /* As a GNU extension, we permit a .note section to be
600 allocatable. If the linker sees an allocateable .note
601 section, it will create a PT_NOTE segment in the output
603 if (strcmp (name
, ".note") != 0
604 || attr
!= SHF_ALLOC
)
605 as_warn (_("Setting incorrect section attributes for %s"),
608 attr
|= special_sections
[i
].attributes
;
612 /* Convert ELF type and flags to BFD flags. */
614 | ((attr
& SHF_WRITE
) ? 0 : SEC_READONLY
)
615 | ((attr
& SHF_ALLOC
) ? SEC_ALLOC
: 0)
616 | (((attr
& SHF_ALLOC
) && type
!= SHT_NOBITS
) ? SEC_LOAD
: 0)
617 | ((attr
& SHF_EXECINSTR
) ? SEC_CODE
: 0));
618 #ifdef md_elf_section_flags
619 flags
= md_elf_section_flags (flags
, attr
, type
);
622 /* Prevent SEC_HAS_CONTENTS from being inadvertently set. */
623 if (type
== SHT_NOBITS
)
624 seg_info (sec
)->bss
= 1;
626 bfd_set_section_flags (stdoutput
, sec
, flags
);
628 /* Add a symbol for this section to the symbol table. */
629 secsym
= symbol_find (name
);
631 symbol_set_bfdsym (secsym
, sec
->symbol
);
633 symbol_table_insert (section_symbol (sec
));
636 #ifdef md_elf_section_change_hook
637 md_elf_section_change_hook ();
642 obj_elf_parse_section_letters (str
, len
)
659 attr
|= SHF_EXECINSTR
;
663 char *bad_msg
= _("Unrecognized .section attribute: want a,w,x");
664 #ifdef md_elf_section_letter
665 int md_attr
= md_elf_section_letter (*str
, &bad_msg
);
684 obj_elf_section_word (str
, len
)
688 if (len
== 5 && strncmp (str
, "write", 5) == 0)
690 if (len
== 5 && strncmp (str
, "alloc", 5) == 0)
692 if (len
== 9 && strncmp (str
, "execinstr", 9) == 0)
693 return SHF_EXECINSTR
;
695 #ifdef md_elf_section_word
697 int md_attr
= md_elf_section_word (str
, len
);
703 as_warn (_("Unrecognized section attribute"));
708 obj_elf_section_type (str
, len
)
712 if (len
== 8 && strncmp (str
, "progbits", 8) == 0)
714 if (len
== 6 && strncmp (str
, "nobits", 6) == 0)
717 #ifdef md_elf_section_type
719 int md_type
= md_elf_section_type (str
, len
);
725 as_warn (_("Unrecognized section type"));
730 obj_elf_section (push
)
733 char *name
, *beg
, *end
;
734 int type
, attr
, dummy
;
740 #ifdef md_flush_pending_output
741 md_flush_pending_output ();
744 previous_section
= now_seg
;
745 previous_subsection
= now_subseg
;
747 s_mri_sect (&mri_type
);
749 #ifdef md_elf_section_change_hook
750 md_elf_section_change_hook ();
756 /* Get name of section. */
758 if (*input_line_pointer
== '"')
760 name
= demand_copy_C_string (&dummy
);
763 ignore_rest_of_line ();
769 end
= input_line_pointer
;
770 while (0 == strchr ("\n\t,; ", *end
))
772 if (end
== input_line_pointer
)
774 as_warn (_("Missing section name"));
775 ignore_rest_of_line ();
779 name
= xmalloc (end
- input_line_pointer
+ 1);
780 memcpy (name
, input_line_pointer
, end
- input_line_pointer
);
781 name
[end
- input_line_pointer
] = '\0';
782 input_line_pointer
= end
;
789 if (*input_line_pointer
== ',')
791 /* Skip the comma. */
792 ++input_line_pointer
;
795 if (*input_line_pointer
== '"')
797 beg
= demand_copy_C_string (&dummy
);
800 ignore_rest_of_line ();
803 attr
|= obj_elf_parse_section_letters (beg
, strlen (beg
));
807 if (*input_line_pointer
== ',')
810 ++input_line_pointer
;
812 c
= *input_line_pointer
;
815 beg
= demand_copy_C_string (&dummy
);
818 ignore_rest_of_line ();
821 type
= obj_elf_section_type (beg
, strlen (beg
));
824 else if (c
== '@' || c
== '%')
826 beg
= ++input_line_pointer
;
827 c
= get_symbol_end ();
828 *input_line_pointer
= c
;
829 type
= obj_elf_section_type (beg
, input_line_pointer
- beg
);
840 if (*input_line_pointer
!= '#')
842 as_warn (_("Bad .section directive - character following name is not '#'"));
843 ignore_rest_of_line ();
846 beg
= ++input_line_pointer
;
847 c
= get_symbol_end ();
848 *input_line_pointer
= c
;
850 attr
|= obj_elf_section_word (beg
, input_line_pointer
- beg
);
854 while (*input_line_pointer
++ == ',');
855 --input_line_pointer
;
859 demand_empty_rest_of_line ();
861 obj_elf_change_section (name
, type
, attr
, push
);
864 /* Change to the .data section. */
870 #ifdef md_flush_pending_output
871 md_flush_pending_output ();
874 previous_section
= now_seg
;
875 previous_subsection
= now_subseg
;
878 #ifdef md_elf_section_change_hook
879 md_elf_section_change_hook ();
883 /* Change to the .text section. */
889 #ifdef md_flush_pending_output
890 md_flush_pending_output ();
893 previous_section
= now_seg
;
894 previous_subsection
= now_subseg
;
897 #ifdef md_elf_section_change_hook
898 md_elf_section_change_hook ();
903 obj_elf_subsection (ignore
)
908 #ifdef md_flush_pending_output
909 md_flush_pending_output ();
912 previous_section
= now_seg
;
913 previous_subsection
= now_subseg
;
915 temp
= get_absolute_expression ();
916 subseg_set (now_seg
, (subsegT
) temp
);
917 demand_empty_rest_of_line ();
919 #ifdef md_elf_section_change_hook
920 md_elf_section_change_hook ();
924 /* This can be called from the processor backends if they change
928 obj_elf_section_change_hook ()
930 previous_section
= now_seg
;
931 previous_subsection
= now_subseg
;
935 obj_elf_previous (ignore
)
941 if (previous_section
== 0)
943 as_bad (_(".previous without corresponding .section; ignored"));
947 #ifdef md_flush_pending_output
948 md_flush_pending_output ();
951 new_section
= previous_section
;
952 new_subsection
= previous_subsection
;
953 previous_section
= now_seg
;
954 previous_subsection
= now_subseg
;
955 subseg_set (new_section
, new_subsection
);
957 #ifdef md_elf_section_change_hook
958 md_elf_section_change_hook ();
963 obj_elf_popsection (xxx
)
966 struct section_stack
*top
= section_stack
;
970 as_bad (_(".popsection without corresponding .pushsection; ignored"));
974 #ifdef md_flush_pending_output
975 md_flush_pending_output ();
978 section_stack
= top
->next
;
979 previous_section
= top
->prev_seg
;
980 previous_subsection
= top
->prev_subseg
;
981 subseg_set (top
->seg
, top
->subseg
);
984 #ifdef md_elf_section_change_hook
985 md_elf_section_change_hook ();
990 obj_elf_line (ignore
)
993 /* Assume delimiter is part of expression. BSD4.2 as fails with
994 delightful bug, so we are not being incompatible here. */
995 new_logical_line ((char *) NULL
, (int) (get_absolute_expression ()));
996 demand_empty_rest_of_line ();
999 /* This handles the .symver pseudo-op, which is used to specify a
1000 symbol version. The syntax is ``.symver NAME,SYMVERNAME''.
1001 SYMVERNAME may contain ELF_VER_CHR ('@') characters. This
1002 pseudo-op causes the assembler to emit a symbol named SYMVERNAME
1003 with the same value as the symbol NAME. */
1006 obj_elf_symver (ignore
)
1013 name
= input_line_pointer
;
1014 c
= get_symbol_end ();
1016 sym
= symbol_find_or_make (name
);
1018 *input_line_pointer
= c
;
1020 if (symbol_get_obj (sym
)->versioned_name
!= NULL
)
1022 as_bad (_("multiple .symver directives for symbol `%s'"),
1024 ignore_rest_of_line ();
1029 if (*input_line_pointer
!= ',')
1031 as_bad (_("expected comma after name in .symver"));
1032 ignore_rest_of_line ();
1036 ++input_line_pointer
;
1037 name
= input_line_pointer
;
1040 c
= get_symbol_end ();
1041 if (c
!= ELF_VER_CHR
)
1043 *input_line_pointer
++ = c
;
1046 symbol_get_obj (sym
)->versioned_name
= xstrdup (name
);
1048 *input_line_pointer
= c
;
1050 if (strchr (symbol_get_obj (sym
)->versioned_name
, ELF_VER_CHR
) == NULL
)
1052 as_bad (_("missing version name in `%s' for symbol `%s'"),
1053 symbol_get_obj (sym
)->versioned_name
, S_GET_NAME (sym
));
1054 ignore_rest_of_line ();
1058 demand_empty_rest_of_line ();
1061 /* This handles the .vtable_inherit pseudo-op, which is used to indicate
1062 to the linker the hierarchy in which a particular table resides. The
1063 syntax is ".vtable_inherit CHILDNAME, PARENTNAME". */
1066 obj_elf_vtable_inherit (ignore
)
1068 char *cname
, *pname
;
1069 symbolS
*csym
, *psym
;
1072 if (*input_line_pointer
== '#')
1073 ++input_line_pointer
;
1075 cname
= input_line_pointer
;
1076 c
= get_symbol_end ();
1077 csym
= symbol_find (cname
);
1079 /* GCFIXME: should check that we don't have two .vtable_inherits for
1080 the same child symbol. Also, we can currently only do this if the
1081 child symbol is already exists and is placed in a fragment. */
1083 if (csym
== NULL
|| symbol_get_frag (csym
) == NULL
)
1085 as_bad ("expected `%s' to have already been set for .vtable_inherit",
1090 *input_line_pointer
= c
;
1093 if (*input_line_pointer
!= ',')
1095 as_bad ("expected comma after name in .vtable_inherit");
1096 ignore_rest_of_line ();
1100 ++input_line_pointer
;
1103 if (*input_line_pointer
== '#')
1104 ++input_line_pointer
;
1106 if (input_line_pointer
[0] == '0'
1107 && (input_line_pointer
[1] == '\0'
1108 || isspace ((unsigned char) input_line_pointer
[1])))
1110 psym
= section_symbol (absolute_section
);
1111 ++input_line_pointer
;
1115 pname
= input_line_pointer
;
1116 c
= get_symbol_end ();
1117 psym
= symbol_find_or_make (pname
);
1118 *input_line_pointer
= c
;
1121 demand_empty_rest_of_line ();
1126 assert (symbol_get_value_expression (csym
)->X_op
== O_constant
);
1127 fix_new (symbol_get_frag (csym
),
1128 symbol_get_value_expression (csym
)->X_add_number
, 0, psym
, 0, 0,
1129 BFD_RELOC_VTABLE_INHERIT
);
1132 /* This handles the .vtable_entry pseudo-op, which is used to indicate
1133 to the linker that a vtable slot was used. The syntax is
1134 ".vtable_entry tablename, offset". */
1137 obj_elf_vtable_entry (ignore
)
1144 if (*input_line_pointer
== '#')
1145 ++input_line_pointer
;
1147 name
= input_line_pointer
;
1148 c
= get_symbol_end ();
1149 sym
= symbol_find_or_make (name
);
1150 *input_line_pointer
= c
;
1153 if (*input_line_pointer
!= ',')
1155 as_bad ("expected comma after name in .vtable_entry");
1156 ignore_rest_of_line ();
1160 ++input_line_pointer
;
1161 if (*input_line_pointer
== '#')
1162 ++input_line_pointer
;
1164 offset
= get_absolute_expression ();
1166 fix_new (frag_now
, frag_now_fix (), 0, sym
, offset
, 0,
1167 BFD_RELOC_VTABLE_ENTRY
);
1169 demand_empty_rest_of_line ();
1173 obj_read_begin_hook ()
1175 #ifdef NEED_ECOFF_DEBUG
1176 if (ECOFF_DEBUGGING
)
1177 ecoff_read_begin_hook ();
1182 obj_symbol_new_hook (symbolP
)
1185 struct elf_obj_sy
*sy_obj
;
1187 sy_obj
= symbol_get_obj (symbolP
);
1188 sy_obj
->size
= NULL
;
1189 sy_obj
->versioned_name
= NULL
;
1191 #ifdef NEED_ECOFF_DEBUG
1192 if (ECOFF_DEBUGGING
)
1193 ecoff_symbol_new_hook (symbolP
);
1198 obj_elf_version (ignore
)
1205 asection
*seg
= now_seg
;
1206 subsegT subseg
= now_subseg
;
1207 Elf_Internal_Note i_note
;
1208 Elf_External_Note e_note
;
1209 asection
*note_secp
= (asection
*) NULL
;
1213 if (*input_line_pointer
== '\"')
1215 ++input_line_pointer
; /* -> 1st char of string. */
1216 name
= input_line_pointer
;
1218 while (is_a_char (c
= next_char_of_string ()))
1220 c
= *input_line_pointer
;
1221 *input_line_pointer
= '\0';
1222 *(input_line_pointer
- 1) = '\0';
1223 *input_line_pointer
= c
;
1225 /* create the .note section */
1227 note_secp
= subseg_new (".note", 0);
1228 bfd_set_section_flags (stdoutput
,
1230 SEC_HAS_CONTENTS
| SEC_READONLY
);
1232 /* process the version string */
1234 len
= strlen (name
);
1236 i_note
.namesz
= ((len
+ 1) + 3) & ~3; /* round this to word boundary */
1237 i_note
.descsz
= 0; /* no description */
1238 i_note
.type
= NT_VERSION
;
1239 p
= frag_more (sizeof (e_note
.namesz
));
1240 md_number_to_chars (p
, (valueT
) i_note
.namesz
, 4);
1241 p
= frag_more (sizeof (e_note
.descsz
));
1242 md_number_to_chars (p
, (valueT
) i_note
.descsz
, 4);
1243 p
= frag_more (sizeof (e_note
.type
));
1244 md_number_to_chars (p
, (valueT
) i_note
.type
, 4);
1246 for (i
= 0; i
< len
; i
++)
1250 FRAG_APPEND_1_CHAR (ch
);
1253 frag_align (2, 0, 0);
1255 subseg_set (seg
, subseg
);
1259 as_bad (_("Expected quoted string"));
1261 demand_empty_rest_of_line ();
1265 obj_elf_size (ignore
)
1268 char *name
= input_line_pointer
;
1269 char c
= get_symbol_end ();
1274 p
= input_line_pointer
;
1277 if (*input_line_pointer
!= ',')
1280 as_bad (_("expected comma after name `%s' in .size directive"), name
);
1282 ignore_rest_of_line ();
1285 input_line_pointer
++;
1287 if (exp
.X_op
== O_absent
)
1289 as_bad (_("missing expression in .size directive"));
1290 exp
.X_op
= O_constant
;
1291 exp
.X_add_number
= 0;
1294 sym
= symbol_find_or_make (name
);
1296 if (exp
.X_op
== O_constant
)
1297 S_SET_SIZE (sym
, exp
.X_add_number
);
1300 symbol_get_obj (sym
)->size
=
1301 (expressionS
*) xmalloc (sizeof (expressionS
));
1302 *symbol_get_obj (sym
)->size
= exp
;
1304 demand_empty_rest_of_line ();
1307 /* Handle the ELF .type pseudo-op. This sets the type of a symbol.
1308 There are four syntaxes:
1310 The first (used on Solaris) is
1312 The second (used on UnixWare) is
1314 The third (reportedly to be used on Irix 6.0) is
1316 The fourth (used on NetBSD/Arm and Linux/ARM) is
1321 obj_elf_type (ignore
)
1327 const char *typename
;
1330 name
= input_line_pointer
;
1331 c
= get_symbol_end ();
1332 sym
= symbol_find_or_make (name
);
1333 *input_line_pointer
= c
;
1336 if (*input_line_pointer
== ',')
1337 ++input_line_pointer
;
1340 if ( *input_line_pointer
== '#'
1341 || *input_line_pointer
== '@'
1342 || *input_line_pointer
== '%')
1343 ++input_line_pointer
;
1345 typename
= input_line_pointer
;
1346 c
= get_symbol_end ();
1349 if (strcmp (typename
, "function") == 0
1350 || strcmp (typename
, "STT_FUNC") == 0)
1351 type
= BSF_FUNCTION
;
1352 else if (strcmp (typename
, "object") == 0
1353 || strcmp (typename
, "STT_OBJECT") == 0)
1356 as_bad (_("ignoring unrecognized symbol type \"%s\""), typename
);
1358 *input_line_pointer
= c
;
1360 symbol_get_bfdsym (sym
)->flags
|= type
;
1362 demand_empty_rest_of_line ();
1366 obj_elf_ident (ignore
)
1369 static segT comment_section
;
1370 segT old_section
= now_seg
;
1371 int old_subsection
= now_subseg
;
1373 if (!comment_section
)
1376 comment_section
= subseg_new (".comment", 0);
1377 bfd_set_section_flags (stdoutput
, comment_section
,
1378 SEC_READONLY
| SEC_HAS_CONTENTS
);
1383 subseg_set (comment_section
, 0);
1385 subseg_set (old_section
, old_subsection
);
1388 #ifdef INIT_STAB_SECTION
1390 /* The first entry in a .stabs section is special. */
1393 obj_elf_init_stab_section (seg
)
1399 unsigned int stroff
;
1401 /* Force the section to align to a longword boundary. Without this,
1402 UnixWare ar crashes. */
1403 bfd_set_section_alignment (stdoutput
, seg
, 2);
1405 /* Make space for this first symbol. */
1409 as_where (&file
, (unsigned int *) NULL
);
1410 stabstr_name
= (char *) alloca (strlen (segment_name (seg
)) + 4);
1411 strcpy (stabstr_name
, segment_name (seg
));
1412 strcat (stabstr_name
, "str");
1413 stroff
= get_stab_string_offset (file
, stabstr_name
);
1415 md_number_to_chars (p
, stroff
, 4);
1416 seg_info (seg
)->stabu
.p
= p
;
1421 /* Fill in the counts in the first entry in a .stabs section. */
1424 adjust_stab_sections (abfd
, sec
, xxx
)
1434 if (strncmp (".stab", sec
->name
, 5))
1436 if (!strcmp ("str", sec
->name
+ strlen (sec
->name
) - 3))
1439 name
= (char *) alloca (strlen (sec
->name
) + 4);
1440 strcpy (name
, sec
->name
);
1441 strcat (name
, "str");
1442 strsec
= bfd_get_section_by_name (abfd
, name
);
1444 strsz
= bfd_section_size (abfd
, strsec
);
1447 nsyms
= bfd_section_size (abfd
, sec
) / 12 - 1;
1449 p
= seg_info (sec
)->stabu
.p
;
1452 bfd_h_put_16 (abfd
, (bfd_vma
) nsyms
, (bfd_byte
*) p
+ 6);
1453 bfd_h_put_32 (abfd
, (bfd_vma
) strsz
, (bfd_byte
*) p
+ 8);
1456 #ifdef NEED_ECOFF_DEBUG
1458 /* This function is called by the ECOFF code. It is supposed to
1459 record the external symbol information so that the backend can
1460 write it out correctly. The ELF backend doesn't actually handle
1461 this at the moment, so we do it ourselves. We save the information
1465 elf_ecoff_set_ext (sym
, ext
)
1467 struct ecoff_extr
*ext
;
1469 symbol_get_bfdsym (sym
)->udata
.p
= (PTR
) ext
;
1472 /* This function is called by bfd_ecoff_debug_externals. It is
1473 supposed to *EXT to the external symbol information, and return
1474 whether the symbol should be used at all. */
1477 elf_get_extr (sym
, ext
)
1481 if (sym
->udata
.p
== NULL
)
1483 *ext
= *(EXTR
*) sym
->udata
.p
;
1487 /* This function is called by bfd_ecoff_debug_externals. It has
1488 nothing to do for ELF. */
1492 elf_set_index (sym
, indx
)
1498 #endif /* NEED_ECOFF_DEBUG */
1501 elf_frob_symbol (symp
, puntp
)
1505 struct elf_obj_sy
*sy_obj
;
1507 #ifdef NEED_ECOFF_DEBUG
1508 if (ECOFF_DEBUGGING
)
1509 ecoff_frob_symbol (symp
);
1512 sy_obj
= symbol_get_obj (symp
);
1514 if (sy_obj
->size
!= NULL
)
1516 switch (sy_obj
->size
->X_op
)
1520 (S_GET_VALUE (sy_obj
->size
->X_add_symbol
)
1521 + sy_obj
->size
->X_add_number
1522 - S_GET_VALUE (sy_obj
->size
->X_op_symbol
)));
1526 (S_GET_VALUE (sy_obj
->size
->X_add_symbol
)
1527 + sy_obj
->size
->X_add_number
));
1530 as_bad (_(".size expression too complicated to fix up"));
1533 free (sy_obj
->size
);
1534 sy_obj
->size
= NULL
;
1537 if (sy_obj
->versioned_name
!= NULL
)
1539 /* This symbol was given a new name with the .symver directive.
1541 If this is an external reference, just rename the symbol to
1542 include the version string. This will make the relocs be
1543 against the correct versioned symbol.
1545 If this is a definition, add an alias. FIXME: Using an alias
1546 will permit the debugging information to refer to the right
1547 symbol. However, it's not clear whether it is the best
1550 if (! S_IS_DEFINED (symp
))
1554 /* Verify that the name isn't using the @@ syntax--this is
1555 reserved for definitions of the default version to link
1557 p
= strchr (sy_obj
->versioned_name
, ELF_VER_CHR
);
1559 if (p
[1] == ELF_VER_CHR
)
1561 as_bad (_("invalid attempt to declare external version name as default in symbol `%s'"),
1562 sy_obj
->versioned_name
);
1565 S_SET_NAME (symp
, sy_obj
->versioned_name
);
1571 /* FIXME: Creating a new symbol here is risky. We're in the
1572 final loop over the symbol table. We can get away with
1573 it only because the symbol goes to the end of the list,
1574 where the loop will still see it. It would probably be
1575 better to do this in obj_frob_file_before_adjust. */
1577 symp2
= symbol_find_or_make (sy_obj
->versioned_name
);
1579 /* Now we act as though we saw symp2 = sym. */
1581 S_SET_SEGMENT (symp2
, S_GET_SEGMENT (symp
));
1583 /* Subtracting out the frag address here is a hack because
1584 we are in the middle of the final loop. */
1587 - symbol_get_frag (symp
)->fr_address
));
1589 symbol_set_frag (symp2
, symbol_get_frag (symp
));
1591 /* This will copy over the size information. */
1592 copy_symbol_attributes (symp2
, symp
);
1594 if (S_IS_WEAK (symp
))
1597 if (S_IS_EXTERNAL (symp
))
1598 S_SET_EXTERNAL (symp2
);
1602 /* Double check weak symbols. */
1603 if (S_IS_WEAK (symp
))
1605 if (S_IS_COMMON (symp
))
1606 as_bad (_("Symbol `%s' can not be both weak and common"),
1611 /* The Irix 5 and 6 assemblers set the type of any common symbol and
1612 any undefined non-function symbol to STT_OBJECT. We try to be
1613 compatible, since newer Irix 5 and 6 linkers care. However, we
1614 only set undefined symbols to be STT_OBJECT if we are on Irix,
1615 because that is the only time gcc will generate the necessary
1616 .global directives to mark functions. */
1618 if (S_IS_COMMON (symp
))
1619 symbol_get_bfdsym (symp
)->flags
|= BSF_OBJECT
;
1621 if (strstr (TARGET_OS
, "irix") != NULL
1622 && ! S_IS_DEFINED (symp
)
1623 && (symbol_get_bfdsym (symp
)->flags
& BSF_FUNCTION
) == 0)
1624 symbol_get_bfdsym (symp
)->flags
|= BSF_OBJECT
;
1628 /* Frob the PowerPC, so that the symbol always has object type
1629 if it is not some other type. VxWorks needs this. */
1630 if ((symbol_get_bfdsym (symp
)->flags
1631 & (BSF_FUNCTION
| BSF_FILE
| BSF_SECTION_SYM
)) == 0
1632 && S_IS_DEFINED (symp
))
1633 symbol_get_bfdsym (symp
)->flags
|= BSF_OBJECT
;
1640 bfd_map_over_sections (stdoutput
, adjust_stab_sections
, (PTR
) 0);
1642 #ifdef elf_tc_final_processing
1643 elf_tc_final_processing ();
1647 /* It is required that we let write_relocs have the opportunity to
1648 optimize away fixups before output has begun, since it is possible
1649 to eliminate all fixups for a section and thus we never should
1650 have generated the relocation section. */
1653 elf_frob_file_after_relocs ()
1655 #ifdef NEED_ECOFF_DEBUG
1656 if (ECOFF_DEBUGGING
)
1657 /* Generate the ECOFF debugging information. */
1659 const struct ecoff_debug_swap
*debug_swap
;
1660 struct ecoff_debug_info debug
;
1665 = get_elf_backend_data (stdoutput
)->elf_backend_ecoff_debug_swap
;
1666 know (debug_swap
!= (const struct ecoff_debug_swap
*) NULL
);
1667 ecoff_build_debug (&debug
.symbolic_header
, &buf
, debug_swap
);
1669 /* Set up the pointers in debug. */
1670 #define SET(ptr, offset, type) \
1671 debug.ptr = (type) (buf + debug.symbolic_header.offset)
1673 SET (line
, cbLineOffset
, unsigned char *);
1674 SET (external_dnr
, cbDnOffset
, PTR
);
1675 SET (external_pdr
, cbPdOffset
, PTR
);
1676 SET (external_sym
, cbSymOffset
, PTR
);
1677 SET (external_opt
, cbOptOffset
, PTR
);
1678 SET (external_aux
, cbAuxOffset
, union aux_ext
*);
1679 SET (ss
, cbSsOffset
, char *);
1680 SET (external_fdr
, cbFdOffset
, PTR
);
1681 SET (external_rfd
, cbRfdOffset
, PTR
);
1682 /* ssext and external_ext are set up just below. */
1686 /* Set up the external symbols. */
1687 debug
.ssext
= debug
.ssext_end
= NULL
;
1688 debug
.external_ext
= debug
.external_ext_end
= NULL
;
1689 if (! bfd_ecoff_debug_externals (stdoutput
, &debug
, debug_swap
, true,
1690 elf_get_extr
, elf_set_index
))
1691 as_fatal (_("Failed to set up debugging information: %s"),
1692 bfd_errmsg (bfd_get_error ()));
1694 sec
= bfd_get_section_by_name (stdoutput
, ".mdebug");
1695 assert (sec
!= NULL
);
1697 know (stdoutput
->output_has_begun
== false);
1699 /* We set the size of the section, call bfd_set_section_contents
1700 to force the ELF backend to allocate a file position, and then
1701 write out the data. FIXME: Is this really the best way to do
1703 sec
->_raw_size
= bfd_ecoff_debug_size (stdoutput
, &debug
, debug_swap
);
1705 if (! bfd_set_section_contents (stdoutput
, sec
, (PTR
) NULL
,
1706 (file_ptr
) 0, (bfd_size_type
) 0))
1707 as_fatal (_("Can't start writing .mdebug section: %s"),
1708 bfd_errmsg (bfd_get_error ()));
1710 know (stdoutput
->output_has_begun
== true);
1711 know (sec
->filepos
!= 0);
1713 if (! bfd_ecoff_write_debug (stdoutput
, &debug
, debug_swap
,
1715 as_fatal (_("Could not write .mdebug section: %s"),
1716 bfd_errmsg (bfd_get_error ()));
1718 #endif /* NEED_ECOFF_DEBUG */
1723 /* Heavily plagarized from obj_elf_version. The idea is to emit the
1724 SCO specific identifier in the .notes section to satisfy the SCO
1727 This looks more complicated than it really is. As opposed to the
1728 "obvious" solution, this should handle the cross dev cases
1729 correctly. (i.e, hosting on a 64 bit big endian processor, but
1730 generating SCO Elf code) Efficiency isn't a concern, as there
1731 should be exactly one of these sections per object module.
1733 SCO OpenServer 5 identifies it's ELF modules with a standard ELF
1736 int_32 namesz = 4 ; Name size
1737 int_32 descsz = 12 ; Descriptive information
1739 char name[4] = "SCO" ; Originator name ALWAYS SCO + NULL
1740 int_32 version = (major ver # << 16) | version of tools ;
1741 int_32 source = (tool_id << 16 ) | 1 ;
1742 int_32 info = 0 ; These are set by the SCO tools, but we
1743 don't know enough about the source
1744 environment to set them. SCO ld currently
1745 ignores them, and recommends we set them
1748 #define SCO_MAJOR_VERSION 0x1
1749 #define SCO_MINOR_VERSION 0x1
1759 asection
*seg
= now_seg
;
1760 subsegT subseg
= now_subseg
;
1761 Elf_Internal_Note i_note
;
1762 Elf_External_Note e_note
;
1763 asection
*note_secp
= (asection
*) NULL
;
1766 /* create the .note section */
1768 note_secp
= subseg_new (".note", 0);
1769 bfd_set_section_flags (stdoutput
,
1771 SEC_HAS_CONTENTS
| SEC_READONLY
);
1773 /* process the version string */
1776 i_note
.descsz
= 12; /* 12 descriptive bytes */
1777 i_note
.type
= NT_VERSION
; /* Contains a version string */
1779 p
= frag_more (sizeof (i_note
.namesz
));
1780 md_number_to_chars (p
, (valueT
) i_note
.namesz
, 4);
1782 p
= frag_more (sizeof (i_note
.descsz
));
1783 md_number_to_chars (p
, (valueT
) i_note
.descsz
, 4);
1785 p
= frag_more (sizeof (i_note
.type
));
1786 md_number_to_chars (p
, (valueT
) i_note
.type
, 4);
1791 /* Note: this is the version number of the ELF we're representing */
1793 md_number_to_chars (p
, (SCO_MAJOR_VERSION
<< 16) | (SCO_MINOR_VERSION
), 4);
1795 /* Here, we pick a magic number for ourselves (yes, I "registered"
1796 it with SCO. The bottom bit shows that we are compat with the
1799 md_number_to_chars (p
, 0x4c520000 | 0x0001, 4);
1801 /* If we knew (or cared) what the source language options were, we'd
1802 fill them in here. SCO has given us permission to ignore these
1803 and just set them to zero. */
1805 md_number_to_chars (p
, 0x0000, 4);
1807 frag_align (2, 0, 0);
1809 /* We probably can't restore the current segment, for there likely
1812 subseg_set (seg
, subseg
);
1816 #endif /* SCO_ELF */
1818 const struct format_ops elf_format_ops
=
1820 bfd_target_elf_flavour
,
1825 elf_frob_file_after_relocs
,
1826 elf_s_get_size
, elf_s_set_size
,
1827 elf_s_get_align
, elf_s_set_align
,
1828 elf_copy_symbol_attributes
,
1829 #ifdef NEED_ECOFF_DEBUG
1830 ecoff_generate_asm_lineno
,
1834 0, /* process_stab */
1836 elf_sec_sym_ok_for_reloc
,
1838 #ifdef NEED_ECOFF_DEBUG
1843 obj_read_begin_hook
,
1844 obj_symbol_new_hook
,