summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dan Albert <danalbert@google.com> 2017-07-28 11:00:22 -0700
committer Dan Albert <danalbert@google.com> 2017-07-28 11:00:22 -0700
commitf55f0787a7922e7aa3755abc9b2c0130e982afa6 (patch)
treed7a271b4f0237717c95f5a6f4ef13d40d9843f36
parent074a5d35bffc80ff05ae4ce593314045bbf03c2d (diff)
Add support for weak symbols in the NDK stubs.
Test: nose2 Bug: None Change-Id: I202f718103f4a645b1eb83c0a9f5313bcdb4d485
-rwxr-xr-xcc/gen_stub_libs.py10
-rwxr-xr-xcc/test_gen_stub_libs.py6
2 files changed, 14 insertions, 2 deletions
diff --git a/cc/gen_stub_libs.py b/cc/gen_stub_libs.py
index bed718c39..abb39c2a3 100755
--- a/cc/gen_stub_libs.py
+++ b/cc/gen_stub_libs.py
@@ -347,10 +347,16 @@ class Generator(object):
if section_versioned and emit_version:
self.version_script.write(' ' + symbol.name + ';\n')
+ weak = ''
+ if 'weak' in symbol.tags:
+ weak = '__attribute__((weak)) '
+
if 'var' in symbol.tags:
- self.src_file.write('int {} = 0;\n'.format(symbol.name))
+ self.src_file.write('{}int {} = 0;\n'.format(
+ weak, symbol.name))
else:
- self.src_file.write('void {}() {{}}\n'.format(symbol.name))
+ self.src_file.write('{}void {}() {{}}\n'.format(
+ weak, symbol.name))
if not version_empty and section_versioned:
base = '' if version.base is None else ' ' + version.base
diff --git a/cc/test_gen_stub_libs.py b/cc/test_gen_stub_libs.py
index 4df6cf8c6..b20a5c73a 100755
--- a/cc/test_gen_stub_libs.py
+++ b/cc/test_gen_stub_libs.py
@@ -430,6 +430,8 @@ class GeneratorTest(unittest.TestCase):
gsl.Version('VERSION_1', None, [], [
gsl.Symbol('foo', []),
gsl.Symbol('bar', ['var']),
+ gsl.Symbol('woodly', ['weak']),
+ gsl.Symbol('doodly', ['weak', 'var']),
]),
gsl.Version('VERSION_2', 'VERSION_1', [], [
gsl.Symbol('baz', []),
@@ -443,6 +445,8 @@ class GeneratorTest(unittest.TestCase):
expected_src = textwrap.dedent("""\
void foo() {}
int bar = 0;
+ __attribute__((weak)) void woodly() {}
+ __attribute__((weak)) int doodly = 0;
void baz() {}
void qux() {}
""")
@@ -453,6 +457,8 @@ class GeneratorTest(unittest.TestCase):
global:
foo;
bar;
+ woodly;
+ doodly;
};
VERSION_2 {
global: