diff options
author | Yecheng Zhao <zyecheng@google.com> | 2024-04-26 00:05:29 +0000 |
---|---|---|
committer | Yecheng Zhao <zyecheng@google.com> | 2024-04-26 02:28:53 +0000 |
commit | 3b27c6f519f4ca5a96466129046397d1f79574f8 (patch) | |
tree | 36bd2e19863467b8e963904673f32643f1fdb87a /gbl/patches/BUILD | |
parent | 57d214e02106f0efe7f97b1f135cb5ae863721b3 (diff) | |
download | libbootloader-3b27c6f519f4ca5a96466129046397d1f79574f8.tar.gz |
Fix build error due to chkstk/alloca on x86
The `avb_cert_validate_vbmeta_public_key` API uses more than 8KB of
stack memory and triggers the compiler to insert calls to function
__chkstk() and __alloca() on x86/x86_64 platforms. Although rust
libcompiler_builtins does provide the implementations, there are
two issues:
1. LLVM mangles the symbol and add an additional underscore to the
symbol name, causing link to fail to find the correct one.
2. The implementation is not enabled for x86 uefi build. x86_64 had the
same issue but was fixed. But it wasn't ported to x86.
As a workaround, for #1 we define mangled symbols that simply jump to
the correct one. For #2 we apply the same fix from x86_64 for x86 at
build time to and rebuild std from source, until upstream is fixed.
Bug: 337114254
Change-Id: Id7bce71a7d5ca08fc79180733e40fc1ec083da57
Diffstat (limited to 'gbl/patches/BUILD')
-rw-r--r-- | gbl/patches/BUILD | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gbl/patches/BUILD b/gbl/patches/BUILD new file mode 100644 index 0000000..7509dde --- /dev/null +++ b/gbl/patches/BUILD @@ -0,0 +1,19 @@ +# Copyright (C) 2024 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package( + default_visibility = ["//visibility:public"], +) + +exports_files(glob(["**/*"])) |