Why are dwarf2 symbols getting assigned hidden visibility?

John Marino gnugcc@marino.st
Thu Jan 13 07:12:00 GMT 2011


I've successfully built the GNAT front-end of gcc 4.6 on several BSD 
platforms.  The NetBSD versions (i386 and AMD64) have a problem that I 
can't figure out, and I suspect it can be fixed with a change to the 
build configuration.

Although NetBSD passes its regression tests cleanly, there are some 
dwarf2 functions it doesn't seem to recognize.  When I listed hidden 
symbols embedded in a pre-stripped gnat1 executable, here is the result:

 > readelf -s gnat1 | grep HIDDEN
  19135: 0000000000fc68c0   389 FUNC    LOCAL  HIDDEN   11 _Unwind_Find_FDE
  19136: 0000000000fc4dc0    21 FUNC    LOCAL  HIDDEN   11 _Unwind_GetIPInfo
  19137: 0000000000fc4db0     8 FUNC    LOCAL  HIDDEN   11 _Unwind_GetIP
  19138: 0000000000fc66a0    38 FUNC    LOCAL  HIDDEN   11 __register_frame
  19139: 0000000000fc52b0   241 FUNC    LOCAL  HIDDEN   11 
_Unwind_Resume_or_Rethrow
  19140: 0000000000fc4e00     8 FUNC    LOCAL  HIDDEN   11 
_Unwind_GetRegionStart
  19141: 0000000000fc53d0   155 FUNC    LOCAL  HIDDEN   11 _Unwind_Backtrace
  19142: 0000000001299720   256 OBJECT  LOCAL  HIDDEN   13 __popcount_tab
  19143: 0000000000fc4d50     8 FUNC    LOCAL  HIDDEN   11 _Unwind_GetCFA
  19144: 00000000014b8820     0 OBJECT  LOCAL  HIDDEN   17 __DTOR_END__
  19145: 00000000014b9168     0 OBJECT  LOCAL  HIDDEN   22 __dso_handle
  19146: 0000000000fc4e60   269 FUNC    LOCAL  HIDDEN   11 __frame_state_for
  19147: 0000000000fc6760    26 FUNC    LOCAL  HIDDEN   11 
__register_frame_table
  19148: 0000000000fc6600   130 FUNC    LOCAL  HIDDEN   11 
__register_frame_info_bas
  19149: 0000000000fc6880     5 FUNC    LOCAL  HIDDEN   11 
__deregister_frame_info
  19150: 0000000000fc51e0   193 FUNC    LOCAL  HIDDEN   11 _Unwind_Resume
  19151: 0000000000fc53b0    26 FUNC    LOCAL  HIDDEN   11 
_Unwind_DeleteException
  19152: 0000000000fc6780   256 FUNC    LOCAL  HIDDEN   11 
__deregister_frame_info_b
  19153: 0000000000fc4f80   358 FUNC    LOCAL  HIDDEN   11 
_Unwind_RaiseException
  19154: 0000000000fc4de0     8 FUNC    LOCAL  HIDDEN   11 _Unwind_SetIP
  19155: 0000000000fc66d0   114 FUNC    LOCAL  HIDDEN   11 
__register_frame_info_tab
  19156: 0000000000fc6890    33 FUNC    LOCAL  HIDDEN   11 
__deregister_frame
  19157: 0000000000fc4e50     8 FUNC    LOCAL  HIDDEN   11 
_Unwind_GetTextRelBase
  19158: 0000000000fc4e10    36 FUNC    LOCAL  HIDDEN   11 
_Unwind_FindEnclosingFunc
  19159: 0000000000fc4df0     8 FUNC    LOCAL  HIDDEN   11 
_Unwind_GetLanguageSpecif
  19160: 0000000000fc50f0   230 FUNC    LOCAL  HIDDEN   11 
_Unwind_ForcedUnwind
  19161: 00000000014b8a28     0 OBJECT  LOCAL  HIDDEN   21 
_GLOBAL_OFFSET_TABLE_
  19162: 0000000000fc2bf0    44 FUNC    LOCAL  HIDDEN   11 __popcountdi2
  19163: 0000000000fc4d60    80 FUNC    LOCAL  HIDDEN   11 _Unwind_SetGR
  19164: 0000000000fc4d00    72 FUNC    LOCAL  HIDDEN   11 _Unwind_GetGR
  19165: 0000000000fc4e40     8 FUNC    LOCAL  HIDDEN   11 
