Flag error if absolute constant is too large for an immediate field.
[deliverable/binutils-gdb.git] / gas / config / obj-bout.c
index 74cfd45ca1e883284c5ad4d7401738dc0c204aab..0cca3b0309e1cc78a586517a5595d50970d28450 100644 (file)
@@ -53,15 +53,15 @@ const segT N_TYPE_seg [N_TYPE+2] = {        /* N_TYPE == 0x1E = 32-2 */
        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) */
@@ -102,7 +102,8 @@ fixS *fixP; /* Fixup chain for this segment. */
 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 */
@@ -130,15 +131,51 @@ object_headers *headers;
        
        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() */
 
This page took 0.024541 seconds and 4 git commands to generate.