diff --git a/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_cli_flag_aspect_hint.bzl b/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_cli_flag_aspect_hint.bzl
new file mode 100644
index 0000000..e4e88a1
--- /dev/null
+++ b/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_cli_flag_aspect_hint.bzl
@@ -0,0 +1,55 @@
+# Part of the Crubit project, under the Apache License v2.0 with LLVM
+# Exceptions. See /LICENSE for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+"""The aspect hint, to be attached to a `rust_library`, specifies the command line flag to be passed
+to `cc_bindings_from_rust` when its Rust bindings are generated."""
+
+visibility([
+    "//cc_bindings_from_rs/bazel_support/...",
+    "//cc_bindings_from_rs/test/golden/...",
+])
+
+_CcBindingsFromRustCliFlagInfo = provider(
+    doc = "The provider that specifies the command line flags and values for `cc_bindings_from_rust`.",
+    fields = {
+        "flags": "The command line flags and values for `cc_bindings_from_rust`.",
+    },
+)
+
+def _cc_bindings_from_rust_cli_flag_impl(ctx):
+    return [_CcBindingsFromRustCliFlagInfo(
+        flags = ctx.attr.flags,
+    )]
+
+cc_bindings_from_rust_cli_flag = rule(
+    attrs = {
+        "flags": attr.string(
+            doc = "The command line flags and values for `cc_bindings_from_rust`",
+            mandatory = True,
+        ),
+    },
+    implementation = _cc_bindings_from_rust_cli_flag_impl,
+    doc = """
+Defines an aspect hint that is used to pass command line flags to the `cc_bindings_from_rust` tool,
+which affects the tool behavior when generating the C++ binding for the Rust target. This rule
+should only be used by Crubit developers.
+""",
+)
+
+def collect_cc_bindings_from_rust_cli_flags(_target, aspect_ctx):
+    """Returns the command line flags and values for `cc_bindings_from_rust`.
+
+    Args:
+        _target: The target, as seen in aspect_hint.
+        aspect_ctx: The ctx from an aspect_hint.
+
+    Returns:
+        A list of command line flags and values for `cc_bindings_from_rust`. The list is empty if no
+        command line flag is specified.
+    """
+    flags = []
+    for hint in aspect_ctx.rule.attr.aspect_hints:
+        if _CcBindingsFromRustCliFlagInfo in hint:
+            flags.append(hint[_CcBindingsFromRustCliFlagInfo].flags)
+    return flags
diff --git a/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_rule.bzl b/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_rule.bzl
index dc545ba..80a82e4 100644
--- a/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_rule.bzl
+++ b/cc_bindings_from_rs/bazel_support/cc_bindings_from_rust_rule.bzl
@@ -33,8 +33,13 @@
 )
 load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
 load(
+    "//cc_bindings_from_rs/bazel_support:cc_bindings_from_rust_cli_flag_aspect_hint.bzl",
+    "collect_cc_bindings_from_rust_cli_flags",
+)
+load(
     "//cc_bindings_from_rs/bazel_support:providers.bzl",
     "CcBindingsFromRustInfo",
+    "GeneratedBindingsInfo",
 )
 load(
     "//rs_bindings_from_cc/bazel_support:compile_rust.bzl",
@@ -72,11 +77,12 @@
         if CcBindingsFromRustInfo in dep
     ]
 
-def _generate_bindings(ctx, basename, inputs, args, rustc_env):
+def _generate_bindings(ctx, target, basename, inputs, args, rustc_env):
     """Invokes the `cc_bindings_from_rs` tool to generate C++ bindings for a Rust crate.
 
     Args:
       ctx: The rule context.
+      target: The target crate.
       basename: The basename for the generated files
       inputs: `cc_bindings_from_rs` inputs specific to the target `crate`
       args: `rustc` and `process_wrapper` arguments from construct_arguments.
@@ -114,6 +120,8 @@
         )
         outputs.append(error_report_output)
 