_Unwind_GetDataRelBase
  19166: 0000000000fc6750     9 FUNC    LOCAL  HIDDEN   11 
__register_frame_info_tab
  19167: 0000000000fc6690     9 FUNC    LOCAL  HIDDEN   11 
__register_frame_info


The other BSDs consider these symbols global.  For example, here is a 
subset of the same symbols taken from a stripped DragonFly BSD gnat1:

    419: 0000000000fb10e0   373 FUNC    GLOBAL DEFAULT   10 _Unwind_Find_FDE
    582: 0000000000fad8f0    21 FUNC    GLOBAL DEFAULT   10 
_Unwind_GetIPInfo
    920: 0000000000fad8e0     8 FUNC    GLOBAL DEFAULT   10 _Unwind_GetIP
   2116: 0000000000fafb40   235 FUNC    GLOBAL DEFAULT   10 
_Unwind_Resume_or_Rethrow
   2762: 0000000000fad930     8 FUNC    GLOBAL DEFAULT   10 
_Unwind_GetRegionStart
   3171: 0000000000fafc50   155 FUNC    GLOBAL DEFAULT   10 
_Unwind_Backtrace
   4035: 0000000000fad880     8 FUNC    GLOBAL DEFAULT   10 _Unwind_GetCFA
   9786: 0000000000fafa60   212 FUNC    GLOBAL DEFAULT   10 _Unwind_Resume
   9841: 0000000000fafc30    21 FUNC    GLOBAL DEFAULT   10 
_Unwind_DeleteException
  12631: 0000000000faf800   359 FUNC    GLOBAL DEFAULT   10 
_Unwind_RaiseException
  13229: 0000000000fad910     8 FUNC    GLOBAL DEFAULT   10 _Unwind_SetIP
  15888: 0000000000fad980     8 FUNC    GLOBAL DEFAULT   10 
_Unwind_GetTextRelBase
  16508: 0000000000fad940    36 FUNC    GLOBAL DEFAULT   10 
_Unwind_FindEnclosingFunc
  16814: 0000000000fad920     8 FUNC    GLOBAL DEFAULT   10 
_Unwind_GetLanguageSpecif
  17568: 0000000000faf970   230 FUNC    GLOBAL DEFAULT   10 
_Unwind_ForcedUnwind
  18388: 0000000000fad890    75 FUNC    GLOBAL DEFAULT   10 _Unwind_SetGR
  19462: 0000000000fad830    72 FUNC    GLOBAL DEFAULT   10 _Unwind_GetGR
  20086: 0000000000fad970     8 FUNC    GLOBAL DEFAULT   10 
_Unwind_GetDataRelBase
   1345: 0000000000fb0ec0    38 FUNC    GLOBAL DEFAULT   10 __register_frame
   8011: 0000000000fb0f80    26 FUNC    GLOBAL DEFAULT   10 
__register_frame_table
   8532: 0000000000fb0e20   130 FUNC    GLOBAL DEFAULT   10 
__register_frame_info_bas
  14325: 0000000000fb0ef0   114 FUNC    GLOBAL DEFAULT   10 
__register_frame_info_tab
  20736: 0000000000fb0f70     9 FUNC    GLOBAL DEFAULT   10 
__register_frame_info_tab
  20856: 0000000000fb0eb0     9 FUNC    GLOBAL DEFAULT   10 
__register_frame_info
   9544: 0000000000fb10a0     5 FUNC    GLOBAL DEFAULT   10 
__deregister_frame_info
  10772: 0000000000fb0fa0   256 FUNC    GLOBAL DEFAULT   10 
__deregister_frame_info_b
  15277: 0000000000fb10b0    33 FUNC    GLOBAL DEFAULT   10 
__deregister_frame
   3677: 0000000001284260   256 OBJECT  GLOBAL DEFAULT   12 __popcount_tab
  18046: 0000000000fad460    44 FUNC    GLOBAL DEFAULT   10 __popcountdi2


I'm pretty well convinced that the NetBSD symbols should also be 
classified as GLOBAL DEFAULT and this explains NetBSD's issue with 
functions such as _Unwind_Resume and _Unwind_GetIPInfo.  I've gone over 
config.gcc and the various NetBSD headers many times, but I don't see 
what's causing this or what omission might be causing it.

Can anybody suggest what may be wrong and how to correct it?

Thanks,
John




More information about the Gcc-help mailing list