[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fix compile time warnings for obj-coff.c when not BFD_ASSEMBLER
From: |
Nick Clifton |
Subject: |
Fix compile time warnings for obj-coff.c when not BFD_ASSEMBLER |
Date: |
11 May 2002 13:07:25 +0100 |
Hi Guys,
I am checking in the patch below to fix the compile time warning
messages when using gas/config/obj-coff.c without BFD_ASSEMBLER
defined. I also took the time to apply some formatting fixes as
well.
Cheers
Nick
2002-05-11 Nick Clifton <address@hidden>
* config/obj-coff.c: Fix compile time warnings when compiling
without BFD_ASSEMBLER defined.
Fix formatting.
Index: gas/config/obj-coff.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-coff.c,v
retrieving revision 1.57
diff -c -3 -p -w -r1.57 obj-coff.c
*** gas/config/obj-coff.c 9 May 2002 13:12:57 -0000 1.57
--- gas/config/obj-coff.c 11 May 2002 12:05:24 -0000
*************** const short seg_N_TYPE[] =
*** 1713,1721 ****
int function_lineoff = -1; /* Offset in line#s where the last function
started (the odd entry for line #0) */
! /* structure used to keep the filenames which
are too long around so that we can stick them
! into the string table */
struct filename_list
{
char *filename;
--- 1713,1721 ----
int function_lineoff = -1; /* Offset in line#s where the last function
started (the odd entry for line #0) */
! /* Structure used to keep the filenames which
are too long around so that we can stick them
! into the string table. */
struct filename_list
{
char *filename;
*************** static symbolS *last_line_symbol;
*** 1729,1767 ****
/* Add 4 to the real value to get the index and compensate the
negatives. This vector is used by S_GET_SEGMENT to turn a coff
! section number into a segment number
! */
! static symbolS *previous_file_symbol;
! void c_symbol_merge ();
! static int line_base;
- symbolS *c_section_symbol ();
bfd *abfd;
! static void fixup_segment PARAMS ((segment_info_type *segP,
! segT this_segment_type));
!
! static void fixup_mdeps PARAMS ((fragS *,
! object_headers *,
! segT));
!
! static void fill_section PARAMS ((bfd * abfd,
! object_headers *,
! unsigned long *));
!
! static int c_line_new PARAMS ((symbolS * symbol, long paddr,
! int line_number,
! fragS * frag));
!
! static void w_symbols PARAMS ((bfd * abfd, char *where,
! symbolS * symbol_rootP));
!
! static void adjust_stab_section PARAMS ((bfd *abfd, segT seg));
!
static void obj_coff_lcomm PARAMS ((int));
static void obj_coff_text PARAMS ((int));
static void obj_coff_data PARAMS ((int));
! void obj_coff_section PARAMS ((int));
/* When not using BFD_ASSEMBLER, we permit up to 40 sections.
--- 1729,1766 ----
/* Add 4 to the real value to get the index and compensate the
negatives. This vector is used by S_GET_SEGMENT to turn a coff
! section number into a segment number. */
bfd *abfd;
+ static symbolS *previous_file_symbol;
+ static int line_base;
! void c_symbol_merge PARAMS ((symbolS *, symbolS *));
! symbolS *c_section_symbol PARAMS ((char *, int));
! void obj_coff_section PARAMS ((int));
! void do_relocs_for PARAMS ((bfd *, object_headers *, unsigned long *));
! char * symbol_to_chars PARAMS ((bfd *, char *, symbolS *));
! void w_strings PARAMS ((char *));
!
! static void fixup_segment PARAMS ((segment_info_type *, segT));
! static void fixup_mdeps PARAMS ((fragS *, object_headers *, segT));
! static void fill_section PARAMS ((bfd *, object_headers *, unsigned long *));
! static int c_line_new PARAMS ((symbolS *, long, int, fragS *));
! static void w_symbols PARAMS ((bfd *, char *, symbolS *));
! static void adjust_stab_section PARAMS ((bfd *, segT));
static void obj_coff_lcomm PARAMS ((int));
static void obj_coff_text PARAMS ((int));
static void obj_coff_data PARAMS ((int));
! static unsigned int count_entries_in_chain PARAMS ((unsigned int));
! static void coff_header_append PARAMS ((bfd *, object_headers *));
! static unsigned int yank_symbols PARAMS ((void));
! static unsigned int glue_symbols PARAMS ((symbolS **, symbolS **));
! static unsigned int tie_tags PARAMS ((void));
! static void crawl_symbols PARAMS ((object_headers *, bfd *));
! static void do_linenos_for PARAMS ((bfd *, object_headers *, unsigned long
*));
! static void remove_subsegs PARAMS ((void));
!
!
/* When not using BFD_ASSEMBLER, we permit up to 40 sections.
*************** static const segT seg_info_off_by_4[] =
*** 1800,1805 ****
--- 1799,1806 ----
#define SEG_INFO_FROM_SECTION_NUMBER(x) (seg_info_off_by_4[(x)+4])
+ static relax_addressT relax_align PARAMS ((relax_addressT, long));
+
static relax_addressT
relax_align (address, alignment)
relax_addressT address;
*************** s_get_segment (x)
*** 1820,1827 ****
return SEG_INFO_FROM_SECTION_NUMBER (x->sy_symbol.ost_entry.n_scnum);
}
! /* calculate the size of the frag chain and fill in the section header
! to contain all of it, also fill in the addr of the sections */
static unsigned int
size_section (abfd, idx)
bfd *abfd ATTRIBUTE_UNUSED;
--- 1821,1831 ----
return SEG_INFO_FROM_SECTION_NUMBER (x->sy_symbol.ost_entry.n_scnum);
}
! static unsigned int size_section PARAMS ((bfd *, unsigned int));
!
! /* Calculate the size of the frag chain and fill in the section header
! to contain all of it, also fill in the addr of the sections. */
!
static unsigned int
size_section (abfd, idx)
bfd *abfd ATTRIBUTE_UNUSED;
*************** size_section (abfd, idx)
*** 1830,1835 ****
--- 1834,1840 ----
unsigned int size = 0;
fragS *frag = segment_info[idx].frchainP->frch_root;
+
while (frag)
{
size = frag->fr_address;
*************** count_entries_in_chain (idx)
*** 1882,1888 ****
unsigned int nrelocs;
fixS *fixup_ptr;
! /* Count the relocations */
fixup_ptr = segment_info[idx].fix_root;
nrelocs = 0;
while (fixup_ptr != (fixS *) NULL)
--- 1887,1893 ----
unsigned int nrelocs;
fixS *fixup_ptr;
! /* Count the relocations. */
fixup_ptr = segment_info[idx].fix_root;
nrelocs = 0;
while (fixup_ptr != (fixS *) NULL)
*************** count_entries_in_chain (idx)
*** 1908,1914 ****
static int compare_external_relocs PARAMS ((const PTR, const PTR));
! /* AUX's ld expects relocations to be sorted */
static int
compare_external_relocs (x, y)
const PTR x;
--- 1913,1920 ----
static int compare_external_relocs PARAMS ((const PTR, const PTR));
! /* AUX's ld expects relocations to be sorted. */
!
static int
compare_external_relocs (x, y)
const PTR x;
*************** compare_external_relocs (x, y)
*** 1923,1929 ****
#endif
! /* output all the relocations for a section */
void
do_relocs_for (abfd, h, file_cursor)
bfd * abfd;
--- 1929,1936 ----
#endif
! /* Output all the relocations for a section. */
!
void
do_relocs_for (abfd, h, file_cursor)
bfd * abfd;
*************** do_relocs_for (abfd, h, file_cursor)
*** 1961,1973 ****
{
struct internal_reloc intr;
! /* Only output some of the relocations */
if (fix_ptr->fx_done == 0 && TC_COUNT_RELOC (fix_ptr))
{
#ifdef TC_RELOC_MANGLE
TC_RELOC_MANGLE (&segment_info[idx], fix_ptr, &intr,
base);
-
#else
symbolS *dot;
symbolS *symbol_ptr = fix_ptr->fx_addsy;
--- 1968,1979 ----
{
struct internal_reloc intr;
! /* Only output some of the relocations. */
if (fix_ptr->fx_done == 0 && TC_COUNT_RELOC (fix_ptr))
{
#ifdef TC_RELOC_MANGLE
TC_RELOC_MANGLE (&segment_info[idx], fix_ptr, &intr,
base);
#else
symbolS *dot;
symbolS *symbol_ptr = fix_ptr->fx_addsy;
*************** do_relocs_for (abfd, h, file_cursor)
*** 2012,2047 ****
as_bad (_("bad relocation: symbol `%s' not in
symbol table"),
S_GET_NAME (symbol_ptr));
}
dot = segment_info[S_GET_SEGMENT (symbol_ptr)].dot;
if (dot)
- {
intr.r_symndx = dot->sy_number;
- }
else
- {
intr.r_symndx = symbol_ptr->sy_number;
}
-
- }
else
- {
intr.r_symndx = -1;
- }
#endif
-
(void) bfd_coff_swap_reloc_out (abfd, &intr, ext_ptr);
ext_ptr++;
-
#if defined(TC_A29K)
-
/* The 29k has a special kludge for the high 16 bit
reloc. Two relocations are emited, R_IHIHALF,
and R_IHCONST. The second one doesn't contain a
symbol, but uses the value for offset. */
-
if (intr.r_type == R_IHIHALF)
{
! /* now emit the second bit */
intr.r_type = R_IHCONST;
intr.r_symndx = fix_ptr->fx_addnumber;
(void) bfd_coff_swap_reloc_out (abfd, &intr, ext_ptr);
--- 2018,2043 ----
as_bad (_("bad relocation: symbol `%s' not in
symbol table"),
S_GET_NAME (symbol_ptr));
}
+
dot = segment_info[S_GET_SEGMENT (symbol_ptr)].dot;
if (dot)
intr.r_symndx = dot->sy_number;
else
intr.r_symndx = symbol_ptr->sy_number;
}
else
intr.r_symndx = -1;
#endif
(void) bfd_coff_swap_reloc_out (abfd, &intr, ext_ptr);
ext_ptr++;
#if defined(TC_A29K)
/* The 29k has a special kludge for the high 16 bit
reloc. Two relocations are emited, R_IHIHALF,
and R_IHCONST. The second one doesn't contain a
symbol, but uses the value for offset. */
if (intr.r_type == R_IHIHALF)
{
! /* Now emit the second bit. */
intr.r_type = R_IHCONST;
intr.r_symndx = fix_ptr->fx_addnumber;
(void) bfd_coff_swap_reloc_out (abfd, &intr, ext_ptr);
*************** do_relocs_for (abfd, h, file_cursor)
*** 2066,2079 ****
fix_ptr = fix_ptr->fx_next;
}
-
#ifdef TE_AUX
! /* Sort the reloc table */
qsort ((PTR) external_reloc_vec, nrelocs,
sizeof (struct external_reloc), compare_external_relocs);
#endif
!
! /* Write out the reloc table */
bfd_bwrite ((PTR) external_reloc_vec,
(bfd_size_type) external_reloc_size, abfd);
free (external_reloc_vec);
--- 2062,2073 ----
fix_ptr = fix_ptr->fx_next;
}
#ifdef TE_AUX
! /* Sort the reloc table. */
qsort ((PTR) external_reloc_vec, nrelocs,
sizeof (struct external_reloc), compare_external_relocs);
#endif
! /* Write out the reloc table. */
bfd_bwrite ((PTR) external_reloc_vec,
(bfd_size_type) external_reloc_size, abfd);
free (external_reloc_vec);
*************** do_relocs_for (abfd, h, file_cursor)
*** 2085,2109 ****
}
else
{
! /* No relocs */
segment_info[idx].scnhdr.s_relptr = 0;
}
}
}
! /* Set relocation_size field in file headers */
H_SET_RELOCATION_SIZE (h, *file_cursor - reloc_start, 0);
}
! /* run through a frag chain and write out the data to go with it, fill
! in the scnhdrs with the info on the file postions
! */
static void
fill_section (abfd, h, file_cursor)
bfd * abfd;
object_headers *h ATTRIBUTE_UNUSED;
unsigned long *file_cursor;
{
-
unsigned int i;
unsigned int paddr = 0;
--- 2079,2103 ----
}
else
{
! /* No relocs. */
segment_info[idx].scnhdr.s_relptr = 0;
}
}
}
!
! /* Set relocation_size field in file headers. */
H_SET_RELOCATION_SIZE (h, *file_cursor - reloc_start, 0);
}
! /* Run through a frag chain and write out the data to go with it, fill
! in the scnhdrs with the info on the file postions. */
!
static void
fill_section (abfd, h, file_cursor)
bfd * abfd;
object_headers *h ATTRIBUTE_UNUSED;
unsigned long *file_cursor;
{
unsigned int i;
unsigned int paddr = 0;
*************** fill_section (abfd, h, file_cursor)
*** 2229,2235 ****
}
}
! /* Coff file generation & utilities */
static void
coff_header_append (abfd, h)
--- 2223,2229 ----
}
}
! /* Coff file generation & utilities. */
static void
coff_header_append (abfd, h)
*************** coff_header_append (abfd, h)
*** 2279,2285 ****
string_size += strlen (segment_info[i].name) + 1;
}
#endif
-
size = bfd_coff_swap_scnhdr_out (abfd,
&(segment_info[i].scnhdr),
buffer);
--- 2273,2278 ----
*************** symbol_to_chars (abfd, where, symbolP)
*** 2300,2312 ****
unsigned int i;
valueT val;
! /* Turn any symbols with register attributes into abs symbols */
if (S_GET_SEGMENT (symbolP) == reg_section)
- {
S_SET_SEGMENT (symbolP, absolute_section);
- }
- /* At the same time, relocate all symbols to their output value */
#ifndef TE_PE
val = (segment_info[S_GET_SEGMENT (symbolP)].scnhdr.s_paddr
+ S_GET_VALUE (symbolP));
--- 2293,2303 ----
unsigned int i;
valueT val;
! /* Turn any symbols with register attributes into abs symbols. */
if (S_GET_SEGMENT (symbolP) == reg_section)
S_SET_SEGMENT (symbolP, absolute_section);
+ /* At the same time, relocate all symbols to their output value. */
#ifndef TE_PE
val = (segment_info[S_GET_SEGMENT (symbolP)].scnhdr.s_paddr
+ S_GET_VALUE (symbolP));
*************** symbol_to_chars (abfd, where, symbolP)
*** 2329,2336 ****
S_GET_STORAGE_CLASS (symbolP),
i, numaux, where);
}
- return where;
}
void
--- 2320,2327 ----
S_GET_STORAGE_CLASS (symbolP),
i, numaux, where);
}
+ return where;
}
void
*************** coff_obj_symbol_new_hook (symbolP)
*** 2339,2353 ****
{
char underscore = 0; /* Symbol has leading _ */
! /* Effective symbol */
/* Store the pointer in the offset. */
S_SET_ZEROES (symbolP, 0L);
S_SET_DATA_TYPE (symbolP, T_NULL);
S_SET_STORAGE_CLASS (symbolP, 0);
S_SET_NUMBER_AUXILIARY (symbolP, 0);
! /* Additional information */
symbolP->sy_symbol.ost_flags = 0;
! /* Auxiliary entries */
memset ((char *) &symbolP->sy_symbol.ost_auxent[0], 0, AUXESZ);
if (S_IS_STRING (symbolP))
--- 2330,2344 ----
{
char underscore = 0; /* Symbol has leading _ */
! /* Effective symbol. */
/* Store the pointer in the offset. */
S_SET_ZEROES (symbolP, 0L);
S_SET_DATA_TYPE (symbolP, T_NULL);
S_SET_STORAGE_CLASS (symbolP, 0);
S_SET_NUMBER_AUXILIARY (symbolP, 0);
! /* Additional information. */
symbolP->sy_symbol.ost_flags = 0;
! /* Auxiliary entries. */
memset ((char *) &symbolP->sy_symbol.ost_auxent[0], 0, AUXESZ);
if (S_IS_STRING (symbolP))
*************** coff_obj_symbol_new_hook (symbolP)
*** 2356,2364 ****
SF_SET_LOCAL (symbolP);
}
! /*
! * Handle .ln directives.
! */
static void
obj_coff_ln (appline)
--- 2347,2353 ----
SF_SET_LOCAL (symbolP);
}
! /* Handle .ln directives. */
static void
obj_coff_ln (appline)
*************** obj_coff_ln (appline)
*** 2368,2377 ****
if (! appline && def_symbol_in_progress != NULL)
{
as_warn (_(".ln pseudo-op inside .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! } /* wrong context */
l = get_absolute_expression ();
c_line_new (0, frag_now_fix (), l, frag_now);
--- 2357,2367 ----
if (! appline && def_symbol_in_progress != NULL)
{
+ /* Wrong context. */
as_warn (_(".ln pseudo-op inside .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! }
l = get_absolute_expression ();
c_line_new (0, frag_now_fix (), l, frag_now);
*************** obj_coff_ln (appline)
*** 2395,2413 ****
demand_empty_rest_of_line ();
}
! /*
! * def()
! *
! * Handle .def directives.
! *
! * One might ask : why can't we symbol_new if the symbol does not
! * already exist and fill it with debug information. Because of
! * the C_EFCN special symbol. It would clobber the value of the
! * function symbol before we have a chance to notice that it is
! * a C_EFCN. And a second reason is that the code is more clear this
! * way. (at least I think it is :-).
! *
! */
#define SKIP_SEMI_COLON() while (*input_line_pointer++ != ';')
#define SKIP_WHITESPACES() while (*input_line_pointer == ' ' || \
--- 2385,2398 ----
demand_empty_rest_of_line ();
}
! /* Handle .def directives.
!
! One might ask : why can't we symbol_new if the symbol does not
! already exist and fill it with debug information. Because of
! the C_EFCN special symbol. It would clobber the value of the
! function symbol before we have a chance to notice that it is
! a C_EFCN. And a second reason is that the code is more clear this
! way. (at least I think it is :-). */
#define SKIP_SEMI_COLON() while (*input_line_pointer++ != ';')
#define SKIP_WHITESPACES() while (*input_line_pointer == ' ' || \
*************** static void
*** 2418,2426 ****
obj_coff_def (what)
int what ATTRIBUTE_UNUSED;
{
! char name_end; /* Char after the end of name */
! char *symbol_name; /* Name of the debug symbol */
! char *symbol_name_copy; /* Temporary copy of the name */
unsigned int symbol_name_length;
if (def_symbol_in_progress != NULL)
--- 2403,2411 ----
obj_coff_def (what)
int what ATTRIBUTE_UNUSED;
{
! char name_end; /* Char after the end of name. */
! char *symbol_name; /* Name of the debug symbol. */
! char *symbol_name_copy; /* Temporary copy of the name. */
unsigned int symbol_name_length;
if (def_symbol_in_progress != NULL)
*************** obj_coff_def (what)
*** 2428,2434 ****
as_warn (_(".def pseudo-op used inside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
SKIP_WHITESPACES ();
--- 2413,2419 ----
as_warn (_(".def pseudo-op used inside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! }
SKIP_WHITESPACES ();
*************** obj_coff_def (what)
*** 2444,2450 ****
symbol_name_copy = tc_canonicalize_symbol_name (symbol_name_copy);
#endif
! /* Initialize the new symbol */
#ifdef STRIP_UNDERSCORE
S_SET_NAME (def_symbol_in_progress, (*symbol_name_copy == '_'
? symbol_name_copy + 1
--- 2429,2435 ----
symbol_name_copy = tc_canonicalize_symbol_name (symbol_name_copy);
#endif
! /* Initialize the new symbol. */
#ifdef STRIP_UNDERSCORE
S_SET_NAME (def_symbol_in_progress, (*symbol_name_copy == '_'
? symbol_name_copy + 1
*************** obj_coff_endef (ignore)
*** 2480,2486 ****
as_warn (_(".endef pseudo-op used outside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
/* Set the section number according to storage class. */
switch (S_GET_STORAGE_CLASS (def_symbol_in_progress))
--- 2465,2471 ----
as_warn (_(".endef pseudo-op used outside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! }
/* Set the section number according to storage class. */
switch (S_GET_STORAGE_CLASS (def_symbol_in_progress))
*************** obj_coff_endef (ignore)
*** 2489,2495 ****
case C_ENTAG:
case C_UNTAG:
SF_SET_TAG (def_symbol_in_progress);
! /* intentional fallthrough */
case C_FILE:
case C_TPDEF:
SF_SET_DEBUG (def_symbol_in_progress);
--- 2474,2481 ----
case C_ENTAG:
case C_UNTAG:
SF_SET_TAG (def_symbol_in_progress);
! /* Intentional fallthrough. */
!
case C_FILE:
case C_TPDEF:
SF_SET_DEBUG (def_symbol_in_progress);
*************** obj_coff_endef (ignore)
*** 2497,2516 ****
break;
case C_EFCN:
! SF_SET_LOCAL (def_symbol_in_progress); /* Do not emit this symbol. */
! /* intentional fallthrough */
case C_BLOCK:
! SF_SET_PROCESS (def_symbol_in_progress); /* Will need processing
before writing */
! /* intentional fallthrough */
case C_FCN:
S_SET_SEGMENT (def_symbol_in_progress, SEG_E0);
if (strcmp (S_GET_NAME (def_symbol_in_progress), ".bf") == 0)
{ /* .bf */
if (function_lineoff < 0)
- {
fprintf (stderr, _("`.bf' symbol without preceding function\n"));
! } /* missing function symbol */
SA_GET_SYM_LNNOPTR (last_line_symbol) = function_lineoff;
SF_SET_PROCESS (last_line_symbol);
--- 2483,2505 ----
break;
case C_EFCN:
! /* Do not emit this symbol. */
! SF_SET_LOCAL (def_symbol_in_progress);
! /* Intentional fallthrough. */
!
case C_BLOCK:
! /* Will need processing before writing. */
! SF_SET_PROCESS (def_symbol_in_progress);
! /* Intentional fallthrough. */
!
case C_FCN:
S_SET_SEGMENT (def_symbol_in_progress, SEG_E0);
if (strcmp (S_GET_NAME (def_symbol_in_progress), ".bf") == 0)
{ /* .bf */
if (function_lineoff < 0)
fprintf (stderr, _("`.bf' symbol without preceding function\n"));
!
SA_GET_SYM_LNNOPTR (last_line_symbol) = function_lineoff;
SF_SET_PROCESS (last_line_symbol);
*************** obj_coff_endef (ignore)
*** 2518,2523 ****
--- 2507,2513 ----
SF_SET_PROCESS (def_symbol_in_progress);
function_lineoff = -1;
}
+
/* Value is always set to . */
def_symbol_in_progress->sy_frag = frag_now;
S_SET_VALUE (def_symbol_in_progress, (valueT) frag_now_fix ());
*************** obj_coff_endef (ignore)
*** 2546,2552 ****
#endif
case C_STAT:
case C_LABEL:
! /* Valid but set somewhere else (s_comm, s_lcomm, colon) */
break;
case C_USTATIC:
--- 2536,2542 ----
#endif
case C_STAT:
case C_LABEL:
! /* Valid but set somewhere else (s_comm, s_lcomm, colon). */
break;
case C_USTATIC:
*************** obj_coff_endef (ignore)
*** 2554,2560 ****
case C_ULABEL:
as_warn (_("unexpected storage class %d"), S_GET_STORAGE_CLASS
(def_symbol_in_progress));
break;
! } /* switch on storage class */
/* Now that we have built a debug symbol, try to find if we should
merge with an existing symbol or not. If a symbol is C_EFCN or
--- 2544,2550 ----
case C_ULABEL:
as_warn (_("unexpected storage class %d"), S_GET_STORAGE_CLASS
(def_symbol_in_progress));
break;
! }
/* Now that we have built a debug symbol, try to find if we should
merge with an existing symbol or not. If a symbol is C_EFCN or
*************** obj_coff_endef (ignore)
*** 2609,2624 ****
/* For functions, and tags, and static symbols, the symbol
*must* be where the debug symbol appears. Move the
existing symbol to the current place. */
! /* If it already is at the end of the symbol list, do nothing */
if (def_symbol_in_progress != symbol_lastP)
{
symbol_remove (def_symbol_in_progress, &symbol_rootP,
&symbol_lastP);
symbol_append (def_symbol_in_progress, symbol_lastP,
&symbol_rootP, &symbol_lastP);
! } /* if not already in place */
! } /* if function */
! } /* normal or mergable */
if (SF_GET_TAG (def_symbol_in_progress))
{
--- 2599,2614 ----
/* For functions, and tags, and static symbols, the symbol
*must* be where the debug symbol appears. Move the
existing symbol to the current place. */
! /* If it already is at the end of the symbol list, do nothing. */
if (def_symbol_in_progress != symbol_lastP)
{
symbol_remove (def_symbol_in_progress, &symbol_rootP,
&symbol_lastP);
symbol_append (def_symbol_in_progress, symbol_lastP,
&symbol_rootP, &symbol_lastP);
! }
! }
! }
if (SF_GET_TAG (def_symbol_in_progress))
{
*************** obj_coff_endef (ignore)
*** 2644,2651 ****
/* That is, if this is the first time we've seen the
function... */
symbol_table_insert (def_symbol_in_progress);
! } /* definition follows debug */
! } /* Create the line number entry pointing to the
function being defined */
def_symbol_in_progress = NULL;
demand_empty_rest_of_line ();
--- 2634,2641 ----
/* That is, if this is the first time we've seen the
function... */
symbol_table_insert (def_symbol_in_progress);
! }
! }
def_symbol_in_progress = NULL;
demand_empty_rest_of_line ();
*************** obj_coff_dim (ignore)
*** 2662,2668 ****
as_warn (_(".dim pseudo-op used outside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
S_SET_NUMBER_AUXILIARY (def_symbol_in_progress, 1);
--- 2652,2658 ----
as_warn (_(".dim pseudo-op used outside of .def/.endef: ignored."));
demand_empty_rest_of_line ();
return;
! }
S_SET_NUMBER_AUXILIARY (def_symbol_in_progress, 1);
*************** obj_coff_dim (ignore)
*** 2680,2686 ****
default:
as_warn (_("badly formed .dim directive ignored"));
! /* intentional fallthrough */
case '\n':
case ';':
dim_index = DIMNUM;
--- 2670,2677 ----
default:
as_warn (_("badly formed .dim directive ignored"));
! /* Intentional fallthrough. */
!
case '\n':
case ';':
dim_index = DIMNUM;
*************** obj_coff_line (ignore)
*** 2715,2732 ****
#if 0 /* XXX Can we ever have line numbers going backwards? */
if (this_base > line_base)
#endif
- {
line_base = this_base;
- }
#ifndef NO_LISTING
{
extern int listing;
if (listing)
- {
listing_source_line ((unsigned int) line_base);
}
- }
#endif
}
--- 2706,2719 ----
*************** obj_coff_size (ignore)
*** 2745,2751 ****
as_warn (_(".size pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
S_SET_NUMBER_AUXILIARY (def_symbol_in_progress, 1);
SA_SET_SYM_SIZE (def_symbol_in_progress, get_absolute_expression ());
--- 2732,2738 ----
as_warn (_(".size pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! }
S_SET_NUMBER_AUXILIARY (def_symbol_in_progress, 1);
SA_SET_SYM_SIZE (def_symbol_in_progress, get_absolute_expression ());
*************** obj_coff_scl (ignore)
*** 2761,2767 ****
as_warn (_(".scl pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
S_SET_STORAGE_CLASS (def_symbol_in_progress, get_absolute_expression ());
demand_empty_rest_of_line ();
--- 2748,2754 ----
as_warn (_(".scl pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! }
S_SET_STORAGE_CLASS (def_symbol_in_progress, get_absolute_expression ());
demand_empty_rest_of_line ();
*************** obj_coff_tag (ignore)
*** 2793,2801 ****
SA_SET_SYM_TAGNDX (def_symbol_in_progress,
(long) tag_find_or_make (symbol_name));
if (SA_GET_SYM_TAGNDX (def_symbol_in_progress) == 0L)
- {
as_warn (_("tag not found for .tag %s"), symbol_name);
- } /* not defined */
SF_SET_TAGGED (def_symbol_in_progress);
*input_line_pointer = name_end;
--- 2780,2786 ----
*************** obj_coff_type (ignore)
*** 2812,2826 ****
as_warn (_(".type pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
S_SET_DATA_TYPE (def_symbol_in_progress, get_absolute_expression ());
if (ISFCN (S_GET_DATA_TYPE (def_symbol_in_progress)) &&
S_GET_STORAGE_CLASS (def_symbol_in_progress) != C_TPDEF)
- {
SF_SET_FUNCTION (def_symbol_in_progress);
- } /* is a function */
demand_empty_rest_of_line ();
}
--- 2797,2809 ----
as_warn (_(".type pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! }
S_SET_DATA_TYPE (def_symbol_in_progress, get_absolute_expression ());
if (ISFCN (S_GET_DATA_TYPE (def_symbol_in_progress)) &&
S_GET_STORAGE_CLASS (def_symbol_in_progress) != C_TPDEF)
SF_SET_FUNCTION (def_symbol_in_progress);
demand_empty_rest_of_line ();
}
*************** obj_coff_val (ignore)
*** 2834,2840 ****
as_warn (_(".val pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! } /* if not inside .def/.endef */
if (is_name_beginner (*input_line_pointer))
{
--- 2817,2823 ----
as_warn (_(".val pseudo-op used outside of .def/.endef ignored."));
demand_empty_rest_of_line ();
return;
! }
if (is_name_beginner (*input_line_pointer))
{
*************** obj_coff_val (ignore)
*** 2849,2855 ****
{
def_symbol_in_progress->sy_frag = frag_now;
S_SET_VALUE (def_symbol_in_progress, (valueT) frag_now_fix ());
! /* If the .val is != from the .def (e.g. statics) */
}
else if (strcmp (S_GET_NAME (def_symbol_in_progress), symbol_name))
{
--- 2832,2838 ----
{
def_symbol_in_progress->sy_frag = frag_now;
S_SET_VALUE (def_symbol_in_progress, (valueT) frag_now_fix ());
! /* If the .val is != from the .def (e.g. statics). */
}
else if (strcmp (S_GET_NAME (def_symbol_in_progress), symbol_name))
{
*************** coff_obj_read_begin_hook ()
*** 2918,2930 ****
}
/* This function runs through the symbol table and puts all the
! externals onto another chain */
/* The chain of globals. */
symbolS *symbol_globalP;
symbolS *symbol_global_lastP;
! /* The chain of externals */
symbolS *symbol_externP;
symbolS *symbol_extern_lastP;
--- 2901,2913 ----
}
/* This function runs through the symbol table and puts all the
! externals onto another chain. */
/* The chain of globals. */
symbolS *symbol_globalP;
symbolS *symbol_global_lastP;
! /* The chain of externals. */
symbolS *symbol_externP;
symbolS *symbol_extern_lastP;
*************** yank_symbols ()
*** 2961,2967 ****
if (!SF_GET_DEBUG (symbolP))
{
! /* Debug symbols do not need all this rubbish */
symbolS *real_symbolP;
/* L* and C_EFCN symbols never merge. */
--- 2944,2950 ----
if (!SF_GET_DEBUG (symbolP))
{
! /* Debug symbols do not need all this rubbish. */
symbolS *real_symbolP;
/* L* and C_EFCN symbols never merge. */
*************** yank_symbols ()
*** 2980,2999 ****
list.) Because some pointers refer to the real symbol
whereas no pointers refer to the debug symbol. */
c_symbol_merge (symbolP, real_symbolP);
! /* Replace the current symbol by the real one */
/* The symbols will never be the last or the first
because : 1st symbol is .file and 3 last symbols are
! .text, .data, .bss */
symbol_remove (real_symbolP, &symbol_rootP, &symbol_lastP);
symbol_insert (real_symbolP, symbolP, &symbol_rootP,
&symbol_lastP);
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
symbolP = real_symbolP;
! } /* if not local but dup'd */
if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_E1))
- {
S_SET_SEGMENT (symbolP, SEG_E0);
- } /* push data into text */
resolve_symbol_value (symbolP);
--- 2963,2980 ----
list.) Because some pointers refer to the real symbol
whereas no pointers refer to the debug symbol. */
c_symbol_merge (symbolP, real_symbolP);
! /* Replace the current symbol by the real one. */
/* The symbols will never be the last or the first
because : 1st symbol is .file and 3 last symbols are
! .text, .data, .bss. */
symbol_remove (real_symbolP, &symbol_rootP, &symbol_lastP);
symbol_insert (real_symbolP, symbolP, &symbol_rootP,
&symbol_lastP);
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
symbolP = real_symbolP;
! }
if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_E1))
S_SET_SEGMENT (symbolP, SEG_E0);
resolve_symbol_value (symbolP);
*************** yank_symbols ()
*** 3003,3019 ****
{
S_SET_EXTERNAL (symbolP);
}
else if (S_GET_SEGMENT (symbolP) == SEG_E0)
- {
S_SET_STORAGE_CLASS (symbolP, C_LABEL);
! }
else
- {
S_SET_STORAGE_CLASS (symbolP, C_STAT);
}
- }
! /* Mainly to speed up if not -g */
if (SF_GET_PROCESS (symbolP))
{
/* Handle the nested blocks auxiliary info. */
--- 2984,2998 ----
{
S_SET_EXTERNAL (symbolP);
}
+
else if (S_GET_SEGMENT (symbolP) == SEG_E0)
S_SET_STORAGE_CLASS (symbolP, C_LABEL);
!
else
S_SET_STORAGE_CLASS (symbolP, C_STAT);
}
! /* Mainly to speed up if not -g. */
if (SF_GET_PROCESS (symbolP))
{
/* Handle the nested blocks auxiliary info. */
*************** yank_symbols ()
*** 3022,3029 ****
if (!strcmp (S_GET_NAME (symbolP), ".bb"))
stack_push (block_stack, (char *) &symbolP);
else
! { /* .eb */
! register symbolS *begin_symbolP;
begin_symbolP = *(symbolS **) stack_pop (block_stack);
if (begin_symbolP == (symbolS *) 0)
as_warn (_("mismatched .eb"));
--- 3001,3010 ----
if (!strcmp (S_GET_NAME (symbolP), ".bb"))
stack_push (block_stack, (char *) &symbolP);
else
! {
! /* .eb */
! symbolS *begin_symbolP;
!
begin_symbolP = *(symbolS **) stack_pop (block_stack);
if (begin_symbolP == (symbolS *) 0)
as_warn (_("mismatched .eb"));
*************** yank_symbols ()
*** 3041,3053 ****
last_functionP = symbolP;
if (S_GET_NUMBER_AUXILIARY (symbolP) < 1)
- {
S_SET_NUMBER_AUXILIARY (symbolP, 1);
- } /* make it at least 1 */
/* Clobber possible stale .dim information. */
#if 0
! /* Iffed out by steve - this fries the lnnoptr info too */
bzero
(symbolP->sy_symbol.ost_auxent[0].x_sym.x_fcnary.x_ary.x_dimen,
sizeof
(symbolP->sy_symbol.ost_auxent[0].x_sym.x_fcnary.x_ary.x_dimen));
#endif
--- 3022,3032 ----
last_functionP = symbolP;
if (S_GET_NUMBER_AUXILIARY (symbolP) < 1)
S_SET_NUMBER_AUXILIARY (symbolP, 1);
/* Clobber possible stale .dim information. */
#if 0
! /* Iffed out by steve - this fries the lnnoptr info too. */
bzero
(symbolP->sy_symbol.ost_auxent[0].x_sym.x_fcnary.x_ary.x_dimen,
sizeof
(symbolP->sy_symbol.ost_auxent[0].x_sym.x_fcnary.x_ary.x_dimen));
#endif
*************** yank_symbols ()
*** 3084,3096 ****
}
else if (S_GET_STORAGE_CLASS (symbolP) == C_EOS)
{
! /* +2 take in account the current symbol */
SA_SET_SYM_ENDNDX (last_tagP, symbol_number + 2);
}
else if (S_GET_STORAGE_CLASS (symbolP) == C_FILE)
{
/* If the filename was too long to fit in the
! auxent, put it in the string table */
if (SA_GET_FILE_FNAME_ZEROS (symbolP) == 0
&& SA_GET_FILE_FNAME_OFFSET (symbolP) != 0)
{
--- 3063,3075 ----
}
else if (S_GET_STORAGE_CLASS (symbolP) == C_EOS)
{
! /* +2 take in account the current symbol. */
SA_SET_SYM_ENDNDX (last_tagP, symbol_number + 2);
}
else if (S_GET_STORAGE_CLASS (symbolP) == C_FILE)
{
/* If the filename was too long to fit in the
! auxent, put it in the string table. */
if (SA_GET_FILE_FNAME_ZEROS (symbolP) == 0
&& SA_GET_FILE_FNAME_OFFSET (symbolP) != 0)
{
*************** yank_symbols ()
*** 3102,3109 ****
{
S_SET_VALUE (symbolP, last_file_symno);
last_file_symno = symbol_number;
! } /* no one points at the first .file symbol */
! } /* if debug or tag or eos or file */
#ifdef tc_frob_coff_symbol
tc_frob_coff_symbol (symbolP);
--- 3081,3088 ----
{
S_SET_VALUE (symbolP, last_file_symno);
last_file_symno = symbol_number;
! }
! }
#ifdef tc_frob_coff_symbol
tc_frob_coff_symbol (symbolP);
*************** yank_symbols ()
*** 3122,3129 ****
if (SF_GET_LOCAL (symbolP))
{
! /* remove C_EFCN and LOCAL (L...) symbols */
! /* next pointer remains valid */
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
}
--- 3101,3108 ----
if (SF_GET_LOCAL (symbolP))
{
! /* Remove C_EFCN and LOCAL (L...) symbols. */
! /* Next pointer remains valid. */
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
}
*************** yank_symbols ()
*** 3143,3149 ****
#endif
|| S_GET_STORAGE_CLASS (symbolP) == C_WEAKEXT))
{
! /* if external, Remove from the list */
symbolS *hold = symbol_previous (symbolP);
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
--- 3122,3128 ----
#endif
|| S_GET_STORAGE_CLASS (symbolP) == C_WEAKEXT))
{
! /* If external, Remove from the list. */
symbolS *hold = symbol_previous (symbolP);
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
*************** yank_symbols ()
*** 3165,3171 ****
/* The O'Reilly COFF book says that defined global symbols
come at the end of the symbol table, just before
undefined global symbols. */
-
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
symbol_clear_list_pointers (symbolP);
symbol_append (symbolP, symbol_global_lastP, &symbol_globalP,
--- 3144,3149 ----
*************** yank_symbols ()
*** 3182,3195 ****
else
{
symbolP->sy_name_offset = 0;
! } /* fix "long" names */
symbolP->sy_number = symbol_number;
symbol_number += 1 + S_GET_NUMBER_AUXILIARY (symbolP);
! } /* if local symbol */
! } /* traverse the symbol list */
! return symbol_number;
}
static unsigned int
--- 3160,3173 ----
else
{
symbolP->sy_name_offset = 0;
! }
symbolP->sy_number = symbol_number;
symbol_number += 1 + S_GET_NUMBER_AUXILIARY (symbolP);
! }
! }
+ return symbol_number;
}
static unsigned int
*************** glue_symbols (head, tail)
*** 3203,3213 ****
{
symbolS *tmp = *head;
! /* append */
symbol_remove (tmp, head, tail);
symbol_append (tmp, symbol_lastP, &symbol_rootP, &symbol_lastP);
! /* and process */
if (SF_GET_STRING (tmp))
{
tmp->sy_name_offset = string_byte_count;
--- 3181,3191 ----
{
symbolS *tmp = *head;
! /* Append. */
symbol_remove (tmp, head, tail);
symbol_append (tmp, symbol_lastP, &symbol_rootP, &symbol_lastP);
! /* Process. */
if (SF_GET_STRING (tmp))
{
tmp->sy_name_offset = string_byte_count;
*************** glue_symbols (head, tail)
*** 3215,3226 ****
}
else
{
tmp->sy_name_offset = 0;
! } /* fix "long" names */
tmp->sy_number = symbol_number;
symbol_number += 1 + S_GET_NUMBER_AUXILIARY (tmp);
! } /* append the entire extern chain */
return symbol_number;
}
--- 3193,3205 ----
}
else
{
+ /* Fix "long" names. */
tmp->sy_name_offset = 0;
! }
tmp->sy_number = symbol_number;
symbol_number += 1 + S_GET_NUMBER_AUXILIARY (tmp);
! }
return symbol_number;
}
*************** tie_tags ()
*** 3248,3253 ****
--- 3227,3233 ----
return symbol_number;
}
+
static void
crawl_symbols (h, abfd)
object_headers *h;
*************** crawl_symbols (h, abfd)
*** 3255,3292 ****
{
unsigned int i;
! /* Initialize the stack used to keep track of the matching .bb .be */
block_stack = stack_init (512, sizeof (symbolS *));
/* The symbol list should be ordered according to the following sequence
! * order :
! * . .file symbol
! * . debug entries for functions
! * . fake symbols for the sections, including .text .data and .bss
! * . defined symbols
! * . undefined symbols
! * But this is not mandatory. The only important point is to put the
! * undefined symbols at the end of the list.
! */
/* Is there a .file symbol ? If not insert one at the beginning. */
if (symbol_rootP == NULL
|| S_GET_STORAGE_CLASS (symbol_rootP) != C_FILE)
- {
c_dot_file_symbol ("fake");
- }
! /*
! * Build up static symbols for the sections, they are filled in later
! */
for (i = SEG_E0; i < SEG_LAST; i++)
if (segment_info[i].scnhdr.s_name[0])
! segment_info[i].dot = c_section_symbol (segment_info[i].name,
i - SEG_E0 + 1);
! /* Take all the externals out and put them into another chain */
H_SET_SYMBOL_TABLE_SIZE (h, yank_symbols ());
/* Take the externals and glue them onto the end.*/
H_SET_SYMBOL_TABLE_SIZE (h,
--- 3235,3267 ----
{
unsigned int i;
! /* Initialize the stack used to keep track of the matching .bb .be. */
block_stack = stack_init (512, sizeof (symbolS *));
/* The symbol list should be ordered according to the following sequence
! order :
! . .file symbol
! . debug entries for functions
! . fake symbols for the sections, including .text .data and .bss
! . defined symbols
! . undefined symbols
! But this is not mandatory. The only important point is to put the
! undefined symbols at the end of the list. */
/* Is there a .file symbol ? If not insert one at the beginning. */
if (symbol_rootP == NULL
|| S_GET_STORAGE_CLASS (symbol_rootP) != C_FILE)
c_dot_file_symbol ("fake");
! /* Build up static symbols for the sections, they are filled in later. */
for (i = SEG_E0; i < SEG_LAST; i++)
if (segment_info[i].scnhdr.s_name[0])
! segment_info[i].dot = c_section_symbol ((char *) segment_info[i].name,
i - SEG_E0 + 1);
! /* Take all the externals out and put them into another chain. */
H_SET_SYMBOL_TABLE_SIZE (h, yank_symbols ());
/* Take the externals and glue them onto the end. */
H_SET_SYMBOL_TABLE_SIZE (h,
*************** crawl_symbols (h, abfd)
*** 3303,3311 ****
know (symbol_extern_lastP == NULL);
}
! /*
! * Find strings by crawling along symbol table chain.
! */
void
w_strings (where)
--- 3278,3284 ----
know (symbol_extern_lastP == NULL);
}
! /* Find strings by crawling along symbol table chain. */
void
w_strings (where)
*************** w_strings (where)
*** 3314,3320 ****
symbolS *symbolP;
struct filename_list *filename_list_scan = filename_list_head;
! /* Gotta do md_ byte-ordering stuff for string_byte_count first - KWK */
md_number_to_chars (where, (valueT) string_byte_count, 4);
where += 4;
--- 3287,3293 ----
symbolS *symbolP;
struct filename_list *filename_list_scan = filename_list_head;
! /* Gotta do md_ byte-ordering stuff for string_byte_count first - KWK. */
md_number_to_chars (where, (valueT) string_byte_count, 4);
where += 4;
*************** do_linenos_for (abfd, h, file_cursor)
*** 3386,3392 ****
struct external_lineno *dst = buffer;
/* Run through the table we've built and turn it into its external
! form, take this chance to remove duplicates */
for (line_ptr = s->lineno_list_head;
line_ptr != (struct lineno_list *) NULL;
--- 3359,3365 ----
struct external_lineno *dst = buffer;
/* Run through the table we've built and turn it into its external
! form, take this chance to remove duplicates. */
for (line_ptr = s->lineno_list_head;
line_ptr != (struct lineno_list *) NULL;
*************** do_linenos_for (abfd, h, file_cursor)
*** 3401,3413 ****
((symbolS *) line_ptr->line.l_addr.l_symndx)->sy_number;
}
else
- {
line_ptr->line.l_addr.l_paddr += ((struct frag *)
(line_ptr->frag))->fr_address;
- }
(void) bfd_coff_swap_lineno_out (abfd, &(line_ptr->line), dst);
dst++;
-
}
s->scnhdr.s_lnnoptr = *file_cursor;
--- 3374,3383 ----
*************** do_linenos_for (abfd, h, file_cursor)
*** 3418,3429 ****
*file_cursor += s->scnhdr.s_nlnno * LINESZ;
}
}
H_SET_LINENO_SIZE (h, *file_cursor - start);
}
/* Now we run through the list of frag chains in a segment and
make all the subsegment frags appear at the end of the
! list, as if the seg 0 was extra long */
static void
remove_subsegs ()
--- 3388,3400 ----
*file_cursor += s->scnhdr.s_nlnno * LINESZ;
}
}
+
H_SET_LINENO_SIZE (h, *file_cursor - start);
}
/* Now we run through the list of frag chains in a segment and
make all the subsegment frags appear at the end of the
! list, as if the seg 0 was extra long. */
static void
remove_subsegs ()
*************** remove_subsegs ()
*** 3448,3453 ****
--- 3419,3425 ----
unsigned long machine;
int coff_flags;
+
extern void
write_object_file ()
{
*************** write_object_file ()
*** 3506,3514 ****
remove_subsegs ();
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- {
relax_segment (segment_info[i].frchainP->frch_root, i);
- }
/* Relaxation has completed. Freeze all syms. */
finalize_syms = 1;
--- 3478,3484 ----
*************** write_object_file ()
*** 3562,3568 ****
H_SET_BSS_SIZE (&headers, size);
}
! /* Turn the gas native symbol table shape into a coff symbol table */
crawl_symbols (&headers, abfd);
if (string_byte_count == 4)
--- 3532,3538 ----
H_SET_BSS_SIZE (&headers, size);
}
! /* Turn the gas native symbol table shape into a coff symbol table. */
crawl_symbols (&headers, abfd);
if (string_byte_count == 4)
*************** write_object_file ()
*** 3596,3603 ****
bfd_seek (abfd, (file_ptr) file_cursor, 0);
! /* Plant the data */
!
fill_section (abfd, &headers, &file_cursor);
do_relocs_for (abfd, &headers, &file_cursor);
--- 3566,3572 ----
bfd_seek (abfd, (file_ptr) file_cursor, 0);
! /* Plant the data. */
fill_section (abfd, &headers, &file_cursor);
do_relocs_for (abfd, &headers, &file_cursor);
*************** obj_coff_add_segment (name)
*** 3692,3719 ****
return (segT) i;
}
! /*
! * implement the .section pseudo op:
! * .section name {, "flags"}
! * ^ ^
! * | +--- optional flags: 'b' for bss
! * | 'i' for info
! * +-- section name 'l' for lib
! * 'n' for noload
! * 'o' for over
! * 'w' for data
! * 'd' (apparently m88k for data)
! * 'x' for text
! * 'r' for read-only data
! * But if the argument is not a quoted string, treat it as a
! * subsegment number.
! */
void
obj_coff_section (ignore)
int ignore ATTRIBUTE_UNUSED;
{
! /* Strip out the section name */
char *section_name, *name;
char c;
unsigned int exp;
--- 3661,3686 ----
return (segT) i;
}
! /* Implement the .section pseudo op:
! .section name {, "flags"}
! ^ ^
! | +--- optional flags: 'b' for bss
! | 'i' for info
! +-- section name 'l' for lib
! 'n' for noload
! 'o' for over
! 'w' for data
! 'd' (apparently m88k for data)
! 'x' for text
! 'r' for read-only data
! But if the argument is not a quoted string, treat it as a
! subsegment number. */
void
obj_coff_section (ignore)
int ignore ATTRIBUTE_UNUSED;
{
! /* Strip out the section name. */
char *section_name, *name;
char c;
unsigned int exp;
*************** static void
*** 3810,3820 ****
obj_coff_ident (ignore)
int ignore ATTRIBUTE_UNUSED;
{
! segT current_seg = now_seg; /* save current seg */
subsegT current_subseg = now_subseg;
! subseg_new (".comment", 0); /* .comment seg */
! stringer (1); /* read string */
! subseg_set (current_seg, current_subseg); /* restore current seg */
}
void
--- 3777,3788 ----
obj_coff_ident (ignore)
int ignore ATTRIBUTE_UNUSED;
{
! segT current_seg = now_seg; /* Save current seg. */
subsegT current_subseg = now_subseg;
!
! subseg_new (".comment", 0); /* .comment seg. */
! stringer (1); /* Read string. */
! subseg_set (current_seg, current_subseg); /* Restore current seg. */
}
void
*************** c_symbol_merge (debug, normal)
*** 3826,3845 ****
S_SET_STORAGE_CLASS (normal, S_GET_STORAGE_CLASS (debug));
if (S_GET_NUMBER_AUXILIARY (debug) > S_GET_NUMBER_AUXILIARY (normal))
- {
S_SET_NUMBER_AUXILIARY (normal, S_GET_NUMBER_AUXILIARY (debug));
- } /* take the most we have */
if (S_GET_NUMBER_AUXILIARY (debug) > 0)
- {
memcpy ((char *) &normal->sy_symbol.ost_auxent[0],
(char *) &debug->sy_symbol.ost_auxent[0],
(unsigned int) (S_GET_NUMBER_AUXILIARY (debug) * AUXESZ));
- } /* Move all the auxiliary information */
/* Move the debug flags. */
SF_SET_DEBUG_FIELD (normal, SF_GET_DEBUG_FIELD (debug));
! } /* c_symbol_merge() */
static int
c_line_new (symbol, paddr, line_number, frag)
--- 3794,3809 ----
S_SET_STORAGE_CLASS (normal, S_GET_STORAGE_CLASS (debug));
if (S_GET_NUMBER_AUXILIARY (debug) > S_GET_NUMBER_AUXILIARY (normal))
S_SET_NUMBER_AUXILIARY (normal, S_GET_NUMBER_AUXILIARY (debug));
if (S_GET_NUMBER_AUXILIARY (debug) > 0)
memcpy ((char *) &normal->sy_symbol.ost_auxent[0],
(char *) &debug->sy_symbol.ost_auxent[0],
(unsigned int) (S_GET_NUMBER_AUXILIARY (debug) * AUXESZ));
/* Move the debug flags. */
SF_SET_DEBUG_FIELD (normal, SF_GET_DEBUG_FIELD (debug));
! }
static int
c_line_new (symbol, paddr, line_number, frag)
*************** c_line_new (symbol, paddr, line_number,
*** 3868,3880 ****
new_line->next = (struct lineno_list *) NULL;
if (s->lineno_list_head == (struct lineno_list *) NULL)
- {
s->lineno_list_head = new_line;
- }
else
- {
s->lineno_list_tail->next = new_line;
! }
s->lineno_list_tail = new_line;
return LINESZ * s->scnhdr.s_nlnno++;
}
--- 3832,3841 ----
new_line->next = (struct lineno_list *) NULL;
if (s->lineno_list_head == (struct lineno_list *) NULL)
s->lineno_list_head = new_line;
else
s->lineno_list_tail->next = new_line;
!
s->lineno_list_tail = new_line;
return LINESZ * s->scnhdr.s_nlnno++;
}
*************** c_dot_file_symbol (filename)
*** 3922,3950 ****
{
extern int listing;
if (listing)
- {
listing_source_file (filename);
}
-
- }
-
#endif
SF_SET_DEBUG (symbolP);
S_SET_VALUE (symbolP, (valueT) previous_file_symbol);
previous_file_symbol = symbolP;
! /* Make sure that the symbol is first on the symbol chain */
if (symbol_rootP != symbolP)
{
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
symbol_insert (symbolP, symbol_rootP, &symbol_rootP, &symbol_lastP);
}
! } /* c_dot_file_symbol() */
! /*
! * Build a 'section static' symbol.
! */
symbolS *
c_section_symbol (name, idx)
--- 3883,3905 ----
{
extern int listing;
if (listing)
listing_source_file (filename);
}
#endif
SF_SET_DEBUG (symbolP);
S_SET_VALUE (symbolP, (valueT) previous_file_symbol);
previous_file_symbol = symbolP;
! /* Make sure that the symbol is first on the symbol chain. */
if (symbol_rootP != symbolP)
{
symbol_remove (symbolP, &symbol_rootP, &symbol_lastP);
symbol_insert (symbolP, symbol_rootP, &symbol_rootP, &symbol_lastP);
}
! }
! /* Build a 'section static' symbol. */
symbolS *
c_section_symbol (name, idx)
*************** c_section_symbol (name, idx)
*** 4004,4010 ****
#endif /* TE_PE */
return symbolP;
! } /* c_section_symbol() */
static void
w_symbols (abfd, where, symbol_rootP)
--- 3959,3965 ----
#endif /* TE_PE */
return symbolP;
! }
static void
w_symbols (abfd, where, symbol_rootP)
*************** w_symbols (abfd, where, symbol_rootP)
*** 4015,4021 ****
symbolS *symbolP;
unsigned int i;
! /* First fill in those values we have only just worked out */
for (i = SEG_E0; i < SEG_LAST; i++)
{
symbolP = segment_info[i].dot;
--- 3970,3976 ----
symbolS *symbolP;
unsigned int i;
! /* First fill in those values we have only just worked out. */
for (i = SEG_E0; i < SEG_LAST; i++)
{
symbolP = segment_info[i].dot;
*************** w_symbols (abfd, where, symbol_rootP)
*** 4027,4049 ****
}
}
! /*
! * Emit all symbols left in the symbol chain.
! */
for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
{
/* Used to save the offset of the name. It is used to point
to the string in memory but must be a file offset. */
! register char *temp;
/* We can't fix the lnnoptr field in yank_symbols with the other
adjustments, because we have to wait until we know where they
go in the file. */
if (SF_GET_ADJ_LNNOPTR (symbolP))
- {
SA_GET_SYM_LNNOPTR (symbolP) +=
segment_info[S_GET_SEGMENT (symbolP)].scnhdr.s_lnnoptr;
- }
tc_coff_symbol_emit_hook (symbolP);
--- 3982,4000 ----
}
}
! /* Emit all symbols left in the symbol chain. */
for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
{
/* Used to save the offset of the name. It is used to point
to the string in memory but must be a file offset. */
! char *temp;
/* We can't fix the lnnoptr field in yank_symbols with the other
adjustments, because we have to wait until we know where they
go in the file. */
if (SF_GET_ADJ_LNNOPTR (symbolP))
SA_GET_SYM_LNNOPTR (symbolP) +=
segment_info[S_GET_SEGMENT (symbolP)].scnhdr.s_lnnoptr;
tc_coff_symbol_emit_hook (symbolP);
*************** w_symbols (abfd, where, symbol_rootP)
*** 4061,4068 ****
where = symbol_to_chars (abfd, where, symbolP);
S_SET_NAME (symbolP, temp);
}
!
! } /* w_symbols() */
static void
obj_coff_lcomm (ignore)
--- 4012,4018 ----
where = symbol_to_chars (abfd, where, symbolP);
S_SET_NAME (symbolP, temp);
}
! }
static void
obj_coff_lcomm (ignore)
*************** obj_coff_lcomm (ignore)
*** 4112,4118 ****
if (! need_pass_2)
{
char *p;
! segT current_seg = now_seg; /* save current seg */
subsegT current_subseg = now_subseg;
subseg_set (SEG_E2, 1);
--- 4062,4068 ----
if (! need_pass_2)
{
char *p;
! segT current_seg = now_seg; /* Save current seg. */
subsegT current_subseg = now_subseg;
subseg_set (SEG_E2, 1);
*************** obj_coff_lcomm (ignore)
*** 4120,4126 ****
p = frag_var(rs_org, 1, 1, (relax_substateT)0, symbolP,
(offsetT) temp, (char *) 0);
*p = 0;
! subseg_set (current_seg, current_subseg); /* restore current seg */
S_SET_SEGMENT (symbolP, SEG_E2);
S_SET_STORAGE_CLASS (symbolP, C_STAT);
}
--- 4070,4076 ----
p = frag_var(rs_org, 1, 1, (relax_substateT)0, symbolP,
(offsetT) temp, (char *) 0);
*p = 0;
! subseg_set (current_seg, current_subseg); /* Restore current seg. */
S_SET_SEGMENT (symbolP, SEG_E2);
S_SET_STORAGE_CLASS (symbolP, C_STAT);
}
*************** fixup_mdeps (frags, h, this_segment)
*** 4139,4144 ****
--- 4089,4095 ----
segT this_segment;
{
subseg_change (this_segment, 0);
+
while (frags)
{
switch (frags->fr_type)
*************** fixup_segment (segP, this_segment_type)
*** 4177,4192 ****
segment_info_type * segP;
segT this_segment_type;
{
! register fixS * fixP;
! register symbolS *add_symbolP;
! register symbolS *sub_symbolP;
long add_number;
! register int size;
! register char *place;
! register long where;
! register char pcrel;
! register fragS *fragP;
! register segT add_symbol_segment = absolute_section;
for (fixP = segP->fix_root; fixP; fixP = fixP->fx_next)
{
--- 4128,4143 ----
segment_info_type * segP;
segT this_segment_type;
{
! fixS * fixP;
! symbolS *add_symbolP;
! symbolS *sub_symbolP;
long add_number;
! int size;
! char *place;
! long where;
! char pcrel;
! fragS *fragP;
! segT add_symbol_segment = absolute_section;
for (fixP = segP->fix_root; fixP; fixP = fixP->fx_next)
{
*************** fixup_segment (segP, this_segment_type)
*** 4274,4282 ****
}
if (add_symbolP)
- {
add_symbol_segment = S_GET_SEGMENT (add_symbolP);
- } /* if there is an addend */
if (sub_symbolP)
{
--- 4225,4231 ----
*************** fixup_segment (segP, this_segment_type)
*** 4307,4313 ****
} /* not absolute */
/* if sub_symbol is in the same segment that add_symbol
! and add_symbol is either in DATA, TEXT, BSS or ABSOLUTE */
}
else if (S_GET_SEGMENT (sub_symbolP) == add_symbol_segment
&& SEG_NORMAL (add_symbol_segment))
--- 4256,4262 ----
} /* not absolute */
/* if sub_symbol is in the same segment that add_symbol
! and add_symbol is either in DATA, TEXT, BSS or ABSOLUTE. */
}
else if (S_GET_SEGMENT (sub_symbolP) == add_symbol_segment
&& SEG_NORMAL (add_symbol_segment))
*************** fixup_segment (segP, this_segment_type)
*** 4319,4328 ****
/* Makes no sense to use the difference of 2 arbitrary symbols
as the target of a call instruction. */
if (fixP->fx_tcbit)
- {
as_bad_where (fixP->fx_file, fixP->fx_line,
_("callj to difference of 2 symbols"));
- }
#endif /* TC_I960 */
add_number += S_GET_VALUE (add_symbolP) -
S_GET_VALUE (sub_symbolP);
--- 4268,4275 ----
*************** fixup_segment (segP, this_segment_type)
*** 4345,4353 ****
know (!(S_IS_EXTERNAL (sub_symbolP) && (S_GET_SEGMENT
(sub_symbolP) == absolute_section)));
if ((S_GET_SEGMENT (sub_symbolP) == absolute_section))
- {
add_number -= S_GET_VALUE (sub_symbolP);
! }
#ifdef DIFF_EXPR_OK
else if (S_GET_SEGMENT (sub_symbolP) == this_segment_type
#if 0 /* Okay for 68k, at least... */
--- 4292,4299 ----
know (!(S_IS_EXTERNAL (sub_symbolP) && (S_GET_SEGMENT
(sub_symbolP) == absolute_section)));
if ((S_GET_SEGMENT (sub_symbolP) == absolute_section))
add_number -= S_GET_VALUE (sub_symbolP);
!
#ifdef DIFF_EXPR_OK
else if (S_GET_SEGMENT (sub_symbolP) == this_segment_type
#if 0 /* Okay for 68k, at least... */
*************** fixup_segment (segP, this_segment_type)
*** 4371,4395 ****
segment_name (S_GET_SEGMENT (sub_symbolP)),
S_GET_NAME (sub_symbolP),
(long) (fragP->fr_address + where));
- } /* if absolute */
}
! } /* if sub_symbolP */
if (add_symbolP)
{
if (add_symbol_segment == this_segment_type && pcrel)
{
! /*
! * This fixup was made when the symbol's segment was
! * SEG_UNKNOWN, but it is now in the local segment.
! * So we know how to do the address without relocation.
! */
#ifdef TC_I960
/* reloc_callj() may replace a 'call' with a 'calls' or a 'bal',
! * in which cases it modifies *fixP as appropriate. In the case
! * of a 'calls', no further work is required, and *fixP has been
! * set up to make the rest of the code below a no-op.
! */
reloc_callj (fixP);
#endif /* TC_I960 */
--- 4317,4338 ----
segment_name (S_GET_SEGMENT (sub_symbolP)),
S_GET_NAME (sub_symbolP),
(long) (fragP->fr_address + where));
}
! }
! }
if (add_symbolP)
{
if (add_symbol_segment == this_segment_type && pcrel)
{
! /* This fixup was made when the symbol's segment was
! SEG_UNKNOWN, but it is now in the local segment.
! So we know how to do the address without relocation. */
#ifdef TC_I960
/* reloc_callj() may replace a 'call' with a 'calls' or a 'bal',
! in which cases it modifies *fixP as appropriate. In the case
! of a 'calls', no further work is required, and *fixP has been
! set up to make the rest of the code below a no-op. */
reloc_callj (fixP);
#endif /* TC_I960 */
*************** fixup_segment (segP, this_segment_type)
*** 4423,4429 ****
{
case absolute_section:
#ifdef TC_I960
! reloc_callj (fixP); /* See comment about reloc_callj()
above*/
#endif /* TC_I960 */
add_number += S_GET_VALUE (add_symbolP);
add_symbolP = NULL;
--- 4366,4373 ----
{
case absolute_section:
#ifdef TC_I960
! /* See comment about reloc_callj() above. */
! reloc_callj (fixP);
#endif /* TC_I960 */
add_number += S_GET_VALUE (add_symbolP);
add_symbolP = NULL;
*************** fixup_segment (segP, this_segment_type)
*** 4451,4466 ****
if ((int) fixP->fx_bit_fixP == 13)
{
/* This is a COBR instruction. They have only a
! * 13-bit displacement and are only to be used
! * for local branches: flag as error, don't generate
! * relocation.
! */
as_bad_where (fixP->fx_file, fixP->fx_line,
_("can't use COBR format with external
label"));
fixP->fx_addsy = NULL;
fixP->fx_done = 1;
continue;
! } /* COBR */
#endif /* TC_I960 */
#if ((defined (TC_I386) || defined (TE_LYNX) || defined (TE_AUX)) &&
!defined(TE_PE)) || defined (COFF_COMMON_ADDEND)
/* 386 COFF uses a peculiar format in which the
--- 4395,4409 ----
if ((int) fixP->fx_bit_fixP == 13)
{
/* This is a COBR instruction. They have only a
! 13-bit displacement and are only to be used
! for local branches: flag as error, don't generate
! relocation. */
as_bad_where (fixP->fx_file, fixP->fx_line,
_("can't use COBR format with external
label"));
fixP->fx_addsy = NULL;
fixP->fx_done = 1;
continue;
! }
#endif /* TC_I960 */
#if ((defined (TC_I386) || defined (TE_LYNX) || defined (TE_AUX)) &&
!defined(TE_PE)) || defined (COFF_COMMON_ADDEND)
/* 386 COFF uses a peculiar format in which the
*************** fixup_segment (segP, this_segment_type)
*** 4476,4484 ****
#endif
break;
! } /* switch on symbol seg */
! } /* if not in local seg */
! } /* if there was a + symbol */
if (pcrel)
{
--- 4419,4427 ----
#endif
break;
! }
! }
! }
if (pcrel)
{
*************** fixup_segment (segP, this_segment_type)
*** 4488,4496 ****
add_number -= md_pcrel_from (fixP);
#endif
if (add_symbolP == 0)
- {
fixP->fx_addsy = &abs_symbol;
- } /* if there's an add_symbol */
#if defined (TC_I386) || defined (TE_LYNX) || defined (TC_I960) || defined
(TC_M68K)
/* On the 386 we must adjust by the segment vaddr as well.
Ian Taylor.
--- 4431,4437 ----
*************** fixup_segment (segP, this_segment_type)
*** 4510,4516 ****
add_number -= segP->scnhdr.s_vaddr;
#endif
! } /* if pcrel */
md_apply_fix3 (fixP, (valueT *) & add_number, this_segment_type);
--- 4451,4457 ----
add_number -= segP->scnhdr.s_vaddr;
#endif
! }
md_apply_fix3 (fixP, (valueT *) & add_number, this_segment_type);
*************** fixup_segment (segP, this_segment_type)
*** 4549,4557 ****
(long) add_number,
(unsigned long) (fragP->fr_address + where));
#endif
! } /* not a bit fix */
! } /* For each fixS in this segment. */
! } /* fixup_segment() */
#endif
--- 4490,4498 ----
(long) add_number,
(unsigned long) (fragP->fr_address + where));
#endif
! }
! }
! }
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Fix compile time warnings for obj-coff.c when not BFD_ASSEMBLER,
Nick Clifton <=