Subject Re: [firebird-support] running Firebird without fbintl
Author Hamish Moffatt
On 06/07/18 18:59, Dimitry Sibiryakov sd@...
[firebird-support] wrote:
> 06.07.2018 10:45, 'Paul Beach' pbeach@... [firebird-support] wrote:
>>> With GCC "-fvisibility=internal" can be used to suppress exporting of all symbols.
>> We currently use -fvisibility-inlines-hidden and -fvisibility=hidden for clang...
> But still framework somehow calls internal delete. Did you check exported symbols with
> nm (or whatever utility on MacOS can show public symbols of a library)?

Right, it looks like fbintl is exporting operator delete() and operator
delete[](), while libfbembed.dylib is not.

macOS has nm but it doesn't demangle. They have their own utility
symbols(1).

Here's the whole list of symbols exported (flags including "EXT") from
fbintl:

$ symbols Versions/A/fbintl| grep " EXT"
                0x00000000000016c0 (   0x130) LD_lookup_charset [FUNC,
EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000000001840 (   0x340) LD_lookup_texttype [FUNC,
EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000000001b80 (   0x2a0) LD_setup_attributes
[FUNC, EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000000001ef0 (    0x40) LD_version [FUNC, EXT,
NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000000037b90 (    0x40) operator new(unsigned
long) [FUNC, EXT, NameNList, MangledNameNList, Merged, NList,
FunctionStarts]
                0x0000000000037c20 (    0x40) operator new[](unsigned
long) [FUNC, EXT, NameNList, MangledNameNList, Merged, NList,
FunctionStarts]
                0x0000000000037c60 (    0x40) operator delete(void*)
[FUNC, EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000000037cf0 (    0x40) operator delete[](void*)
[FUNC, EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]

ie new, new[], delete and delete[] are exported.

Meanwhile libfbembed.dylib (ie the main Firebird binary) has these
marked as PEXT = private-external.

$ symbols libfbembed.dylib | grep delete
....
                0x0000000030451b70 (    0x40) operator delete(void*)
[FUNC, PEXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]
                0x0000000030451bb0 (    0x40) operator delete[](void*)
[FUNC, PEXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]


Now to work out how to fix it.


Hamish