* [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so
@ 2016-01-07 13:51 Ian Campbell
2016-01-07 14:36 ` Andrew Cooper
2016-01-07 14:49 ` Jan Beulich
0 siblings, 2 replies; 5+ messages in thread
From: Ian Campbell @ 2016-01-07 13:51 UTC (permalink / raw)
To: ian.jackson, wei.liu2, xen-devel; +Cc: Ian Campbell
... and limit the exported symbols to just those which are used in
tree.
This was partly just an interest driven excercise to see how much
internal cruft these libraries were actually exporting (it's not
actually as bad as I expected).
According to diffing before and after:
nm libfoo.so | awk '{ if ($2 == "T") { print $3 } }'
The following symbols are no longer exported:
- libxenstore.so:
- _fini
- _init
- libxenctrl.so:
- _fini
- _init
- bitmap_64_to_byte
- bitmap_byte_to_64
- discard_file_cache
- libxenguest.so:
- _fini
- _init
- cr3_to_mfn
- csum_page
- dhdr_type_to_str
- dump_bad_pseudophysmap_entry
- handle_tsc_info
- lz4_decompress_unknownoutputsize
- mfn_in_pseudophysmap
- mfn_to_cr3
- mfn_to_pfn
- pin_table
- populate_pfns
- rec_type_to_str
- write_split_record
- write_tsc_info
- x86_pv_domain_info
- x86_pv_map_m2p
- xc_inflate_buffer
- xc_read_image
- xc_try_lz4_decode
The map files highlight a number of namespacing inconsistencies
(particularly with libxenguest using xc_* a significant amount).
It also seems to highlight a bunch of libxenguest.so functionalty
which appears to want to be exported (xc_*) but is not used in tree.
The initial list was based on what was needed to compile everything in
tree. I then looked through the list for xc_* and checked if any were
exported in a public header, leading to adding the following functions
which are intended to be public but not used in tree to the
libxenguest.map:
- xc_cpuid_to_str
- xc_compression_add_page
- xc_compression_compress_pages
- xc_compression_create_context
- xc_compression_free_context
- xc_compression_reset_pagebuf
- xc_compression_uncompress_page
The remainder are internal functions using the external namespace (of
another library, no less).
Since the relevant libfoo.map is added to the Makefile dependencies of
the library, no longer use $^ to get the objects for libxenctrl and
libxenstore, libxenguest already didn't.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
This was something of an academic exercise, I'm not sure it's really
the right thing, especially for the unstable libraries.
---
tools/libxc/Makefile | 8 +++++---
tools/libxc/libxenctrl.map | 18 ++++++++++++++++++
tools/libxc/libxenguest.map | 37 +++++++++++++++++++++++++++++++++++++
tools/xenstore/Makefile | 5 +++--
tools/xenstore/libxenstore.map | 15 +++++++++++++++
5 files changed, 78 insertions(+), 5 deletions(-)
create mode 100644 tools/libxc/libxenctrl.map
create mode 100644 tools/libxc/libxenguest.map
create mode 100644 tools/xenstore/libxenstore.map
diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile
index 940708f..8882aa1 100644
--- a/tools/libxc/Makefile
+++ b/tools/libxc/Makefile
@@ -206,8 +206,9 @@ libxenctrl.so: libxenctrl.so.$(MAJOR)
libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR)
$(SYMLINK_SHLIB) $< $@
-libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS)
- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LDLIBS_libxentoollog) $(DLOPEN_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
+libxenctrl.so.$(MAJOR).$(MINOR): SHLIB_LDFLAGS += -Wl,--version-script=libxenctrl.map
+libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS) libxenctrl.map
+ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(CTRL_PIC_OBJS) $(LDLIBS_libxentoollog) $(DLOPEN_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
# libxenguest
@@ -228,8 +229,9 @@ endif
xc_dom_bzimageloader.o: CFLAGS += $(call zlib-options,D)
xc_dom_bzimageloader.opic: CFLAGS += $(call zlib-options,D)
+libxenguest.so.$(MAJOR).$(MINOR): SHLIB_LDFLAGS += -Wl,--version-script=libxenguest.map
libxenguest.so.$(MAJOR).$(MINOR): COMPRESSION_LIBS = $(call zlib-options,l)
-libxenguest.so.$(MAJOR).$(MINOR): $(GUEST_PIC_OBJS) libxenctrl.so
+libxenguest.so.$(MAJOR).$(MINOR): $(GUEST_PIC_OBJS) libxenctrl.so libxenguest.map
$(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenguest.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(GUEST_PIC_OBJS) $(COMPRESSION_LIBS) -lz $(LDLIBS_libxenctrl) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
xenctrl_osdep_ENOSYS.so: $(OSDEP_PIC_OBJS) libxenctrl.so
diff --git a/tools/libxc/libxenctrl.map b/tools/libxc/libxenctrl.map
new file mode 100644
index 0000000..cc93a5b
--- /dev/null
+++ b/tools/libxc/libxenctrl.map
@@ -0,0 +1,18 @@
+{
+ global:
+ xc_*;
+
+ /*
+ * Supposedly internal functions which are also used
+ * by libxenguest (only, it seems)
+ */
+ read_exact;
+ write_exact;
+ writev_exact;
+
+ /* Other un-namespaced functions used elsewhere in tree */
+ do_xen_hypercall;
+ do_memory_op;
+
+ local: *; /* Do not expose anything by default */
+};
diff --git a/tools/libxc/libxenguest.map b/tools/libxc/libxenguest.map
new file mode 100644
index 0000000..5aa3605
--- /dev/null
+++ b/tools/libxc/libxenguest.map
@@ -0,0 +1,37 @@
+{
+ global:
+ xg_*;
+ elf_*; /* Stuff from libelf */
+ xc_dom_*; /* Domain builder */
+ xc_linux_build; /* Compat for xc_dom_* */
+
+ /* Either wrongly namespaced or in the wrong library */
+ xc_elf_set_logfile;
+
+ xc_domain_save;
+ xc_domain_restore;
+
+ xc_exchange_page;
+ xc_mark_page_online;
+ xc_mark_page_offline;
+ xc_query_page_offline_status;
+
+ xc_await_suspend;
+ xc_suspend_evtchn_init_exclusive;
+ xc_suspend_evtchn_init_sane;
+ xc_suspend_evtchn_release;
+
+ xc_map_m2p;
+
+ xc_dom_check_gzip;
+ xc_dom_do_gunzip;
+
+ xc_cpuid_apply_policy;
+ xc_cpuid_set;
+ xc_cpuid_check;
+ xc_cpuid_to_str;
+
+ xc_domain_get_native_protocol;
+
+ local: *; /* Do not expose anything by default */
+};
diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile
index 1b4a494..87c2719 100644
--- a/tools/xenstore/Makefile
+++ b/tools/xenstore/Makefile
@@ -102,8 +102,9 @@ libxenstore.so.$(MAJOR): libxenstore.so.$(MAJOR).$(MINOR)
xs.opic: CFLAGS += -DUSE_PTHREAD
-libxenstore.so.$(MAJOR).$(MINOR): xs.opic xs_lib.opic
- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenstore.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(SOCKET_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
+libxenstore.so.$(MAJOR).$(MINOR): SHLIB_LDFLAGS += -Wl,--version-script=libxenstore.map
+libxenstore.so.$(MAJOR).$(MINOR): xs.opic xs_lib.opic libxenstore.map
+ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenstore.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ xs.opic xs_lib.opic $(SOCKET_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
libxenstore.a: xs.o xs_lib.o
$(AR) rcs $@ $^
diff --git a/tools/xenstore/libxenstore.map b/tools/xenstore/libxenstore.map
new file mode 100644
index 0000000..c406207
--- /dev/null
+++ b/tools/xenstore/libxenstore.map
@@ -0,0 +1,15 @@
+{
+ global:
+ xs_*;
+
+ /*
+ * Un-namespaced functions, may only be used from
+ * xenstore_client.c? Unclear if they might be useful
+ * from other potentially client applications.
+ */
+ sanitise_value;
+ unsanitise_value;
+ expanding_buffer_ensure;
+
+ local: *; /* Do not expose anything by default */
+};
--
2.1.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so
2016-01-07 13:51 [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so Ian Campbell
@ 2016-01-07 14:36 ` Andrew Cooper
2016-01-07 14:50 ` Ian Campbell
2016-01-07 14:49 ` Jan Beulich
1 sibling, 1 reply; 5+ messages in thread
From: Andrew Cooper @ 2016-01-07 14:36 UTC (permalink / raw)
To: Ian Campbell, ian.jackson, wei.liu2, xen-devel
On 07/01/16 13:51, Ian Campbell wrote:
> The map files highlight a number of namespacing inconsistencies
> (particularly with libxenguest using xc_* a significant amount).
>
> It also seems to highlight a bunch of libxenguest.so functionalty
> which appears to want to be exported (xc_*) but is not used in tree.
> The initial list was based on what was needed to compile everything in
> tree. I then looked through the list for xc_* and checked if any were
> exported in a public header, leading to adding the following functions
> which are intended to be public but not used in tree to the
> libxenguest.map:
> - xc_cpuid_to_str
> - xc_compression_add_page
> - xc_compression_compress_pages
> - xc_compression_create_context
> - xc_compression_free_context
> - xc_compression_reset_pagebuf
> - xc_compression_uncompress_page
These compression functions became unused when I dropped legacy migration.
> diff --git a/tools/libxc/libxenctrl.map b/tools/libxc/libxenctrl.map
> new file mode 100644
> index 0000000..cc93a5b
> --- /dev/null
> +++ b/tools/libxc/libxenctrl.map
> @@ -0,0 +1,18 @@
> +{
> + global:
> + xc_*;
> +
> + /*
> + * Supposedly internal functions which are also used
> + * by libxenguest (only, it seems)
> + */
> + read_exact;
> + write_exact;
> + writev_exact;
read/write_exact are used in libxc by xc_tmem.c, but only because the
tmem part of legacy migration split across the two libraries.
In the long term, they should move to being xenguest private.
~Andrew
> +
> + /* Other un-namespaced functions used elsewhere in tree */
> + do_xen_hypercall;
> + do_memory_op;
> +
> + local: *; /* Do not expose anything by default */
> +};
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so
2016-01-07 14:36 ` Andrew Cooper
@ 2016-01-07 14:50 ` Ian Campbell
0 siblings, 0 replies; 5+ messages in thread
From: Ian Campbell @ 2016-01-07 14:50 UTC (permalink / raw)
To: Andrew Cooper, ian.jackson, wei.liu2, xen-devel
On Thu, 2016-01-07 at 14:36 +0000, Andrew Cooper wrote:
> On 07/01/16 13:51, Ian Campbell wrote:
> > The map files highlight a number of namespacing inconsistencies
> > (particularly with libxenguest using xc_* a significant amount).
> >
> > It also seems to highlight a bunch of libxenguest.so functionalty
> > which appears to want to be exported (xc_*) but is not used in tree.
> > The initial list was based on what was needed to compile everything in
> > tree. I then looked through the list for xc_* and checked if any were
> > exported in a public header, leading to adding the following functions
> > which are intended to be public but not used in tree to the
> > libxenguest.map:
> > - xc_cpuid_to_str
> > - xc_compression_add_page
> > - xc_compression_compress_pages
> > - xc_compression_create_context
> > - xc_compression_free_context
> > - xc_compression_reset_pagebuf
> > - xc_compression_uncompress_page
>
> These compression functions became unused when I dropped legacy
> migration.
Indeed, I anticipated them either coming back or getting removed at some
point.
> > diff --git a/tools/libxc/libxenctrl.map b/tools/libxc/libxenctrl.map
> > new file mode 100644
> > index 0000000..cc93a5b
> > --- /dev/null
> > +++ b/tools/libxc/libxenctrl.map
> > @@ -0,0 +1,18 @@
> > +{
> > + global:
> > + xc_*;
> > +
> > + /*
> > + * Supposedly internal functions which are also used
> > + * by libxenguest (only, it seems)
> > + */
> > + read_exact;
> > + write_exact;
> > + writev_exact;
>
> read/write_exact are used in libxc by xc_tmem.c, but only because the
> tmem part of legacy migration split across the two libraries.
They are also used by various osdep backend stuff in libxc, which should go
away with my split of those into other libraries and by xc_core.c (which is
in libxc, perhaps wrongly).
> In the long term, they should move to being xenguest private.
>
> ~Andrew
>
> > +
> > + /* Other un-namespaced functions used elsewhere in
> > tree */
> > + do_xen_hypercall;
> > + do_memory_op;
> > +
> > + local: *; /* Do not expose anything by default */
> > +};
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so
2016-01-07 13:51 [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so Ian Campbell
2016-01-07 14:36 ` Andrew Cooper
@ 2016-01-07 14:49 ` Jan Beulich
2016-01-07 14:58 ` Ian Campbell
1 sibling, 1 reply; 5+ messages in thread
From: Jan Beulich @ 2016-01-07 14:49 UTC (permalink / raw)
To: Ian Campbell; +Cc: ian.jackson, wei.liu2, xen-devel
>>> On 07.01.16 at 14:51, <ian.campbell@citrix.com> wrote:
> --- /dev/null
> +++ b/tools/libxc/libxenctrl.map
> @@ -0,0 +1,18 @@
> +{
> + global:
No actual version identifier / name space?
Jan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so
2016-01-07 14:49 ` Jan Beulich
@ 2016-01-07 14:58 ` Ian Campbell
0 siblings, 0 replies; 5+ messages in thread
From: Ian Campbell @ 2016-01-07 14:58 UTC (permalink / raw)
To: Jan Beulich; +Cc: ian.jackson, wei.liu2, xen-devel
On Thu, 2016-01-07 at 07:49 -0700, Jan Beulich wrote:
> > > > On 07.01.16 at 14:51, <ian.campbell@citrix.com> wrote:
> > --- /dev/null
> > +++ b/tools/libxc/libxenctrl.map
> > @@ -0,0 +1,18 @@
> > +{
> > + global:
>
> No actual version identifier / name space?
Correct, this is only being used to hide internal symbols, not to to
provide any kind of ABI stability (which libxc and libxg lack).
Maybe libxenstore should be a) done separately and b) have a namespace as
you suggest and be declared stable in the same way as the things I am
adding under tools/libs are, but given that it uses libxenctrl there's
probably a little more work to do before that becomes possible.
Ian.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-01-07 14:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-07 13:51 [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so Ian Campbell
2016-01-07 14:36 ` Andrew Cooper
2016-01-07 14:50 ` Ian Campbell
2016-01-07 14:49 ` Jan Beulich
2016-01-07 14:58 ` Ian Campbell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).