Thread View: gnu.epoch.misc
1 messages
1 total messages
Started by Shankar Unni
Fri, 28 Aug 1992 02:25
Patch for "unexmips.c" (SGI & MIPS)
Author: Shankar Unni
Date: Fri, 28 Aug 1992 02:25
Date: Fri, 28 Aug 1992 02:25
82 lines
3176 bytes
3176 bytes
Here is a patch for "unexmips.c" to make it work with the latest
release of SGI compilers (the 3.10 compilers) on the Irix 4.0.5
platform. This should continue to work with the old 2.* compilers as
well as the MIPS compilers.
The reasons for this patch:
(a) The order of sections seems to have been changed in the latest
release. Since we can't rely on the order, we need to linearly scan
the section list in the header for each section we are interested
in. Thus, we need to adjust the s_[vp]addr for rdata_section.
(b) The symbol-table is no longer at the end of the file - it now seems
to be between the text and data sections. Thus, we need to adjust
the scnptr for rdata_section, too.
============================== snip snip ==============================
*** unexmips.c.orig Fri Aug 7 14:36:00 1992
--- unexmips.c Thu Aug 27 19:10:46 1992
***************
*** 152,158 ****
--- 152,164 ----
exit(1);
}
+ /*
+ * The headers are no longer in text-init-rdata-data order. Therefore we
+ * have to do a linear search for each section in the section list.
+ */
#define CHECK_SCNHDR(ptr, name, flags) \
+ i = 0; ptr = NULL; \
+ while(i < hdr.fhdr.f_nscns && !ptr) { \
if (strcmp(hdr.section[i].s_name, name) == 0) { \
if (hdr.section[i].s_flags != flags) { \
fprintf(stderr, "unexec: %x flags where %x expected in %s section.\n", \
***************
*** 159,171 ****
hdr.section[i].s_flags, flags, name); \
} \
ptr = hdr.section + i; \
- i += 1; \
} \
! else { \
! ptr = NULL; \
! }
- i = 0;
CHECK_SCNHDR(text_section, _TEXT, STYP_TEXT);
CHECK_SCNHDR(init_section, _INIT, STYP_INIT);
CHECK_SCNHDR(rdata_section, _RDATA, STYP_RDATA);
--- 165,174 ----
hdr.section[i].s_flags, flags, name); \
} \
ptr = hdr.section + i; \
} \
! i += 1; \
! }
CHECK_SCNHDR(text_section, _TEXT, STYP_TEXT);
CHECK_SCNHDR(init_section, _INIT, STYP_INIT);
CHECK_SCNHDR(rdata_section, _RDATA, STYP_RDATA);
***************
*** 198,203 ****
--- 201,212 ----
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;
============================== snip snip ==============================
--
Shankar Unni E-Mail: shankar@sgi.com
Silicon Graphics Inc. Phone: +1-415-390-2072
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads