--- a/lib/payload/meson.build
+++ b/lib/payload/meson.build
@@ -15,7 +15,6 @@
   'cloak.vala',
   'fd-guard.vala',
   'fdt-padder.vala',
-  'libc-shim.c',
 ]
 
 if host_os_family == 'linux'
@@ -38,6 +37,17 @@
 
 payload_vala_args = gum_vala_args + gumjs_vala_args
 
+libc_shim_c_args = []
+if cc.get_id() == 'gcc'
+  # Its top-level .symver asm cannot go through the partitions of gcc's LTO.
+  libc_shim_c_args += '-fno-lto'
+endif
+
+libc_shim = static_library('frida-libc-shim-' + api_version, 'libc-shim.c',
+  c_args: [frida_component_cflags, extra_c_args, libc_shim_c_args],
+  dependencies: [gio_dep, gum_dep],
+)
+
 payload = static_library('frida-payload-' + api_version, payload_sources,
   c_args: [frida_component_cflags, extra_c_args],
   vala_args: [
@@ -47,6 +57,7 @@
     base_vala_args,
     extra_vala_args,
   ],
+  objects: libc_shim.extract_all_objects(recursive: false),
   vala_header: 'frida-payload.h',
   vala_vapi: f'frida-payload-@api_version@.vapi',
   dependencies: [gio_dep, gee_dep, json_glib_dep, gum_dep, gumjs_dep, base_dep],
