Viewing file: pr41750.c (1.14 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR 41750 - IPA-SRA used to pass hash->sgot by value rather than by reference. */
struct bfd_link_hash_table { int hash; };
struct foo_link_hash_table { struct bfd_link_hash_table root; int *dynobj; int *sgot; };
struct foo_link_info { struct foo_link_hash_table *hash; };
extern void abort (void);
int __attribute__((noinline)) foo_create_got_section (int *abfd, struct foo_link_info *info) { info->hash->sgot = abfd; return 1; }
static int * get_got (int *abfd, struct foo_link_info *info, struct foo_link_hash_table *hash) { int *got; int *dynobj;
got = hash->sgot; if (!got) { dynobj = hash->dynobj; if (!dynobj) hash->dynobj = dynobj = abfd; if (!foo_create_got_section (dynobj, info)) return 0; got = hash->sgot; } return got; }
int * __attribute__((noinline,noclone)) elf64_ia64_check_relocs (int *abfd, struct foo_link_info *info) { return get_got (abfd, info, info->hash); }
struct foo_link_info link_info; struct foo_link_hash_table hash; int abfd;
int main () { link_info.hash = &hash; if (elf64_ia64_check_relocs (&abfd, &link_info) != &abfd) abort (); return 0; }
|