+    for flag in collect_cc_bindings_from_rust_cli_flags(target, ctx):
+        crubit_args.add(flag)
     ctx.actions.run(
         outputs = outputs,
         inputs = depset(
@@ -292,6 +300,7 @@
 
     (h_out_file, rs_out_file) = _generate_bindings(
         ctx,
+        target,
         basename,
         compile_inputs,
         args,
@@ -314,6 +323,10 @@
             crate_key = crate_info.name,
             headers = [h_out_file],
         ),
+        GeneratedBindingsInfo(
+            h_file = h_out_file,
+            rust_file = rs_out_file,
+        ),
         OutputGroupInfo(out = depset([h_out_file, rs_out_file])),
     ]
 
diff --git a/cc_bindings_from_rs/bazel_support/providers.bzl b/cc_bindings_from_rs/bazel_support/providers.bzl
index 836e2e4..c555f46 100644
--- a/cc_bindings_from_rs/bazel_support/providers.bzl
+++ b/cc_bindings_from_rs/bazel_support/providers.bzl
@@ -15,3 +15,11 @@
         "headers": "A list of C++ headers which correspond to this crate.",
     },
 )
+
+GeneratedBindingsInfo = provider(
+    doc = "A provider that contains the generated C++ and Rust files.",
+    fields = {
+        "h_file": "The generated C++ header file.",
+        "rust_file": "The generated Rust source file.",
+    },
+)
diff --git a/cc_bindings_from_rs/bindings.rs b/cc_bindings_from_rs/bindings.rs
index 12b52ae..52802f7 100644
--- a/cc_bindings_from_rs/bindings.rs
+++ b/cc_bindings_from_rs/bindings.rs
@@ -69,6 +69,9 @@
         #[input]
         fn errors(&self) -> Rc<dyn ErrorReporting>;
 
+        #[input]
+        fn no_thunk_name_mangling(&self) -> bool;
+
         // TODO(b/262878759): Provide a set of enabled/disabled Crubit features.
         #[input]
         fn _features(&self) -> ();
@@ -1478,13 +1481,18 @@
         || (tcx.get_attr(def_id, rustc_span::symbol::sym::no_mangle).is_none()
             && tcx.get_attr(def_id, rustc_span::symbol::sym::export_name).is_none());
     let thunk_name = {
-        let symbol_name = {
+        let symbol_name = if db.no_thunk_name_mangling() {
+            FullyQualifiedName::new(tcx, def_id)
+                .name
+                .expect("Functions are assumed to always have a name")
+                .to_string()
+        } else {
             // Call to `mono` is ok - `generics_of` have been checked above.
             let instance = ty::Instance::mono(tcx, def_id);
-            tcx.symbol_name(instance).name
+            tcx.symbol_name(instance).name.to_string()
         };
         if needs_thunk {
-            format!("__crubit_thunk_{}", &escape_non_identifier_chars(symbol_name))
+            format!("__crubit_thunk_{}", &escape_non_identifier_chars(&symbol_name))
         } else {
             symbol_name.to_string()
         }
@@ -2311,9 +2319,13 @@
         };
 
         let thunk_name = {
-            let instance = ty::Instance::new(method.def_id, substs);
-            let symbol = tcx.symbol_name(instance);
-            format!("__crubit_thunk_{}", &escape_non_identifier_chars(symbol.name))
+            if db.no_thunk_name_mangling() {
+                format!("__crubit_thunk_{}", &escape_non_identifier_chars(method.name.as_str()))
+            } else {
+                let instance = ty::Instance::new(method.def_id, substs);
+                let symbol = tcx.symbol_name(instance);
+                format!("__crubit_thunk_{}", &escape_non_identifier_chars(symbol.name))
+            }
         };
         method_name_to_cc_thunk_name.insert(method.name, format_cc_ident(&thunk_name)?);
 
@@ -9014,6 +9026,7 @@
             /* crubit_support_path_format= */ "<crubit/support/for/tests/{header}>".into(),
             /* crate_name_to_include_paths= */ Default::default(),
             /* errors = */ Rc::new(IgnoreErrors),
+            /* no_thunk_name_mangling= */ false,
             /* _features= */ (),
         )
     }
