From: Roland McGrath Date: Sun, 9 Aug 2009 22:40:52 +0000 (-0700) Subject: New macros for symbol versioning definitions, use them for libdw convenience wrappers... X-Git-Tag: elfutils-0.143~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ebfb6484d5e164f2b7f428a8c92d55c4083f55fd;p=thirdparty%2Felfutils.git New macros for symbol versioning definitions, use them for libdw convenience wrappers just changed. --- diff --git a/lib/ChangeLog b/lib/ChangeLog index 069918262..73f8e73ab 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2009-08-09 Roland McGrath + + * eu-config.h (OLD_VERSION, NEW_VERSION, COMPAT_VERSION): New macros. + 2009-01-23 Roland McGrath * eu-config.h: Add multiple inclusion protection. diff --git a/lib/eu-config.h b/lib/eu-config.h index 32f501ae3..f814604fe 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -183,4 +183,21 @@ asm (".section predict_data, \"aw\"; .previous\n" #define ELFUTILS_HEADER(name) +#ifdef SHARED +# define OLD_VERSION(name, version) \ + asm (".globl _compat." #version "." #name "\n" \ + "_compat." #version "." #name " = " #name "\n" \ + ".symver _compat." #version "." #name "," #name "@" #version); +# define NEW_VERSION(name, version) \ + asm (".symver " #name "," #name "@@@" #version); +# define COMPAT_VERSION(name, version, prefix) \ + asm (".symver _compat." #version "." #name "," #name "@" #version); \ + __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name); +#else +# define OLD_VERSION(name, version) /* Nothing for static linking. */ +# define NEW_VERSION(name, version) /* Nothing for static linking. */ +# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SHARED" +#endif + + #endif /* eu-config.h */ diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 30c848974..3aa75c817 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,17 @@ +2009-08-09 Roland McGrath + + * libdw.map (ELFUTILS_0.143): New version set, + inherits from ELFUTILS_0.142. + * dwarf_arrayorder.c: Use OLD_VERSION and NEW_VERSION to define an + alias in the ELFUTILS_0.122 version set and the default in the new set. + * dwarf_srclang.c: Likewise. + * dwarf_decl_file.c: Likewise. + * dwarf_decl_line.c: Likewise. + * dwarf_decl_column.c: Likewise. + * dwarf_bytesize.c: Likewise. + * dwarf_bitsize.c: Likewise. + * dwarf_bitoffset.c: Likewise. + 2009-08-07 Roland McGrath * dwarf_arrayorder.c: Use dwarf_attr_integrate. diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c index 359392420..4929fb3c4 100644 --- a/libdw/dwarf_arrayorder.c +++ b/libdw/dwarf_arrayorder.c @@ -67,3 +67,5 @@ dwarf_arrayorder (die) (die, DW_AT_ordering, &attr_mem), &value) == 0 ? (int) value : -1; } +OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122) +NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c index 99d1071f8..3ab146837 100644 --- a/libdw/dwarf_bitoffset.c +++ b/libdw/dwarf_bitoffset.c @@ -67,3 +67,5 @@ dwarf_bitoffset (die) (die, DW_AT_bit_offset, &attr_mem), &value) == 0 ? (int) value : -1; } +OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122) +NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c index 7cfbc5d62..67d97dc1a 100644 --- a/libdw/dwarf_bitsize.c +++ b/libdw/dwarf_bitsize.c @@ -67,3 +67,5 @@ dwarf_bitsize (die) (die, DW_AT_bit_size, &attr_mem), &value) == 0 ? (int) value : -1; } +OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122) +NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c index 536fcd581..2f2e19856 100644 --- a/libdw/dwarf_bytesize.c +++ b/libdw/dwarf_bytesize.c @@ -67,3 +67,5 @@ dwarf_bytesize (die) (die, DW_AT_byte_size, &attr_mem), &value) == 0 ? (int) value : -1; } +OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122) +NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c index 5e0f3e0cb..11ba5d744 100644 --- a/libdw/dwarf_decl_column.c +++ b/libdw/dwarf_decl_column.c @@ -1,5 +1,5 @@ /* Get column number of beginning of given declaration. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005-2009 Red Hat, Inc. This file is part of Red Hat elfutils. Written by Ulrich Drepper , 2005. @@ -61,3 +61,5 @@ dwarf_decl_column (Dwarf_Die *decl, int *colp) { return __libdw_attr_intval (decl, colp, DW_AT_decl_column); } +OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122) +NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index b5ea27db0..c81e35b82 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -106,3 +106,5 @@ dwarf_decl_file (Dwarf_Die *die) return cu->files->info[idx].name; } +OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122) +NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c index 27abc5044..ab64e5100 100644 --- a/libdw/dwarf_decl_line.c +++ b/libdw/dwarf_decl_line.c @@ -63,6 +63,8 @@ dwarf_decl_line (Dwarf_Die *func, int *linep) { return __libdw_attr_intval (func, linep, DW_AT_decl_line); } +OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122) +NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int internal_function diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c index 7d0e90714..f1ff954c8 100644 --- a/libdw/dwarf_srclang.c +++ b/libdw/dwarf_srclang.c @@ -67,3 +67,5 @@ dwarf_srclang (die) (die, DW_AT_language, &attr_mem), &value) == 0 ? (int) value : -1; } +OLD_VERSION (dwarf_srclang, ELFUTILS_0.122) +NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) diff --git a/libdw/libdw.map b/libdw/libdw.map index b4759baf9..6fc86b34a 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -209,3 +209,19 @@ ELFUTILS_0.142 { dwfl_module_dwarf_cfi; dwfl_module_eh_cfi; } ELFUTILS_0.138; + +ELFUTILS_0.143 { + global: + # Replaced ELFUTILS_0.122 versions. Both versions point to the + # same implementation, but users of the new symbol version can + # presume that they use dwarf_attr_integrate properly. + dwarf_arrayorder; + dwarf_bitoffset; + dwarf_bitsize; + dwarf_bytesize; + dwarf_decl_column; + dwarf_decl_file; + dwarf_decl_line; + dwarf_srclang; + +} ELFUTILS_0.142; diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 624f59b69..129d520f0 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2009-08-09 Roland McGrath + + * dwfl_module_build_id.c: Use new macros for versioned definitions. + 2009-07-08 Roland McGrath * dwfl_module_dwarf_cfi.c: New file. diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index d7bbb3ca0..07a62ba42 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -150,8 +150,8 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) } int -__dwfl_module_build_id (Dwfl_Module *mod, - const unsigned char **bits, GElf_Addr *vaddr) +dwfl_module_build_id (Dwfl_Module *mod, + const unsigned char **bits, GElf_Addr *vaddr) { if (mod == NULL) return -1; @@ -174,24 +174,20 @@ __dwfl_module_build_id (Dwfl_Module *mod, *vaddr = mod->build_id_vaddr; return mod->build_id_len; } +INTDEF (dwfl_module_build_id) +NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) + #ifdef SHARED -extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id) - __attribute__ ((alias ("__dwfl_module_build_id"))); -asm (".symver " - "__dwfl_module_build_id, dwfl_module_build_id@@ELFUTILS_0.138"); +COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) int -_BUG_COMPAT_dwfl_module_build_id (Dwfl_Module *mod, - const unsigned char **bits, GElf_Addr *vaddr) +_compat_vaddr_at_end_dwfl_module_build_id (Dwfl_Module *mod, + const unsigned char **bits, + GElf_Addr *vaddr) { int result = INTUSE(dwfl_module_build_id) (mod, bits, vaddr); if (result > 0) *vaddr += (result + 3) & -4; return result; } -asm (".symver " - "_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130"); -#else -extern __typeof__ (dwfl_module_build_id) dwfl_module_build_id - __attribute__ ((alias ("__dwfl_module_build_id"))); #endif