[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC] tools: add map files for libxen{store, ctrl, guest}.so



... 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@xxxxxxxxxx>
---
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


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.