/* b.out object file format
- Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
License along with GAS; see the file COPYING. If not, write
to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-/* $Id$ */
-
#include "as.h"
#include "obstack.h"
#include "aout/stab_gnu.h"
SEG_GOOF,
};
-#ifdef __STDC__
+#if __STDC__ == 1
static void obj_bout_stab(int what);
static void obj_bout_line(void);
static void obj_bout_desc(void);
-#else /* __STDC__ */
+#else /* not __STDC__ */
static void obj_bout_desc();
static void obj_bout_stab();
static void obj_bout_line();
-#endif /* __STDC__ */
+#endif /* not __STDC__ */
const pseudo_typeS obj_pseudo_table[] = {
/* stabs (aka a.out aka b.out directives for debug symbols) */
relax_addressT segment_address_in_file;
{
for (; fixP; fixP = fixP->fx_next) {
- if (fixP->fx_addsy != NULL) {
+ if (fixP->fx_addsy != NULL
+ || fixP->fx_r_type != NO_RELOC) {
tc_bout_fix_to_chars(*where, fixP, segment_address_in_file);
*where += sizeof(struct relocation_info);
} /* if there's a symbol */
headers->header.a_tload = 0;
headers->header.a_dload = md_section_align(SEG_DATA, H_GET_TEXT_SIZE(headers));
-
+
+ headers->header.a_relaxable = linkrelax;
+
+#ifdef CROSS_COMPILE
+ md_number_to_chars(*where, headers->header.a_magic, sizeof(headers->header.a_magic));
+ *where += sizeof(headers->header.a_magic);
+ md_number_to_chars(*where, headers->header.a_text, sizeof(headers->header.a_text));
+ *where += sizeof(headers->header.a_text);
+ md_number_to_chars(*where, headers->header.a_data, sizeof(headers->header.a_data));
+ *where += sizeof(headers->header.a_data);
+ md_number_to_chars(*where, headers->header.a_bss, sizeof(headers->header.a_bss));
+ *where += sizeof(headers->header.a_bss);
+ md_number_to_chars(*where, headers->header.a_syms, sizeof(headers->header.a_syms));
+ *where += sizeof(headers->header.a_syms);
+ md_number_to_chars(*where, headers->header.a_entry, sizeof(headers->header.a_entry));
+ *where += sizeof(headers->header.a_entry);
+ md_number_to_chars(*where, headers->header.a_trsize, sizeof(headers->header.a_trsize));
+ *where += sizeof(headers->header.a_trsize);
+ md_number_to_chars(*where, headers->header.a_drsize, sizeof(headers->header.a_drsize));
+ *where += sizeof(headers->header.a_drsize);
+ md_number_to_chars(*where, headers->header.a_tload, sizeof(headers->header.a_tload));
+ *where += sizeof(headers->header.a_tload);
+ md_number_to_chars(*where, headers->header.a_dload, sizeof(headers->header.a_dload));
+ *where += sizeof(headers->header.a_dload);
+ md_number_to_chars(*where, headers->header.a_talign, sizeof(headers->header.a_talign));
+ *where += sizeof(headers->header.a_talign);
+ md_number_to_chars(*where, headers->header.a_dalign, sizeof(headers->header.a_dalign));
+ *where += sizeof(headers->header.a_dalign);
+ md_number_to_chars(*where, headers->header.a_balign, sizeof(headers->header.a_balign));
+ *where += sizeof(headers->header.a_balign);
+ md_number_to_chars(*where, headers->header.a_relaxable, sizeof(headers->header.a_relaxable));
+ *where += sizeof(headers->header.a_relaxable);
+#else /* ! CROSS_COMPILE */
append(where, (char *) &headers->header, sizeof(headers->header));
+#endif /* ! CROSS_COMPILE */
} /* a_header_append() */
void obj_symbol_to_chars(where, symbolP)
char **where;
symbolS *symbolP;
{
- /* leave in host byte order */
+ md_number_to_chars((char *)&(S_GET_OFFSET(symbolP)), S_GET_OFFSET(symbolP), sizeof(S_GET_OFFSET(symbolP)));
+ md_number_to_chars((char *)&(S_GET_DESC(symbolP)), S_GET_DESC(symbolP), sizeof(S_GET_DESC(symbolP)));
+ md_number_to_chars((char *)&(S_GET_VALUE(symbolP)), S_GET_VALUE(symbolP), sizeof(S_GET_VALUE(symbolP)));
+
append(where, (char *)&symbolP->sy_symbol, sizeof(obj_symbol_type));
} /* obj_symbol_to_chars() */