| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file defines macros to handle the output of the shlib-symbols |
| // script (run without the -a switch). These macros generate assembly |
| // code that should define symbols in a DSO such that the resultant DSO |
| // has the same ABI as the DSO input to shlib-symbols. |
| |
| #define FUNCTION(NAME, SIZE) FUNCTION_1(global, NAME) |
| #define WEAK_FUNCTION(NAME, SIZE) FUNCTION_1(weak, NAME) |
| |
| #define FUNCTION_1(BINDING, NAME) \ |
| .pushsection.text, "ax", % progbits; \ |
| .BINDING NAME; \ |
| .type NAME, % function; \ |
| NAME: \ |
| .space 1; \ |
| .popsection |
| |
| #define OBJECT_1(SECTION, SECFLAGS, SECTYPE, BINDING, NAME, SIZE) \ |
| .pushsection SECTION, SECFLAGS, % SECTYPE; \ |
| .BINDING NAME; \ |
| .type NAME, % object; \ |
| NAME: \ |
| .space SIZE; \ |
| .size NAME, SIZE; \ |
| .popsection |
| |
| #define RODATA_OBJECT(NAME, SIZE) OBJECT_1(.rodata, "a", progbits, global, NAME, SIZE) |
| #define DATA_OBJECT(NAME, SIZE) OBJECT_1(.data, "aw", progbits, global, NAME, SIZE) |
| #define WEAK_DATA_OBJECT(NAME, SIZE) OBJECT_1(.data, "aw", progbits, weak, NAME, SIZE) |
| #define BSS_OBJECT(NAME, SIZE) OBJECT_1(.bss, "aw", nobits, global, NAME, SIZE) |
| |
| #define UNDEFINED_WEAK(NAME, SIZE) UNDEFINED_1(weak, NAME) |
| #define UNDEFINED(NAME, SIZE) UNDEFINED_1(globl, NAME) |
| #define UNDEFINED_1(BINDING, NAME) \ |
| .pushsection.undefined, "aw", % progbits; \ |
| .BINDING NAME; \ |
| .dc.a NAME; \ |
| .popsection |