tool/abi_symbols: omit known internal symbols

This patch prevents the abi_symbols tool from generating symbols that
are known to occur in shared objects but must not be part of a library
ABI. This saves a bit of time during library-porting work.

However, to avoid the accidental use of ABI symbol definitions that lack
any form of manual curation, the abi_symbols tool outputs a special
message, which is explicitly checked-for by the check_abi tool.

Fixes #3112
This commit is contained in:
Norman Feske
2019-01-15 11:42:43 +01:00
parent a155d0e531
commit 7b37546a4d
3 changed files with 41 additions and 18 deletions

View File

@@ -31,6 +31,16 @@ proc report_error { message } {
}
#
# Warn about an ABI symbol definition that was generated by the 'abi_symbols'
# tool but hasn't undergone any manual review. This is most likely an
# accidental omission.
#
foreach line $abi_content {
if {$line == "# Please review the symbols and remove this line."} {
report_error "attempt to use unreviewed $abi_name ABI\n at $abi_path" } }
#
# Extract symbol list w/o comments and empty lines, check for trailing spaces
#
@@ -57,26 +67,12 @@ foreach line $abi_content {
#
# Check for absence of Genode-internal linking artifacts from ABI
#
#
# The following symbols may appear in shared objects but should not by part
# The listed symbols may appear in shared objects but should not by part
# of any ABI.
#
set symbol_blacklist {
__bss_start
__eh_frame_start__
__exidx_end
__exidx_start
__l4sys_invoke_indirect
_ctors_end
_ctors_start
_edata
_end
_init
_parent_cap
_parent_cap_local_name
_parent_cap_thread_id
}
set fd [open "[file dirname $argv0]/internal_abi.list"]
set symbol_blacklist [split [read $fd] "\n"]
close $fd
foreach line $abi_symbols {
set name [lindex $line 0]