/[gcl]/gcl/unixport/rsym_elf.c
ViewVC logotype

Diff of /gcl/unixport/rsym_elf.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by camm, Thu Jul 25 19:08:24 2002 UTC revision 1.10 by camm, Thu Jul 25 21:49:47 2002 UTC
# Line 28  to compile use cc rsym.c -o rsym  -I../h Line 28  to compile use cc rsym.c -o rsym  -I../h
28    
29    
30  #include <elf.h>  #include <elf.h>
31  Elf32_Phdr pheader;  ElfW(Phdr) pheader;
32  Elf32_Ehdr eheader;  ElfW(Ehdr) eheader;
33  Elf32_Sym *symbol_table;  ElfW(Sym) *symbol_table;
34  int text_index,data_index,bss_index,sbss_index;  int text_index,data_index,bss_index,sbss_index;
35  #undef SYM_NAME  #undef SYM_NAME
36  #undef EXT_and_TEXT_BSS_DAT  #undef EXT_and_TEXT_BSS_DAT
37    #define mjoin(a,b) a ## b
38    #define Mjoin(a,b) mjoin(a,b)
39    #define ELFW(a) Mjoin(ELF,Mjoin(__ELF_NATIVE_CLASS,Mjoin(_,a)))
40    
41  int nsyms;  int nsyms;
42  char *my_string_table;  char *my_string_table;
# Line 71  int Line 73  int
73  output_externals(char *);  output_externals(char *);
74    
75  int  int
76  main(argc,argv)  main(argc,argv,envp)
77  int argc ;  int argc ;
78  char *argv[];  char *argv[],*envp[];
79  {  {
80    if (argc!=3) {perror("bad arg count");    if (argc!=3) {perror("bad arg count");
81                  fflush(stdout);                  fflush(stdout);
# Line 87  char *argv[]; Line 89  char *argv[];
89  }  }
90  #define SECTION_H(k) section_headers[k]  #define SECTION_H(k) section_headers[k]
91  char *section_names;  char *section_names;
92  Elf32_Shdr *section_headers;  ElfW(Shdr) *section_headers;
93    
94  int  int
95  get_section_number(name)  get_section_number(name)
# Line 152  char *filename; Line 154  char *filename;
154            fprintf(stderr,"Bad magic %s",filename);            fprintf(stderr,"Bad magic %s",filename);
155            exit(1);};            exit(1);};
156    
157          section_headers = (void *)malloc(sizeof(Elf32_Shdr)*          section_headers = (void *)malloc(sizeof(ElfW(Shdr))*
158                                   (1+ eheader.e_shnum));                                   (1+ eheader.e_shnum));
159          fseek(fp,eheader.e_shoff,0);          fseek(fp,eheader.e_shoff,0);
160          for (i=0 ; i< eheader.e_shnum ; i++)          for (i=0 ; i< eheader.e_shnum ; i++)
# Line 163  char *filename; Line 165  char *filename;
165          symsize = SECTION_H(symbol_index).sh_entsize;          symsize = SECTION_H(symbol_index).sh_entsize;
166          nsyms= SECTION_H(symbol_index).sh_size/symsize;          nsyms= SECTION_H(symbol_index).sh_size/symsize;
167          symbol_table          symbol_table
168          = (void *) malloc(sizeof(Elf32_Sym) * nsyms);          = (void *) malloc(sizeof(ElfW(Sym)) * nsyms);
169          /*          /*
170          sizeof(struct syment) and SYMESZ are not always the same.          sizeof(struct syment) and SYMESZ are not always the same.
171          */          */
# Line 186  char *filename; Line 188  char *filename;
188    
189  struct lsymbol_table tab;  struct lsymbol_table tab;
190    
191  #define EXT_and_TEXT_BSS_DAT(p) (((ELF32_ST_BIND(p->st_info) == STB_GLOBAL) \  #define EXT_and_TEXT_BSS_DAT(p) (((ELFW(ST_BIND)(p->st_info) == STB_GLOBAL) \
192                                    || (ELF32_ST_BIND(p->st_info) == STB_WEAK) \                                    || (ELFW(ST_BIND)(p->st_info) == STB_WEAK) \
193                                    ) \                                    ) \
194                                   && \                                   && \
195                                   (p->st_shndx == text_index \                                   (p->st_shndx == text_index \
# Line 197  struct lsymbol_table tab; Line 199  struct lsymbol_table tab;
199                                    || p->st_shndx == SHN_UNDEF \                                    || p->st_shndx == SHN_UNDEF \
200                                    ))                                    ))
201  #define SYM_NAME(p) my_string_table+(p->st_name)  #define SYM_NAME(p) my_string_table+(p->st_name)
202  #define STRUCT_SYMENT Elf32_Sym  #define STRUCT_SYMENT ElfW(Sym)
203  #define n_value st_value    #define n_value st_value  
204                                                                    
205                                                                    
# Line 281  char *out; Line 283  char *out;
283    
284   return 0;   return 0;
285  }  }
   
   
   

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26