# HG changeset patch # User Richard M. Stallman # Date 716254142 0 # Node ID 861c2997afee96d94f7f73bc034b20933f5142e2 # Parent 64d7858e7b48d07e2b8d74260d5836a036e48bd8 (unexec): Allow sections in any order. Adjust addresses of rdata section as well as data section. diff -r 64d7858e7b48 -r 861c2997afee src/unexmips.c --- a/src/unexmips.c Fri Sep 11 23:28:03 1992 +0000 +++ b/src/unexmips.c Fri Sep 11 23:29:02 1992 +0000 @@ -141,18 +141,16 @@ } #define CHECK_SCNHDR(ptr, name, flags) \ - if (strcmp (hdr.section[i].s_name, name) == 0) \ - { \ - if (hdr.section[i].s_flags != flags) \ - fprintf (stderr, "unexec: %x flags (%x expected) in %s section.\n", \ - hdr.section[i].s_flags, flags, name); \ - ptr = hdr.section + i; \ - i += 1; \ - } \ - else \ - ptr = NULL; + ptr = NULL; \ + for (i = 0; i < hdr.fhdr.f_nscns && !ptr; i++) \ + if (strcmp (hdr.section[i].s_name, name) == 0) \ + { \ + if (hdr.section[i].s_flags != flags) \ + fprintf (stderr, "unexec: %x flags (%x expected) in %s section.\n", \ + hdr.section[i].s_flags, flags, name); \ + ptr = hdr.section + i; \ + } \ - i = 0; CHECK_SCNHDR (text_section, _TEXT, STYP_TEXT); CHECK_SCNHDR (init_section, _INIT, STYP_INIT); CHECK_SCNHDR (rdata_section, _RDATA, STYP_RDATA); @@ -182,6 +180,12 @@ hdr.aout.bss_start = hdr.aout.data_start + hdr.aout.dsize; rdata_section->s_size = data_start - DATA_START; + + /* Adjust start and virtual addresses of rdata_section, too. */ + rdata_section->s_vaddr = DATA_START; + rdata_section->s_paddr = DATA_START; + rdata_section->s_scnptr = text_section->s_scnptr + hdr.aout.tsize; + data_section->s_vaddr = data_start; data_section->s_paddr = data_start; data_section->s_size = brk - data_start;