| /* { dg-do compile { target { ! ia32 } } } */ |
| /* { dg-require-effective-target maybe_x32 } */ |
| /* { dg-require-effective-target fpic } */ |
| /* { dg-options "-O2 -mx32 -maddress-mode=long -fpic" } */ |
| |
| typedef int int32_t; |
| typedef unsigned int uint32_t; |
| typedef int32_t Elf32_Sword; |
| typedef struct |
| { |
| Elf32_Sword d_tag; |
| } Elf32_Dyn; |
| struct link_map |
| { |
| Elf32_Dyn *l_ld; |
| Elf32_Dyn *l_info[34]; |
| }; |
| extern struct link_map _dl_rtld_map __attribute__ ((visibility ("hidden"))); |
| static void elf_get_dynamic_info (struct link_map *l) |
| { |
| Elf32_Dyn *dyn = l->l_ld; |
| Elf32_Dyn **info; |
| info = l->l_info; |
| while (dyn->d_tag != 0) |
| { |
| if ((uint32_t) (0x6ffffeff - dyn->d_tag) < 11) |
| info[0x6ffffeff - dyn->d_tag + 12] = dyn; |
| ++dyn; |
| } |
| } |
| void |
| foo (void) |
| { |
| elf_get_dynamic_info (&_dl_rtld_map); |
| } |