/[qemu]/qemu/linux-user/elfload.c
ViewVC logotype

Diff of /qemu/linux-user/elfload.c

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

revision 1.26 by bellard, Thu Feb 10 22:00:52 2005 UTC revision 1.27 by bellard, Sun Aug 21 10:12:28 2005 UTC
# Line 186  do { Line 186  do {
186   * - for compatibility with glibc ARCH_DLINFO must always be defined on PPC,   * - for compatibility with glibc ARCH_DLINFO must always be defined on PPC,
187   *   even if DLINFO_ARCH_ITEMS goes to zero or is undefined.   *   even if DLINFO_ARCH_ITEMS goes to zero or is undefined.
188   */   */
189  #define DLINFO_ARCH_ITEMS       3  #define DLINFO_ARCH_ITEMS       5
190  #define ARCH_DLINFO                                                     \  #define ARCH_DLINFO                                                     \
191  do {                                                                    \  do {                                                                    \
192          sp -= DLINFO_ARCH_ITEMS * 2;                                    \          NEW_AUX_ENT(AT_DCACHEBSIZE, 0x20);                              \
193          NEW_AUX_ENT(0, AT_DCACHEBSIZE, 0x20);                           \          NEW_AUX_ENT(AT_ICACHEBSIZE, 0x20);                              \
194          NEW_AUX_ENT(1, AT_ICACHEBSIZE, 0x20);                           \          NEW_AUX_ENT(AT_UCACHEBSIZE, 0);                                 \
         NEW_AUX_ENT(2, AT_UCACHEBSIZE, 0);                              \  
195          /*                                                              \          /*                                                              \
196           * Now handle glibc compatibility.                              \           * Now handle glibc compatibility.                              \
197           */                                                             \           */                                                             \
198          sp -= 2*2;                                                      \          NEW_AUX_ENT(AT_IGNOREPPC, AT_IGNOREPPC);                        \
199          NEW_AUX_ENT(0, AT_IGNOREPPC, AT_IGNOREPPC);                     \          NEW_AUX_ENT(AT_IGNOREPPC, AT_IGNOREPPC);                        \
         NEW_AUX_ENT(1, AT_IGNOREPPC, AT_IGNOREPPC);                     \  
200   } while (0)   } while (0)
201    
202  static inline void init_thread(struct target_pt_regs *_regs, struct image_info *infop)  static inline void init_thread(struct target_pt_regs *_regs, struct image_info *infop)
# Line 643  static unsigned int * create_elf_tables( Line 641  static unsigned int * create_elf_tables(
641          if ((unsigned long)csp & 15UL)          if ((unsigned long)csp & 15UL)
642              sp -= ((unsigned long)csp & 15UL) / sizeof(*sp);              sp -= ((unsigned long)csp & 15UL) / sizeof(*sp);
643                    
644  #define NEW_AUX_ENT(nr, id, val) \  #define NEW_AUX_ENT(id, val) \
645            put_user (id, sp + (nr * 2)); \            sp -= 2; \
646            put_user (val, sp + (nr * 2 + 1))            put_user (id, sp); \
647          sp -= 2;            put_user (val, sp + 1)
648          NEW_AUX_ENT (0, AT_NULL, 0);          NEW_AUX_ENT (AT_NULL, 0);
649    
650          sp -= DLINFO_ITEMS*2;          /* There must be exactly DLINFO_ITEMS entries here.  */
651          NEW_AUX_ENT( 0, AT_PHDR, (target_ulong)(load_addr + exec->e_phoff));          NEW_AUX_ENT(AT_PHDR, (target_ulong)(load_addr + exec->e_phoff));
652          NEW_AUX_ENT( 1, AT_PHENT, (target_ulong)(sizeof (struct elf_phdr)));          NEW_AUX_ENT(AT_PHENT, (target_ulong)(sizeof (struct elf_phdr)));
653          NEW_AUX_ENT( 2, AT_PHNUM, (target_ulong)(exec->e_phnum));          NEW_AUX_ENT(AT_PHNUM, (target_ulong)(exec->e_phnum));
654          NEW_AUX_ENT( 3, AT_PAGESZ, (target_ulong)(TARGET_PAGE_SIZE));          NEW_AUX_ENT(AT_PAGESZ, (target_ulong)(TARGET_PAGE_SIZE));
655          NEW_AUX_ENT( 4, AT_BASE, (target_ulong)(interp_load_addr));          NEW_AUX_ENT(AT_BASE, (target_ulong)(interp_load_addr));
656          NEW_AUX_ENT( 5, AT_FLAGS, (target_ulong)0);          NEW_AUX_ENT(AT_FLAGS, (target_ulong)0);
657          NEW_AUX_ENT( 6, AT_ENTRY, load_bias + exec->e_entry);          NEW_AUX_ENT(AT_ENTRY, load_bias + exec->e_entry);
658          NEW_AUX_ENT( 7, AT_UID, (target_ulong) getuid());          NEW_AUX_ENT(AT_UID, (target_ulong) getuid());
659          NEW_AUX_ENT( 8, AT_EUID, (target_ulong) geteuid());          NEW_AUX_ENT(AT_EUID, (target_ulong) geteuid());
660          NEW_AUX_ENT( 9, AT_GID, (target_ulong) getgid());          NEW_AUX_ENT(AT_GID, (target_ulong) getgid());
661          NEW_AUX_ENT(11, AT_EGID, (target_ulong) getegid());          NEW_AUX_ENT(AT_EGID, (target_ulong) getegid());
662  #ifdef ARCH_DLINFO  #ifdef ARCH_DLINFO
663          /*          /*
664           * ARCH_DLINFO must come last so platform specific code can enforce           * ARCH_DLINFO must come last so platform specific code can enforce

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

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