source: patches/elftoaout-2.3-64bit_fixes-1.patch @ 3dd4698

clfs-3.0.0-systemdsystemd
Last change on this file since 3dd4698 was 69cde8d, checked in by Jim Gifford <clfs@…>, 18 years ago

Added: All patches needed for the book.

  • Property mode set to 100644
File size: 6.7 KB
RevLine 
[69cde8d]1Submitted By: Jim Gifford (patches at jg555 dot com)
2Date: 2006-01-03
3Initial Package Version: 2.3
4Origin: Dave Miller
5Upstream Status: Unknown
6Description: Fixes 64 Bit Issues with Elftoaout
7
8        http://marc.theaimsgroup.com/?l=linux-sparc&m=113617505627794&w=2
9 
10diff -Naur elftoaout-2.3.orig/elftoaout.c elftoaout-2.3/elftoaout.c
11--- elftoaout-2.3.orig/elftoaout.c      2000-06-03 20:20:12.000000000 +0000
12+++ elftoaout-2.3/elftoaout.c   2006-01-03 22:33:28.000000000 +0000
13@@ -20,16 +20,36 @@
14  */
15 #include <stdio.h>
16 #include <stdlib.h>
17-#ifdef linux
18 #include <linux/elf.h>
19-#define ELFDATA2MSB   2
20-#else
21-#include <sys/elf.h>
22-#endif
23-
24-#define swab16(x)  (((x)<<8&0xFF00)|((x)>>8&0x00FF))
25-#define swab32(x)  (((x)<<24&0xFF000000)|((x)<<8&0x00FF0000)|((x)>>24&0x000000FF)|((x)>>8&0x0000FF00))
26-#define swab64(x)  ((((unsigned long long)(swab32((unsigned int)x))) << 32) | (swab32(((unsigned long long)x)>>32)))
27+#include <sys/types.h>
28+
29+static inline u_int16_t swab16(u_int16_t x)
30+{
31+       return (((x << 8)  & 0xFF00) |
32+               ((x >> 8) & 0x00FF));
33+}
34+
35+static inline u_int32_t swab32(u_int32_t x)
36+{
37+       return (((x << 24) & 0xFF000000) |
38+               ((x <<  8) & 0x00FF0000) |
39+               ((x >> 24) & 0x000000FF) |
40+               ((x >>  8) & 0x0000FF00));
41+}
42+
43+static inline u_int64_t swab64(u_int64_t x)
44+{
45+       return ((u_int64_t)
46+       ((u_int64_t)(((u_int64_t)x & (u_int64_t)0x00000000000000ffULL) << 56) |
47+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x000000000000ff00ULL) << 40) |
48+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x0000000000ff0000ULL) << 24) |
49+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x00000000ff000000ULL) <<  8) |
50+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x000000ff00000000ULL) >>  8) |
51+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x0000ff0000000000ULL) >> 24) |
52+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0x00ff000000000000ULL) >> 40) |
53+        (u_int64_t)(((u_int64_t)x & (u_int64_t)0xff00000000000000ULL) >> 56)));
54+}
55+
56 
57 /* We carry a.out header here in order to compile the thing on Solaris */
58 
59@@ -37,14 +57,14 @@
60 #define        CMAGIC      0x01030108
61 
62 typedef struct {
63-       unsigned long   a_magic;        /* magic number */
64-       unsigned long   a_text;         /* size of text segment */
65-       unsigned long   a_data;         /* size of initialized data */
66-       unsigned long   a_bss;          /* size of uninitialized data */
67-       unsigned long   a_syms;         /* size of symbol table || checksum */
68-       unsigned long   a_entry;        /* entry point */
69-       unsigned long   a_trsize;       /* size of text relocation */
70-       unsigned long   a_drsize;       /* size of data relocation */
71+       u_int32_t       a_magic;        /* magic number */
72+       u_int32_t       a_text;         /* size of text segment */
73+       u_int32_t       a_data;         /* size of initialized data */
74+       u_int32_t       a_bss;          /* size of uninitialized data */
75+       u_int32_t       a_syms;         /* size of symbol table || checksum */
76+       u_int32_t       a_entry;        /* entry point */
77+       u_int32_t       a_trsize;       /* size of text relocation */
78+       u_int32_t       a_drsize;       /* size of data relocation */
79 } Exec;
80 
81 
82@@ -56,17 +76,16 @@
83        int swab;
84        int sparc64;
85        int csum;
86-       /* friend void Usage(void); */
87 } Application;
88 
89 typedef struct {
90        Elf32_Phdr *tab;
91-       unsigned len;
92+       unsigned int len;
93 } ProgTable;
94 
95 typedef struct {
96        Elf64_Phdr *tab;
97-       unsigned len;
98+       unsigned int len;
99 } ProgTable64;
100 
101 void get_ptab(ProgTable *t, FILE *inp, const Elf32_Ehdr *h);
102@@ -75,9 +94,9 @@
103 void print_ptab64(ProgTable64 *t);
104 
105 typedef struct {
106-       char *buf;                /* Image data */
107-       unsigned len;             /* Length of buffer */
108-       unsigned bss;             /* Length of extra data */
109+       unsigned char *buf;       /* Image data */
110+       unsigned int len;         /* Length of buffer */
111+       unsigned int bss;         /* Length of extra data */
112 } Segment;
113 
114 void load_image(Segment *t, const ProgTable *h, FILE *inp);
115@@ -105,7 +124,8 @@
116 
117        parse_args(&prog, argc, argv);
118 
119-       if (prog.version) Version();
120+       if (prog.version)
121+               Version();
122 
123        if (freopen(prog.iname, "r", stdin) == NULL) {
124                fprintf(stderr, "Cannot open \"%s\"\n", prog.iname);
125@@ -141,7 +161,8 @@
126        exit(0);
127 }
128 
129-void parse_args( Application *t, unsigned argc, const char **argv ){
130+void parse_args( Application *t, unsigned argc, const char **argv )
131+{
132        const char *arg;
133        union {
134                char c[4];
135@@ -185,8 +206,8 @@
136        if (t->csum && t->sun4_mode) Usage ();  /* Checksum lives in header. */
137 }
138 
139-void get_header(Elf32_Ehdr *t, FILE *inp) {
140-
141+void get_header(Elf32_Ehdr *t, FILE *inp)
142+{
143         if (fread((void*) t, sizeof(Elf64_Ehdr), 1, inp) != 1) {
144                fprintf(stderr, "Read error on header\n");
145                exit(1);
146@@ -249,8 +270,9 @@
147        }
148 }
149 
150-void get_ptab(ProgTable *t, FILE *inp, const Elf32_Ehdr *h) {
151-       unsigned x;
152+void get_ptab(ProgTable *t, FILE *inp, const Elf32_Ehdr *h)
153+{
154+       unsigned int x;
155 
156        /** fprintf(stderr, "Program header table off = 0x%x\n",
157                (unsigned) h->e_phoff); **/
158@@ -294,8 +316,9 @@
159        }
160 }
161 
162-void get_ptab64(ProgTable64 *t, FILE *inp, const Elf64_Ehdr *h) {
163-       unsigned x;
164+void get_ptab64(ProgTable64 *t, FILE *inp, const Elf64_Ehdr *h)
165+{
166+       unsigned int x;
167 
168        if (h->e_phoff == 0) {
169                fprintf(stderr, "No Program Header Table\n");
170@@ -332,8 +355,9 @@
171        }
172 }
173 
174-void print_ptab(ProgTable *t) {
175-       unsigned x;
176+void print_ptab(ProgTable *t)
177+{
178+       unsigned int x;
179        const Elf32_Phdr *p;
180 
181        for (x = 0; x < t->len; x++) {
182@@ -374,8 +398,9 @@
183        }
184 }
185 
186-void print_ptab64(ProgTable64 *t) {
187-       unsigned x;
188+void print_ptab64(ProgTable64 *t)
189+{
190+       unsigned int x;
191        const Elf64_Phdr *p;
192 
193        for (x = 0; x < t->len; x++) {
194@@ -387,8 +412,11 @@
195                        break;
196                case PT_LOAD:
197                        printf("Loadable to 0x%Lx[0x%Lx] from 0x%Lx[0x%Lx] align 0x%Lx",
198-                               p->p_vaddr, p->p_memsz, p->p_offset, p->p_filesz,
199-                               p->p_align);
200+                              (unsigned long long) p->p_vaddr,
201+                              (unsigned long long) p->p_memsz,
202+                              (unsigned long long) p->p_offset,
203+                              (unsigned long long) p->p_filesz,
204+                              (unsigned long long) p->p_align);
205                        break;
206                case PT_DYNAMIC:
207                        printf("Dynamic");
208@@ -416,9 +444,10 @@
209        }
210 }
211 
212-void load_image(Segment *t, const ProgTable *tp, FILE *inp) {
213+void load_image(Segment *t, const ProgTable *tp, FILE *inp)
214+{
215        Elf32_Phdr *p, *q;
216-       unsigned x;
217+       unsigned int x;
218        unsigned long off, len;
219 
220        p = 0;
221@@ -484,9 +513,10 @@
222        }
223 }
224 
225-void load_image64(Segment *t, const ProgTable64 *tp, FILE *inp) {
226+void load_image64(Segment *t, const ProgTable64 *tp, FILE *inp)
227+{
228        Elf64_Phdr *p, *q;
229-       unsigned x;
230+       unsigned int x;
231        unsigned long long off, len;
232 
233        p = 0;
234@@ -547,7 +577,8 @@
235        }
236 }
237 
238-void store_image(Segment *t, FILE *out) {
239+void store_image(Segment *t, FILE *out)
240+{
241        Exec ohdb;
242 
243        if (prog.swab) {
244@@ -585,13 +616,15 @@
245        return;
246 }
247 
248-void Usage(){
249+void Usage()
250+{
251        if (prog.version) Version();
252        fprintf(stderr, "Usage: elftoaout [-o output] [-c|-b] [-V] input\n");
253        exit(1);
254 }
255 
256-void Version(){
257+void Version()
258+{
259        printf("elftoaout 2.3: ELF to a.out convertor for SPARC and SPARC64 bootstraps\n");
260 }
261 
Note: See TracBrowser for help on using the repository browser.