diff --git a/cc_bindings_from_rs/cc_bindings_from_rs.rs b/cc_bindings_from_rs/cc_bindings_from_rs.rs
index 4fe270b..e396fdf 100644
--- a/cc_bindings_from_rs/cc_bindings_from_rs.rs
+++ b/cc_bindings_from_rs/cc_bindings_from_rs.rs
@@ -47,6 +47,7 @@
         crubit_support_path_format,
         crate_name_to_include_paths.into(),
         errors,
+        cmdline.no_thunk_name_mangling,
         /* _features= */ (),
     )
 }
diff --git a/cc_bindings_from_rs/cmdline.rs b/cc_bindings_from_rs/cmdline.rs
index 692ece6..4cbd656 100644
--- a/cc_bindings_from_rs/cmdline.rs
+++ b/cc_bindings_from_rs/cmdline.rs
@@ -65,6 +65,11 @@
     /// Path to the error reporting output file.
     #[clap(long, value_parser, value_name = "FILE")]
     pub error_report_out: Option<PathBuf>,
+
+    /// This is for golden tests only. Using this in production may cause
+    /// undefined behavior.
+    #[clap(long, value_parser, value_name = "BOOL")]
+    pub no_thunk_name_mangling: bool,
 }
 
 impl Cmdline {
@@ -236,6 +241,8 @@
           Path to a rustfmt.toml file that should replace the default formatting of the .rs files generated by the tool
       --error-report-out <FILE>
           Path to the error reporting output file
+      --no-thunk-name-mangling
+          This is for golden tests only. Using this in production may cause undefined behavior
   -h, --help
           Print help
 "#;
diff --git a/cc_bindings_from_rs/test/golden/BUILD b/cc_bindings_from_rs/test/golden/BUILD
new file mode 100644
index 0000000..1c632e9
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/BUILD
@@ -0,0 +1,59 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+load(
+    "//cc_bindings_from_rs/bazel_support:cc_bindings_from_rust_cli_flag_aspect_hint.bzl",
+    "cc_bindings_from_rust_cli_flag",
+)
+load(
+    "//cc_bindings_from_rs/test/golden:golden_test.bzl",
+    "golden_test",
+)
+
+package(default_applicable_licenses = ["//:license"])
+
+# These are needed by golden_test, which can be run in other packages.
+exports_files([
+    "test.sh",
+    "LICENSE_HEADER",
+])
+
+TESTS = [name[:-3] for name in glob(
+    ["*.rs"],
+    exclude = ["*cc_api_impl.rs"],
+)]
+
+cc_bindings_from_rust_cli_flag(
+    name = "no_thunk_name_mangling",
+    flags = "--no-thunk-name-mangling",
+)
+
+[rust_library(
+    name = name + "_rust",
+    srcs = [name + ".rs"],
+    aspect_hints = [
+        "//features:experimental",
+        ":no_thunk_name_mangling",
+    ],
+) for name in TESTS]
+
+# TODO(yongheng): Add a test to compile the generated bindings.
+
+[golden_test(
+    name = name + "_test",
+    basename = name,
+    golden_h = name + "_cc_api.h",
+    golden_rs = name + "_cc_api_impl.rs",
+    rust_library = name + "_rust",
+) for name in TESTS]
+
+bzl_library(
+    name = "golden_test",
+    srcs = ["golden_test.bzl"],
+    visibility = ["//visibility:private"],
+    deps = [
+        "//cc_bindings_from_rs/bazel_support:cc_bindings_from_rust_rule",
+    ],
+)
diff --git a/cc_bindings_from_rs/test/golden/README.md b/cc_bindings_from_rs/test/golden/README.md
new file mode 100644
index 0000000..0bec914
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/README.md
@@ -0,0 +1,12 @@
+# Golden file tests
+
+## Instructions
+
+*   Add a new test by adding a `foo.rs` file, create two empty files named
+    `foo_cc_api.h` and `foo_cc_api_impl.rs`, and then executing
+    `common/golden_update.sh`. This will generate the
+    corresponding bindings files.
+*   If a test in this directory fails, look at the output. It should contain a
+    diff of the failure.
+*   If you get spurious failures in this directory: Run
+    `common/golden_update.sh`.
diff --git a/cc_bindings_from_rs/test/golden/golden_test.bzl b/cc_bindings_from_rs/test/golden/golden_test.bzl
new file mode 100644
index 0000000..404cb90
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/golden_test.bzl
@@ -0,0 +1,121 @@
+# Part of the Crubit project, under the Apache License v2.0 with LLVM
+# Exceptions. See /LICENSE for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+"""A rule that generates bindings source files for a given Rust library."""
+
+load("@rules_rust//rust/private:providers.bzl", "CrateInfo")  # buildifier: disable=bzl-visibility
+load(
+    "//cc_bindings_from_rs/bazel_support:cc_bindings_from_rust_rule.bzl",
+    "cc_bindings_from_rust_aspect",
+)
+load(
+    "//cc_bindings_from_rs/bazel_support:providers.bzl",
+    "GeneratedBindingsInfo",
+)
+load(
+    "//common:crubit_wrapper_macros_oss.bzl",
+    "crubit_flavor_transition",
+)
+
+def _generate_bindings_impl(ctx):
+    rust_library = ctx.attr.rust_library[0]
+    if not GeneratedBindingsInfo in rust_library:
+        fail("Bindings were not generated for the given rust_library.")
+    bindings = rust_library[GeneratedBindingsInfo]
+    return OutputGroupInfo(
+        h_file = [bindings.h_file],
+        rust_file = [bindings.rust_file],
+    )
+
+_generate_bindings = rule(
+    attrs = {
+        "rust_library": attr.label(
+            providers = [CrateInfo],
+            aspects = [cc_bindings_from_rust_aspect],
+            cfg = crubit_flavor_transition,
+        ),
+    },
+    implementation = _generate_bindings_impl,
+)
+
+def golden_test(
+        name,
+        rust_library,
+        tags = None,
+        basename = None,
+        golden_h = None,
+        golden_rs = None):
+    """Generates a golden test for `rust_library`.
+
+    Args:
+        name: The name of the golden test.
+        rust_library: The Rust library whose outputs should be checked.
+        tags: The test tags.
+        basename: The name to use for generated files.
+        golden_h: The generated C++ source code for the bindings.
+        golden_rs: The generated Rust source code for the bindings.
+
+    """
+    if not basename:
+        basename = name
+    if not tags:
+        tags = []
+    tags.append("crubit_golden_test")
+
+    bindings_name = basename + ".generated_bindings"
+
+    _generate_bindings(
+        name = bindings_name,
+        rust_library = rust_library,
+    )
+    args = []
+    data = ["//common:LICENSE_HEADER"]
+    owned_files = []
+    if golden_h:
+        new_h = basename + ".h_file"
+        native.filegroup(
+            name = new_h,
+            srcs = [bindings_name],
+            output_group = "h_file",
+        )
+        args += [
+            "$(location %s)" % golden_h,
+            "$(location %s)" % new_h,
+        ]
+        data += [
+            golden_h,
+            new_h,
+        ]
+        owned_files.append(golden_h)
+
+    if golden_rs:
+        new_rs = basename + ".rs_file"
+        native.filegroup(
+            name = new_rs,
+            srcs = [bindings_name],
+            output_group = "rust_file",
+        )
+        args += [
+            "$(location %s)" % golden_rs,
+            "$(location %s)" % new_rs,
+        ]
+        data += [
+            golden_rs,
+            new_rs,
+        ]
+        owned_files.append(golden_rs)
+
+    native.sh_test(
+        name = name,
+        srcs = ["//common:golden_test.sh"],
+        args = args,
+        data = data,
+        tags = tags,
+    )
+    native.filegroup(
+        name = basename + ".build_cleaner_optout",
+        srcs = owned_files,
+        tags = ["ignore_srcs"],
+        visibility = ["//visibility:private"],
+    )
diff --git a/cc_bindings_from_rs/test/golden/type_aliases.rs b/cc_bindings_from_rs/test/golden/type_aliases.rs
new file mode 100644
index 0000000..6e27c77
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/type_aliases.rs
@@ -0,0 +1,17 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+pub mod test_type_aliases {
+    pub type TypeAlias2 = TypeAlias;
+    pub type TypeAlias = i32;
+
+    pub fn func_using_alias() -> TypeAlias {
+        0
+    }
+}
+
+pub mod test_deprecated_type_alias {
+    #[deprecated = "Use `OtherTypeAlias` instead"]
+    pub type TypeAlias = i32;
+}
diff --git a/cc_bindings_from_rs/test/golden/type_aliases_cc_api.h b/cc_bindings_from_rs/test/golden/type_aliases_cc_api.h
new file mode 100644
index 0000000..6415efb
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/type_aliases_cc_api.h
@@ -0,0 +1,41 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+// Automatically @generated C++ bindings for the following Rust crate:
+// type_aliases_rust
+
+#pragma once
+
+#include <cstdint>
+
+namespace type_aliases_rust {
+
+namespace test_type_aliases {
+using TypeAlias2 = std::int32_t;
+using TypeAlias = std::int32_t;
+
+// Generated from:
+// cc_bindings_from_rs/test/golden/type_aliases.rs;l=9
+std::int32_t func_using_alias();
+
+}  // namespace test_type_aliases
+
+namespace test_deprecated_type_alias {
+using TypeAlias [[deprecated("Use `OtherTypeAlias` instead")]] = std::int32_t;
+}
+
+namespace test_type_aliases {
+
+namespace __crubit_internal {
+extern "C" std::int32_t __crubit_thunk_func_uusing_ualias();
+}
+inline std::int32_t func_using_alias() {
+  return __crubit_internal::__crubit_thunk_func_uusing_ualias();
+}
+
+}  // namespace test_type_aliases
+
+namespace test_deprecated_type_alias {}
+
+}  // namespace type_aliases_rust
diff --git a/cc_bindings_from_rs/test/golden/type_aliases_cc_api_impl.rs b/cc_bindings_from_rs/test/golden/type_aliases_cc_api_impl.rs
new file mode 100644
index 0000000..dd022fb
--- /dev/null
+++ b/cc_bindings_from_rs/test/golden/type_aliases_cc_api_impl.rs
@@ -0,0 +1,13 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+// Automatically @generated C++ bindings for the following Rust crate:
+// type_aliases_rust
+
+#![allow(improper_ctypes_definitions)]
+
+#[no_mangle]
+extern "C" fn __crubit_thunk_func_uusing_ualias() -> i32 {
+    ::type_aliases_rust::test_type_aliases::func_using_alias()
+}
diff --git a/common/BUILD b/common/BUILD
index e02942d..364d8c5 100644
--- a/common/BUILD
+++ b/common/BUILD
@@ -13,6 +13,11 @@
     default_visibility = ["//:__subpackages__"],
 )
 
