fix 'extern inline' handling to use gnu inlines http://bugs.gentoo.org/204610 --- elfutils-0.131/backends/ia64_retval.c +++ elfutils-0.131/backends/ia64_retval.c @@ -96,7 +96,7 @@ If we find a datum that's not the same FP type as the first datum, punt. If we count more than eight total homogeneous FP data, punt. */ - inline int hfa (const Dwarf_Op *loc, int nregs) + __gnu_inline int hfa (const Dwarf_Op *loc, int nregs) { if (fpregs_used == 0) *locp = loc; --- elfutils-0.131/libdw/dwarf_entry_breakpoints.c +++ elfutils-0.131/libdw/dwarf_entry_breakpoints.c @@ -64,7 +64,7 @@ *bkpts = NULL; /* Add one breakpoint location to the result vector. */ - inline int add_bkpt (Dwarf_Addr pc) + __gnu_inline int add_bkpt (Dwarf_Addr pc) { Dwarf_Addr *newlist = realloc (*bkpts, ++nbkpts * sizeof newlist[0]); if (newlist == NULL) @@ -80,7 +80,7 @@ } /* Fallback result, break at the entrypc/lowpc value. */ - inline int entrypc_bkpt (void) + __gnu_inline int entrypc_bkpt (void) { Dwarf_Addr pc; return INTUSE(dwarf_entrypc) (die, &pc) < 0 ? -1 : add_bkpt (pc); @@ -107,7 +107,7 @@ /* Search a contiguous PC range for prologue-end markers. If DWARF, look for proper markers. Failing that, if ADHOC, look for the ad hoc convention. */ - inline int search_range (Dwarf_Addr low, Dwarf_Addr high, + __gnu_inline int search_range (Dwarf_Addr low, Dwarf_Addr high, bool dwarf, bool adhoc) { size_t l = 0, u = nlines; --- elfutils-0.131/libdw/dwarf_getscopevar.c +++ elfutils-0.131/libdw/dwarf_getscopevar.c @@ -93,7 +93,7 @@ size_t match_file_len = match_file == NULL ? 0 : strlen (match_file); bool lastfile_matches = false; const char *lastfile = NULL; - inline bool file_matches (Dwarf_Files *files, size_t idx) + __gnu_inline bool file_matches (Dwarf_Files *files, size_t idx) { if (idx >= files->nfiles) return false; --- elfutils-0.131/libdw/libdw.h +++ elfutils-0.131/libdw/libdw.h @@ -633,6 +633,12 @@ /* Inline optimizations. */ +#if defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) +# define __gnu_inline inline __attribute__ ((__gnu_inline__)) +#else +# define __gnu_inline inline +#endif + #ifdef __OPTIMIZE__ /* Return attribute code of given attribute. */ __libdw_extern_inline unsigned int dwarf_whatattr (Dwarf_Attribute *attr) --- elfutils-0.131/libdw/libdw_visit_scopes.c +++ elfutils-0.131/libdw/libdw_visit_scopes.c @@ -109,7 +109,7 @@ if (INTUSE(dwarf_child) (&root->die, &child.die) != 0) return -1; - inline int recurse (void) + __gnu_inline int recurse (void) { return __libdw_visit_scopes (depth + 1, &child, previsit, postvisit, arg); --- elfutils-0.131/libdwfl/argp-std.c +++ elfutils-0.131/libdwfl/argp-std.c @@ -106,7 +106,7 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) { - inline void failure (Dwfl *dwfl, int errnum, const char *msg) + __gnu_inline void failure (Dwfl *dwfl, int errnum, const char *msg) { if (errnum == -1) argp_failure (state, EXIT_FAILURE, 0, "%s: %s", @@ -116,7 +116,7 @@ if (dwfl != NULL) dwfl_end (dwfl); } - inline error_t fail (Dwfl *dwfl, int errnum, const char *msg) + __gnu_inline error_t fail (Dwfl *dwfl, int errnum, const char *msg) { failure (dwfl, errnum, msg); return errnum == -1 ? EIO : errnum; --- elfutils-0.131/libdwfl/dwfl_module_addrsym.c +++ elfutils-0.131/libdwfl/dwfl_module_addrsym.c @@ -59,7 +59,7 @@ /* Return true iff we consider ADDR to lie in the same section as SYM. */ GElf_Word addr_shndx = SHN_UNDEF; - inline bool same_section (const GElf_Sym *sym, GElf_Word shndx) + __gnu_inline bool same_section (const GElf_Sym *sym, GElf_Word shndx) { /* For absolute symbols and the like, only match exactly. */ if (shndx >= SHN_LORESERVE) --- elfutils-0.131/libdwfl/dwfl_module_getsrc_file.c +++ elfutils-0.131/libdwfl/dwfl_module_getsrc_file.c @@ -79,15 +79,15 @@ && cu != NULL && (error = __libdwfl_cu_getsrclines (cu)) == DWFL_E_NOERROR) { - inline const char *INTUSE(dwarf_line_file) (const Dwarf_Line *line) + __gnu_inline const char *INTUSE(dwarf_line_file) (const Dwarf_Line *line) { return line->files->info[line->file].name; } - inline Dwarf_Line *dwfl_line (const Dwfl_Line *line) + __gnu_inline Dwarf_Line *dwfl_line (const Dwfl_Line *line) { return &dwfl_linecu (line)->die.cu->lines->info[line->idx]; } - inline const char *dwfl_line_file (const Dwfl_Line *line) + __gnu_inline const char *dwfl_line_file (const Dwfl_Line *line) { return INTUSE(dwarf_line_file) (dwfl_line (line)); } --- elfutils-0.131/libdwfl/elf-from-memory.c +++ elfutils-0.131/libdwfl/elf-from-memory.c @@ -216,7 +216,7 @@ bool found_base = false; switch (ehdr.e32.e_ident[EI_CLASS]) { - inline void handle_segment (GElf_Addr vaddr, GElf_Off offset, + __gnu_inline void handle_segment (GElf_Addr vaddr, GElf_Off offset, GElf_Xword filesz, GElf_Xword align) { GElf_Off segment_end = ((offset + filesz + align - 1) & -align); @@ -280,7 +280,7 @@ switch (ehdr.e32.e_ident[EI_CLASS]) { - inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset, + __gnu_inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset, GElf_Xword filesz, GElf_Xword align) { GElf_Off start = offset & -align; --- elfutils-0.131/libdwfl/linux-kernel-modules.c +++ elfutils-0.131/libdwfl/linux-kernel-modules.c @@ -541,7 +541,7 @@ { Dwarf_Addr start; Dwarf_Addr end; - inline Dwfl_Module *report (void) + __gnu_inline Dwfl_Module *report (void) { return INTUSE(dwfl_report_module) (dwfl, KERNEL_MODNAME, start, end); } @@ -628,7 +628,7 @@ only '_' and one only using '-'. */ char alternate_name[namelen + 1]; - inline bool subst_name (char from, char to) + __gnu_inline bool subst_name (char from, char to) { const char *n = memchr (module_name, from, namelen); if (n == NULL) --- elfutils-0.131/libdwfl/linux-proc-maps.c +++ elfutils-0.131/libdwfl/linux-proc-maps.c @@ -134,7 +134,7 @@ char *last_file = NULL; Dwarf_Addr low = 0, high = 0; - inline bool report (void) + __gnu_inline bool report (void) { if (last_file != NULL) { --- elfutils-0.131/src/ld.h +++ elfutils-0.131/src/ld.h @@ -1087,7 +1087,7 @@ /* Checked whether the symbol is undefined and referenced from a DSO. */ extern bool linked_from_dso_p (struct scninfo *scninfo, size_t symidx); -extern inline bool +extern __gnu_inline bool linked_from_dso_p (struct scninfo *scninfo, size_t symidx) { struct usedfiles *file = scninfo->fileinfo; --- elfutils-0.131/src/readelf.c +++ elfutils-0.131/src/readelf.c @@ -5722,7 +5722,7 @@ qsort (regs, maxreg + 1, sizeof regs[0], &compare_registers); /* Collect the unique sets and sort them. */ - inline bool same_set (const struct register_info *a, + __gnu_inline bool same_set (const struct register_info *a, const struct register_info *b) { return (a < ®s[maxnreg] && a->regloc != NULL --- elfutils-0.131/src/strip.c +++ elfutils-0.131/src/strip.c @@ -1336,7 +1336,7 @@ /* Update section headers when the data size has changed. We also update the SHT_NOBITS section in the debug file so that the section headers match in sh_size. */ - inline void update_section_size (const Elf_Data *newdata) + __gnu_inline void update_section_size (const Elf_Data *newdata) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); --- elfutils-0.131/src/unstrip.c +++ elfutils-0.131/src/unstrip.c @@ -389,7 +389,7 @@ { Elf_Data *data = elf_getdata (outscn, NULL); - inline void adjust_reloc (GElf_Xword *info) + __gnu_inline void adjust_reloc (GElf_Xword *info) { size_t ndx = GELF_R_SYM (*info); if (ndx != STN_UNDEF) @@ -1039,7 +1039,7 @@ } bool fail = false; - inline void check_match (bool match, Elf_Scn *scn, const char *name) + __gnu_inline void check_match (bool match, Elf_Scn *scn, const char *name) { if (!match) { @@ -1267,7 +1267,7 @@ } /* Locate a matching unallocated section in SECTIONS. */ - inline struct section *find_unalloc_section (const GElf_Shdr *shdr, + __gnu_inline struct section *find_unalloc_section (const GElf_Shdr *shdr, const char *name) { size_t l = nalloc, u = stripped_shnum - 1; @@ -2182,7 +2182,7 @@ handle_implicit_modules (const struct arg_info *info) { struct match_module_info mmi = { info->args, NULL, info->match_files }; - inline ptrdiff_t next (ptrdiff_t offset) + __gnu_inline ptrdiff_t next (ptrdiff_t offset) { return dwfl_getmodules (info->dwfl, &match_module, &mmi, offset); }