+exports_files([
+    "LICENSE_HEADER",
+    "golden_test.sh",
+])
+
 rust_library(
     name = "arc_anyhow",
     srcs = ["arc_anyhow.rs"],
diff --git a/common/LICENSE_HEADER b/common/LICENSE_HEADER
new file mode 100644
index 0000000..455c075
--- /dev/null
+++ b/common/LICENSE_HEADER
@@ -0,0 +1,4 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
diff --git a/rs_bindings_from_cc/test/golden/test.sh b/common/golden_test.sh
similarity index 84%
rename from rs_bindings_from_cc/test/golden/test.sh
rename to common/golden_test.sh
index 11765b1..e3e0deb 100755
--- a/rs_bindings_from_cc/test/golden/test.sh
+++ b/common/golden_test.sh
@@ -4,7 +4,7 @@
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
 function prepend_license() {
-  cat rs_bindings_from_cc/test/golden/LICENSE_HEADER "$1"
+  cat common/LICENSE_HEADER "$1"
 }
 
 STATUS=0
@@ -27,6 +27,6 @@
 done
 
 if [ $STATUS != 0 ]; then
-  echo >&2 "To regenerate the goldens, run rs_bindings_from_cc/test/golden/update.sh"
+  echo >&2 "To regenerate the goldens, run cc_bindings_from_rs/test/golden/update.sh"
   exit 1
-fi
+fi
\ No newline at end of file
diff --git a/rs_bindings_from_cc/test/golden/update.sh b/common/golden_update.sh
similarity index 92%
rename from rs_bindings_from_cc/test/golden/update.sh
rename to common/golden_update.sh
index ecc3ace..8d08bc8 100755
--- a/rs_bindings_from_cc/test/golden/update.sh
+++ b/common/golden_update.sh
@@ -8,7 +8,8 @@
 bazel test \
   --test_tag_filters=crubit_golden_test,-manual \
   --build_tag_filters=crubit_golden_test,-manual \
+  --config=llvm-unstable \
   --test_strategy=local \
   --test_env=WRITE_GOLDENS=1 \
   -k \
-  //...
+  //...
\ No newline at end of file
diff --git a/rs_bindings_from_cc/README.md b/rs_bindings_from_cc/README.md
index 9b799b2..f3420eb 100644
--- a/rs_bindings_from_cc/README.md
+++ b/rs_bindings_from_cc/README.md
@@ -39,7 +39,7 @@
 to the [`golden`](test/golden) directory and regenerate the golden outputs:
 
 ```sh
-rs_bindings_from_cc/test/golden/update.sh
+common/golden_update.sh
 ```
 
 ### Running Crubit on a Bazel target
diff --git a/rs_bindings_from_cc/test/golden/BUILD b/rs_bindings_from_cc/test/golden/BUILD
index f7eaa4e..0a2010e 100644
--- a/rs_bindings_from_cc/test/golden/BUILD
+++ b/rs_bindings_from_cc/test/golden/BUILD
@@ -11,12 +11,6 @@
 
 package(default_applicable_licenses = ["//:license"])
 
-# These are needed by golden_test, which can be run in other packages.
-exports_files([
-    "test.sh",
-    "LICENSE_HEADER",
-])
-
 TESTS = [name[:-2] for name in glob(
     ["*.h"],
     exclude = [
diff --git a/rs_bindings_from_cc/test/golden/README.md b/rs_bindings_from_cc/test/golden/README.md
index 230c144..3252183 100644
--- a/rs_bindings_from_cc/test/golden/README.md
+++ b/rs_bindings_from_cc/test/golden/README.md
@@ -2,8 +2,11 @@
 
 ## Instructions
 
-*   Add a new test by adding a `foo.h` file and executing `./update.sh`. This
-    will generate the corresponding bindings files `foo.cc` and `foo.rs`.
+*   Add a new test by adding a `foo.h` file, create two empty files named
+    `foo_rs_api.rs` and `foo_rs_api_impl.cc`, and then executing
+    `cc_bindings_from_rs/test/golden/update.sh`. This will
+    generate the corresponding bindings files.
 *   If a test in this directory fails, look at the output. It should contain a
     diff of the failure.
-*   If you get spurious failures in this directory: Run `./update.sh`.
+*   If you get spurious failures in this directory: Run
+    `cc_bindings_from_rs/test/golden/update.sh`.
diff --git a/rs_bindings_from_cc/test/golden/golden_test.bzl b/rs_bindings_from_cc/test/golden/golden_test.bzl
index 49be6fa..d5c65ae 100644
--- a/rs_bindings_from_cc/test/golden/golden_test.bzl
+++ b/rs_bindings_from_cc/test/golden/golden_test.bzl
@@ -72,7 +72,7 @@
         cc_library = cc_library,
     )
     args = []
-    data = ["//rs_bindings_from_cc/test/golden:LICENSE_HEADER"]
+    data = ["//common:LICENSE_HEADER"]
     owned_files = []
     if golden_cc:
         new_cc = basename + ".cc_file"
@@ -127,7 +127,7 @@
 
     native.sh_test(
         name = name,
-        srcs = ["//rs_bindings_from_cc/test/golden:test.sh"],
+        srcs = ["//common:golden_test.sh"],
         args = args,
         data = data,
         tags = tags,
